commit d9be90599523627482d8ff6f0d0018ad322a6f8f Author: 徐振升 <359059686@qq.com> Date: Fri Sep 17 14:32:55 2021 +0800 初始化 diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..427441d --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,17 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +Firefox ESR +not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..59d9a3a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..86d943a --- /dev/null +++ b/.gitignore @@ -0,0 +1,46 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc +# Only exists if Bazel was run +/bazel-out + +# dependencies +/node_modules + +# profiling files +chrome-profiler-events*.json +speed-measure-plugin*.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..6e3b5cb --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "pwa-chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "http://localhost:4200", + "webRoot": "${workspaceFolder}" + } + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..98062a0 --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# BabylonjsWebApp + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.2.10. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/angular.json b/angular.json new file mode 100644 index 0000000..acd520e --- /dev/null +++ b/angular.json @@ -0,0 +1,112 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "BabylonjsWebApp": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/BabylonjsWebApp", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "aot": true, + "assets": ["src/favicon.ico", "src/assets"], + "styles": ["./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css"], + "scripts": [] + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb", + "maximumError": "10kb" + } + ] + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "BabylonjsWebApp:build" + }, + "configurations": { + "production": { + "browserTarget": "BabylonjsWebApp:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "BabylonjsWebApp:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": ["src/favicon.ico", "src/assets"], + "styles": ["./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css"], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "tsconfig.app.json", + "tsconfig.spec.json", + "e2e/tsconfig.json" + ], + "exclude": ["**/node_modules/**"] + } + }, + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "BabylonjsWebApp:serve" + }, + "configurations": { + "production": { + "devServerTarget": "BabylonjsWebApp:serve:production" + } + } + } + } + } + }, + "defaultProject": "BabylonjsWebApp" +} diff --git a/e2e/protractor.conf.js b/e2e/protractor.conf.js new file mode 100644 index 0000000..361e7f0 --- /dev/null +++ b/e2e/protractor.conf.js @@ -0,0 +1,37 @@ +// @ts-check +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter'); + +/** + * @type { import("protractor").Config } + */ +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './src/**/*.e2e-spec.ts' + ], + capabilities: { + browserName: 'chrome' + }, + directConnect: true, + SELENIUM_PROMISE_MANAGER: false, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.json') + }); + jasmine.getEnv().addReporter(new SpecReporter({ + spec: { + displayStacktrace: StacktraceOption.PRETTY + } + })); + } +}; \ No newline at end of file diff --git a/e2e/src/app.e2e-spec.ts b/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000..2d803e4 --- /dev/null +++ b/e2e/src/app.e2e-spec.ts @@ -0,0 +1,23 @@ +import { browser, logging } from 'protractor'; +import { AppPage } from './app.po'; + +describe('workspace-project App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', async () => { + await page.navigateTo(); + expect(await page.getTitleText()).toEqual('BabylonjsWebApp app is running!'); + }); + + afterEach(async () => { + // Assert that there are no errors emitted from the browser + const logs = await browser.manage().logs().get(logging.Type.BROWSER); + expect(logs).not.toContain(jasmine.objectContaining({ + level: logging.Level.SEVERE, + } as logging.Entry)); + }); +}); diff --git a/e2e/src/app.po.ts b/e2e/src/app.po.ts new file mode 100644 index 0000000..c9c85ab --- /dev/null +++ b/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + async navigateTo(): Promise { + return browser.get(browser.baseUrl); + } + + async getTitleText(): Promise { + return element(by.css('app-root .content span')).getText(); + } +} diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json new file mode 100644 index 0000000..0782539 --- /dev/null +++ b/e2e/tsconfig.json @@ -0,0 +1,13 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es2018", + "types": [ + "jasmine", + "node" + ] + } +} diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..ae01ab7 --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,44 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, './coverage/BabylonjsWebApp'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..7c5d4cd --- /dev/null +++ b/package-lock.json @@ -0,0 +1,14727 @@ +{ + "name": "babylonjs-web-app", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.1102.10", + "resolved": "https://registry.nlark.com/@angular-devkit/architect/download/@angular-devkit/architect-0.1102.10.tgz", + "integrity": "sha1-CYceSZsXfL/9cEm0pSGVLQdaTH8=", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.10", + "rxjs": "6.6.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.nlark.com/rxjs/download/rxjs-6.6.3.tgz", + "integrity": "sha1-jKhGNcTaqQDA05Z6buesYCce5VI=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", + "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", + "dev": true + } + } + }, + "@angular-devkit/build-angular": { + "version": "0.1102.10", + "resolved": "https://registry.nlark.com/@angular-devkit/build-angular/download/@angular-devkit/build-angular-0.1102.10.tgz", + "integrity": "sha1-sfQ5XdEOVLcR+ZQU2CZcgP1Y5Ck=", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1102.10", + "@angular-devkit/build-optimizer": "0.1102.10", + "@angular-devkit/build-webpack": "0.1102.10", + "@angular-devkit/core": "11.2.10", + "@babel/core": "7.12.10", + "@babel/generator": "7.12.11", + "@babel/plugin-transform-async-to-generator": "7.12.1", + "@babel/plugin-transform-runtime": "7.12.10", + "@babel/preset-env": "7.12.11", + "@babel/runtime": "7.12.5", + "@babel/template": "7.12.7", + "@discoveryjs/json-ext": "0.5.2", + "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@ngtools/webpack": "11.2.10", + "ansi-colors": "4.1.1", + "autoprefixer": "10.2.4", + "babel-loader": "8.2.2", + "browserslist": "^4.9.1", + "cacache": "15.0.5", + "caniuse-lite": "^1.0.30001032", + "circular-dependency-plugin": "5.2.2", + "copy-webpack-plugin": "6.3.2", + "core-js": "3.8.3", + "critters": "0.0.7", + "css-loader": "5.0.1", + "cssnano": "4.1.11", + "file-loader": "6.2.0", + "find-cache-dir": "3.3.1", + "glob": "7.1.6", + "https-proxy-agent": "5.0.0", + "inquirer": "7.3.3", + "jest-worker": "26.6.2", + "karma-source-map-support": "1.4.0", + "less": "4.1.1", + "less-loader": "7.3.0", + "license-webpack-plugin": "2.3.11", + "loader-utils": "2.0.0", + "mini-css-extract-plugin": "1.3.5", + "minimatch": "3.0.4", + "open": "7.4.0", + "ora": "5.3.0", + "parse5-html-rewriting-stream": "6.0.1", + "pnp-webpack-plugin": "1.6.4", + "postcss": "8.2.4", + "postcss-import": "14.0.0", + "postcss-loader": "4.2.0", + "raw-loader": "4.0.2", + "regenerator-runtime": "0.13.7", + "resolve-url-loader": "3.1.2", + "rimraf": "3.0.2", + "rollup": "2.38.4", + "rxjs": "6.6.3", + "sass": "1.32.6", + "sass-loader": "10.1.1", + "semver": "7.3.4", + "source-map": "0.7.3", + "source-map-loader": "1.1.3", + "source-map-support": "0.5.19", + "speed-measure-webpack-plugin": "1.4.2", + "style-loader": "2.0.0", + "stylus": "0.54.8", + "stylus-loader": "4.3.3", + "terser": "5.5.1", + "terser-webpack-plugin": "4.2.3", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "webpack": "4.44.2", + "webpack-dev-middleware": "3.7.2", + "webpack-dev-server": "3.11.2", + "webpack-merge": "5.7.3", + "webpack-sources": "2.2.0", + "webpack-subresource-integrity": "1.5.2", + "worker-plugin": "5.0.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.12.11", + "resolved": "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.12.11.tgz?cache=0&sync_timestamp=1618917779874&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.12.11.tgz", + "integrity": "sha1-mKffe4w1jJo3qweiQFaFMBaro68=", + "dev": true, + "requires": { + "@babel/types": "^7.12.11", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.12.7.tgz", + "integrity": "sha1-yBcjNpYBjjn7tsSR0vtoTgXtQ7w=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + }, + "browserslist": { + "version": "4.16.5", + "resolved": "https://registry.nlark.com/browserslist/download/browserslist-4.16.5.tgz", + "integrity": "sha1-lSglRAvKiRPGLQAhM0y+ko7wYq4=", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001214", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.719", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "cacache": { + "version": "15.0.5", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-15.0.5.tgz?cache=0&sync_timestamp=1616431251047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-15.0.5.tgz", + "integrity": "sha1-aRYoM9opFw1nMjNGQ8YOAF9fF9A=", + "dev": true, + "requires": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@npmcli/move-file/download/@npmcli/move-file-1.1.2.tgz", + "integrity": "sha1-GoLD43L3yuklPrZtclQ9a4aFxnQ=", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-2.0.0.tgz", + "integrity": "sha1-Fb++U9LqtM9w8YqM1o6+Wzyx3s4=", + "dev": true + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz", + "integrity": "sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz", + "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz?cache=0&sync_timestamp=1594427519396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-3.1.3.tgz", + "integrity": "sha1-fUL/HzljVILhX5zbUxhN7r1YFf0=", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/minipass-collect/download/minipass-collect-1.0.2.tgz", + "integrity": "sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/minipass-flush/download/minipass-flush-1.0.5.tgz", + "integrity": "sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz?cache=0&sync_timestamp=1595998565446&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass-pipeline%2Fdownload%2Fminipass-pipeline-1.2.4.tgz", + "integrity": "sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.nlark.com/p-map/download/p-map-4.0.0.tgz", + "integrity": "sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs=", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826725566&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz", + "integrity": "sha1-Y45OQ54v+9LNKJd21cpFfE9Roq8=", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "tar": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/tar/download/tar-6.1.0.tgz?cache=0&sync_timestamp=1610045923587&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-6.1.0.tgz", + "integrity": "sha1-0XJOm8wEuXexjVxXOzM6IgcimoM=", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz", + "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + } + } + }, + "caniuse-lite": { + "version": "1.0.30001216", + "resolved": "https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001216.tgz", + "integrity": "sha1-R0GKCCpPlS0U2JZK5zniXvsgYKk=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz", + "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-5.0.0.tgz", + "integrity": "sha1-4qkFQqu2inYuCghQ9sntrf2FBrI=", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npm.taobao.org/agent-base/download/agent-base-6.0.2.tgz?cache=0&sync_timestamp=1603479960600&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-6.0.2.tgz", + "integrity": "sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=", + "dev": true, + "requires": { + "debug": "4" + } + } + } + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-2.0.0.tgz", + "integrity": "sha1-5MrOW4FtQloWa18JfhDNErNgZLA=", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz", + "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz", + "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.nlark.com/rxjs/download/rxjs-6.6.3.tgz", + "integrity": "sha1-jKhGNcTaqQDA05Z6buesYCce5VI=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.4.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.4.tgz", + "integrity": "sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc=", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", + "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", + "dev": true + } + } + }, + "@angular-devkit/build-optimizer": { + "version": "0.1102.10", + "resolved": "https://registry.nlark.com/@angular-devkit/build-optimizer/download/@angular-devkit/build-optimizer-0.1102.10.tgz", + "integrity": "sha1-oSD1jvN7k/dPk2ld6dlD98WcKmY=", + "dev": true, + "requires": { + "loader-utils": "2.0.0", + "source-map": "0.7.3", + "tslib": "2.1.0", + "typescript": "4.1.5", + "webpack-sources": "2.2.0" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "dev": true + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.1.0.tgz", + "integrity": "sha1-2mCGDxwuyqVwOrfTm8Bba/mIuXo=", + "dev": true + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.1102.10", + "resolved": "https://registry.nlark.com/@angular-devkit/build-webpack/download/@angular-devkit/build-webpack-0.1102.10.tgz", + "integrity": "sha1-sSxUDDyzdtLsZcqxev0GDPh+Tj0=", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1102.10", + "@angular-devkit/core": "11.2.10", + "rxjs": "6.6.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.nlark.com/rxjs/download/rxjs-6.6.3.tgz", + "integrity": "sha1-jKhGNcTaqQDA05Z6buesYCce5VI=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", + "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", + "dev": true + } + } + }, + "@angular-devkit/core": { + "version": "11.2.10", + "resolved": "https://registry.nlark.com/@angular-devkit/core/download/@angular-devkit/core-11.2.10.tgz", + "integrity": "sha1-3fN+y6ya+ODSgBwYJ+gemzQxJB0=", + "dev": true, + "requires": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.nlark.com/rxjs/download/rxjs-6.6.3.tgz", + "integrity": "sha1-jKhGNcTaqQDA05Z6buesYCce5VI=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", + "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "11.2.10", + "resolved": "https://registry.nlark.com/@angular-devkit/schematics/download/@angular-devkit/schematics-11.2.10.tgz", + "integrity": "sha1-CYbkGUPTUC6R2yOcEhCVceUdFYU=", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.10", + "ora": "5.3.0", + "rxjs": "6.6.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.nlark.com/rxjs/download/rxjs-6.6.3.tgz", + "integrity": "sha1-jKhGNcTaqQDA05Z6buesYCce5VI=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", + "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", + "dev": true + } + } + }, + "@angular/animations": { + "version": "11.2.11", + "resolved": "https://registry.nlark.com/@angular/animations/download/@angular/animations-11.2.11.tgz", + "integrity": "sha1-doEYFTGhiJK5V1dzA618aBI/ZwA=", + "requires": { + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.2.0.tgz", + "integrity": "sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w=" + } + } + }, + "@angular/cdk": { + "version": "11.2.13", + "resolved": "https://registry.nlark.com/@angular/cdk/download/@angular/cdk-11.2.13.tgz", + "integrity": "sha1-1UyRh+O4zz+LoZCx7d3AjtK3QN4=", + "requires": { + "parse5": "^5.0.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz", + "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=", + "optional": true + } + } + }, + "@angular/cli": { + "version": "11.2.10", + "resolved": "https://registry.nlark.com/@angular/cli/download/@angular/cli-11.2.10.tgz", + "integrity": "sha1-zpM3lGmAuR3aiKDvK+hy/6QJoaI=", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1102.10", + "@angular-devkit/core": "11.2.10", + "@angular-devkit/schematics": "11.2.10", + "@schematics/angular": "11.2.10", + "@schematics/update": "0.1102.10", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.1", + "debug": "4.3.1", + "ini": "2.0.0", + "inquirer": "7.3.3", + "jsonc-parser": "3.0.0", + "npm-package-arg": "8.1.0", + "npm-pick-manifest": "6.1.0", + "open": "7.4.0", + "ora": "5.3.0", + "pacote": "11.2.4", + "resolve": "1.19.0", + "rimraf": "3.0.2", + "semver": "7.3.4", + "symbol-observable": "3.0.0", + "universal-analytics": "0.4.23", + "uuid": "8.3.2" + }, + "dependencies": { + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.19.0.tgz", + "integrity": "sha1-GvW/YwQJc0oGfK4pMYqsf6KaJnw=", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.4.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.4.tgz", + "integrity": "sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc=", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-8.3.2.tgz?cache=0&sync_timestamp=1607460077975&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=", + "dev": true + } + } + }, + "@angular/common": { + "version": "11.2.11", + "resolved": "https://registry.nlark.com/@angular/common/download/@angular/common-11.2.11.tgz", + "integrity": "sha1-lmPaQ2Tb9L/mzPpo9+SxPpvIWP8=", + "requires": { + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.2.0.tgz", + "integrity": "sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w=" + } + } + }, + "@angular/compiler": { + "version": "11.2.11", + "resolved": "https://registry.nlark.com/@angular/compiler/download/@angular/compiler-11.2.11.tgz", + "integrity": "sha1-jdMl5VOusksA8qrLyGV7AgalFq4=", + "requires": { + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.2.0.tgz", + "integrity": "sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w=" + } + } + }, + "@angular/compiler-cli": { + "version": "11.2.11", + "resolved": "https://registry.nlark.com/@angular/compiler-cli/download/@angular/compiler-cli-11.2.11.tgz", + "integrity": "sha1-5hEdAmESwr3NOBxnKqoBrwQ7zXs=", + "dev": true, + "requires": { + "@babel/core": "^7.8.6", + "@babel/types": "^7.8.6", + "canonical-path": "1.0.0", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.7.2", + "fs-extra": "4.0.2", + "magic-string": "^0.25.0", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "semver": "^6.3.0", + "source-map": "^0.6.1", + "sourcemap-codec": "^1.4.8", + "tslib": "^2.0.0", + "yargs": "^16.2.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.13.16", + "resolved": "https://registry.nlark.com/@babel/core/download/@babel/core-7.13.16.tgz", + "integrity": "sha1-d1arJDlsyWdfHD/NW3n8zhkuqWo=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.16", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.13.14", + "@babel/helpers": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.2.0.tgz", + "integrity": "sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w=", + "dev": true + } + } + }, + "@angular/core": { + "version": "11.2.11", + "resolved": "https://registry.nlark.com/@angular/core/download/@angular/core-11.2.11.tgz", + "integrity": "sha1-lokMkla8w7ZR6jzc8UTvdErNqPM=", + "requires": { + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.2.0.tgz", + "integrity": "sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w=" + } + } + }, + "@angular/forms": { + "version": "11.2.11", + "resolved": "https://registry.nlark.com/@angular/forms/download/@angular/forms-11.2.11.tgz", + "integrity": "sha1-RLNqhM5wJjDowVQyyuSrEfnNzDQ=", + "requires": { + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.2.0.tgz", + "integrity": "sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w=" + } + } + }, + "@angular/material": { + "version": "11.2.13", + "resolved": "https://registry.nlark.com/@angular/material/download/@angular/material-11.2.13.tgz", + "integrity": "sha1-mZYDFtPOWKrHSX17uLDAVGj1Ark=", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/platform-browser": { + "version": "11.2.11", + "resolved": "https://registry.nlark.com/@angular/platform-browser/download/@angular/platform-browser-11.2.11.tgz", + "integrity": "sha1-16FkPZYV5rvahU6R18d64YVYPKA=", + "requires": { + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.2.0.tgz", + "integrity": "sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w=" + } + } + }, + "@angular/platform-browser-dynamic": { + "version": "11.2.11", + "resolved": "https://registry.nlark.com/@angular/platform-browser-dynamic/download/@angular/platform-browser-dynamic-11.2.11.tgz", + "integrity": "sha1-bvSAMVDlCpLFGPTnB5rlLDE3S8U=", + "requires": { + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.2.0.tgz", + "integrity": "sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w=" + } + } + }, + "@angular/router": { + "version": "11.2.11", + "resolved": "https://registry.nlark.com/@angular/router/download/@angular/router-11.2.11.tgz", + "integrity": "sha1-+jpeHIlrX5refqtlj6DCndhdcr8=", + "requires": { + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.2.0.tgz", + "integrity": "sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w=" + } + } + }, + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.12.13.tgz?cache=0&sync_timestamp=1612314635887&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.12.13.tgz", + "integrity": "sha1-3PyCa+72XnXFDiHTg319lXmN1lg=", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/compat-data": { + "version": "7.13.15", + "resolved": "https://registry.nlark.com/@babel/compat-data/download/@babel/compat-data-7.13.15.tgz", + "integrity": "sha1-fo7qQtC2T9orN1si0GxgUiLoSPQ=", + "dev": true + }, + "@babel/core": { + "version": "7.12.10", + "resolved": "https://registry.nlark.com/@babel/core/download/@babel/core-7.12.10.tgz", + "integrity": "sha1-t5ouG59w7T2Eu/ttjE74JfYGvM0=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.10", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.13.16", + "resolved": "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.13.16.tgz?cache=0&sync_timestamp=1618917779874&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.13.16.tgz", + "integrity": "sha1-C+/ChwMaIB2EzfwXO0azIK5HLRQ=", + "dev": true, + "requires": { + "@babel/types": "^7.13.16", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.12.13.tgz?cache=0&sync_timestamp=1612314650267&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha1-D1jobfxLs7H819uAZXDhd9Q5tqs=", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha1-a8IDYciLCnTQUTemXKyNPL9vYfw=", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.16", + "resolved": "https://registry.nlark.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha1-bpHczxXj9D5VVt/+MthgEJiHVjw=", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.15", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.13.11", + "resolved": "https://registry.nlark.com/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.13.11.tgz", + "integrity": "sha1-MNMKAFvKLJU/VlP8JQkaSSF39PY=", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.17", + "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.12.17.tgz?cache=0&sync_timestamp=1613661261586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-create-regexp-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha1-oqyH6eMZJprGVbjUQV6U041mPLc=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.13.0.tgz?cache=0&sync_timestamp=1614035445198&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-explode-assignable-expression%2Fdownload%2F%40babel%2Fhelper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha1-F7XFn/Rz2flW9A71cM86dsoSZX8=", + "dev": true, + "requires": { + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.12.13.tgz", + "integrity": "sha1-k61lbbPDwiMlWf17LD29y+DrN3o=", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.12.13.tgz?cache=0&sync_timestamp=1612314686467&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.12.13.tgz", + "integrity": "sha1-vGNFHUA6OzCCuX4diz/lvUCR5YM=", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.13.16", + "resolved": "https://registry.nlark.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.13.16.tgz?cache=0&sync_timestamp=1618917701165&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-hoist-variables%2Fdownload%2F%40babel%2Fhelper-hoist-variables-7.13.16.tgz", + "integrity": "sha1-GxZRJJ6UtR+PDTNDmEPjPjl3WzA=", + "dev": true, + "requires": { + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.13.12.tgz?cache=0&sync_timestamp=1616428120148&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha1-3+No8m1CagcpnY1lE4IXaCFubXI=", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.13.12.tgz", + "integrity": "sha1-xqNppvNiHLJdoBQHhoTakZa2GXc=", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.13.14", + "resolved": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.13.14.tgz?cache=0&sync_timestamp=1617027429335&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-transforms%2Fdownload%2F%40babel%2Fhelper-module-transforms-7.13.14.tgz", + "integrity": "sha1-5gBlK6SMyxZBd1QTyzLPpOi0le8=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.12.13.tgz?cache=0&sync_timestamp=1612314636446&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha1-XALRcbTIYVsecWP4iMHIHDCiquo=", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.13.0.tgz?cache=0&sync_timestamp=1614035444776&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.13.0.tgz", + "integrity": "sha1-gGUmzhJa7QM3O8QWqCgyHjpqM68=", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.13.0.tgz?cache=0&sync_timestamp=1614035447369&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-remap-async-to-generator%2Fdownload%2F%40babel%2Fhelper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha1-N2p2DZ97SyB3qd0Fqpw5J8rbIgk=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.13.12.tgz?cache=0&sync_timestamp=1616428104144&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.13.12.tgz", + "integrity": "sha1-ZEL0wa2RJQJIGlZKc4beDHf/OAQ=", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.13.12.tgz?cache=0&sync_timestamp=1616428103561&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-simple-access%2Fdownload%2F%40babel%2Fhelper-simple-access-7.13.12.tgz", + "integrity": "sha1-3WxTivthgZ0gWgEsMXkqOcel6vY=", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npm.taobao.org/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha1-Ri3GOn5DWt6EaDhcY9K4TM5LPL8=", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.12.13.tgz?cache=0&sync_timestamp=1612314645430&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.12.13.tgz", + "integrity": "sha1-6UML4AuvPoiw4T5vnU6vITY3KwU=", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha1-yaHwIZF9y1zPDU5FPjmQIpgfye0=", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-option/download/@babel/helper-validator-option-7.12.17.tgz?cache=0&sync_timestamp=1613661263116&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-validator-option%2Fdownload%2F%40babel%2Fhelper-validator-option-7.12.17.tgz", + "integrity": "sha1-0fvwEuGnm37rv9xtJwuq+NnrmDE=", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.13.0.tgz?cache=0&sync_timestamp=1614035447022&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-wrap-function%2Fdownload%2F%40babel%2Fhelper-wrap-function-7.13.0.tgz", + "integrity": "sha1-vbXGb9qFJuwjWriUrVOhI1x5/MQ=", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helpers": { + "version": "7.13.17", + "resolved": "https://registry.nlark.com/@babel/helpers/download/@babel/helpers-7.13.17.tgz?cache=0&sync_timestamp=1618960866833&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.13.17.tgz", + "integrity": "sha1-tJfHoA6XGdW2E7iYK9pu0+6UyvY=", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.17", + "@babel/types": "^7.13.17" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.13.10.tgz?cache=0&sync_timestamp=1615243550421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.13.10.tgz", + "integrity": "sha1-qLKmYUj1sn1maxXYF3Q0enMdUtE=", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.13.16", + "resolved": "https://registry.nlark.com/@babel/parser/download/@babel/parser-7.13.16.tgz", + "integrity": "sha1-DxgXmwRI5pObHz9cTDVaOpvN/Tc=", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.13.15", + "resolved": "https://registry.nlark.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.13.15.tgz", + "integrity": "sha1-gOVJ3yc6OzBQQxsUjIkkkd8bzFs=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha1-FGN2AAuU79AB5XpAqIpSWvqrnzc=", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.13.8", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.13.8.tgz", + "integrity": "sha1-h2ofaWbh3sMy6MlFGv2jvrzfLh0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.12.13.tgz?cache=0&sync_timestamp=1612314774011&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-export-namespace-from%2Fdownload%2F%40babel%2Fplugin-proposal-export-namespace-from-7.12.13.tgz", + "integrity": "sha1-OTvkekrNA/oq9uPN6bBuM94bRG0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.13.8", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha1-vx+zYlRwda/aNjTtMVccWQGv73s=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.13.8", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.13.8.tgz", + "integrity": "sha1-k/p41jhXxAzjyMMxUiD9AL+7Tho=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.13.8", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", + "integrity": "sha1-NzCjHa/TwQ2MzRBkjtgKKsVHLvM=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.12.13.tgz", + "integrity": "sha1-vZ2jGI54e1EgtPnUZagmHOZ+0ds=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.13.8", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha1-XSEKTXJ9bOOxj53oLMmaOWTu1go=", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.13.8", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha1-Ota9WQFQbqmW/DG9zzzPor7XEQc=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.13.12.tgz?cache=0&sync_timestamp=1616428102192&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-optional-chaining%2Fdownload%2F%40babel%2Fplugin-proposal-optional-chaining-7.13.12.tgz", + "integrity": "sha1-up/rYB1CLgrepnYMK9a7t7/sSGY=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha1-BL1MbUD25rv6L1fi2AlLrZAO94c=", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha1-vr3lEzm+gpwXqqrO0YZB3rYrObo=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz?cache=0&sync_timestamp=1612314770269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-class-properties%2Fdownload%2F%40babel%2Fplugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha1-AolkqbqA28CUyRXEh618TnpmRlo=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz?cache=0&sync_timestamp=1593521592024&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-logical-assignment-operators%2Fdownload%2F%40babel%2Fplugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.12.13.tgz?cache=0&sync_timestamp=1612314769908&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-top-level-await%2Fdownload%2F%40babel%2Fplugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha1-xfD6biSfW3OXJ/kjVAz3qAYTAXg=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.13.0.tgz?cache=0&sync_timestamp=1614035445944&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-arrow-functions%2Fdownload%2F%40babel%2Fplugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha1-EKWb661S1jegJ6+mkujVzv9ePa4=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha1-OEmknMKiLpdDy9a1KSbTAzcimvE=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.12.13.tgz?cache=0&sync_timestamp=1612314776735&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-block-scoped-functions%2Fdownload%2F%40babel%2Fplugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha1-qb8YNvKjm062zwmWdzneKepL9MQ=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.13.16", + "resolved": "https://registry.nlark.com/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.13.16.tgz", + "integrity": "sha1-qcDxB5SFXGOx1imRTH3P7d0YWJI=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.13.0.tgz?cache=0&sync_timestamp=1614035447107&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.13.0.tgz", + "integrity": "sha1-AmUVUHXEKRi/TTpAUxNBdq2bUzs=", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.13.0.tgz?cache=0&sync_timestamp=1614035446130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-computed-properties%2Fdownload%2F%40babel%2Fplugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha1-hFxui5u1U3ax+guS7wvcjqBmRO0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.13.17", + "resolved": "https://registry.nlark.com/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.13.17.tgz?cache=0&sync_timestamp=1618960864725&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-destructuring%2Fdownload%2F%40babel%2Fplugin-transform-destructuring-7.13.17.tgz", + "integrity": "sha1-Z42WV2Y4wZ1bNrMyUE0/1uBt6ic=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha1-PxYBzCmQW/y2f1ORDxl66v67Ja0=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha1-bwa4eouAP9ko5UuBwljwoAM5BN4=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha1-TVI5C5onPmUeSrpq7knvQOgM0KE=", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.13.0.tgz?cache=0&sync_timestamp=1614035446118&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-for-of%2Fdownload%2F%40babel%2Fplugin-transform-for-of-7.13.0.tgz", + "integrity": "sha1-x5n4gagJGsJrVIZ6hFw+l9JpYGI=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha1-uwJEUvmq7YYdN0yOeiQlLOOlAFE=", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.12.13.tgz?cache=0&sync_timestamp=1612314767825&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-literals%2Fdownload%2F%40babel%2Fplugin-transform-literals-7.12.13.tgz", + "integrity": "sha1-LKRbr+SoIBl88xV5Sk0mVg/kvbk=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.12.13.tgz?cache=0&sync_timestamp=1612314777089&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-member-expression-literals%2Fdownload%2F%40babel%2Fplugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha1-X/pmzVm54ZExTJ8fgDuTjowIHkA=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.13.0.tgz?cache=0&sync_timestamp=1614035447659&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.13.0.tgz", + "integrity": "sha1-GfUR1g49h1PMWm1Od106UYSGbMM=", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.13.8", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.13.8.tgz", + "integrity": "sha1-ewGtfC3PInWwb6F4HgDRPUILPhs=", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha1-bQZu4r/zx7PWC/KN7Baa2ZODGuM=", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.13.0.tgz?cache=0&sync_timestamp=1614035447957&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-umd%2Fdownload%2F%40babel%2Fplugin-transform-modules-umd-7.13.0.tgz", + "integrity": "sha1-ij2WqX0ZlwW5/QIVgAgq+BwG5ws=", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha1-IhNyWl9bu+NktQw7pZmMlZnFydk=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.12.13.tgz?cache=0&sync_timestamp=1612314768286&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-new-target%2Fdownload%2F%40babel%2Fplugin-transform-new-target-7.12.13.tgz", + "integrity": "sha1-4i2MOvJLFQ3VKMvW5oXnmb8cNRw=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha1-tEFqLWO4974xTz00m9VanBtRcfc=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.13.0.tgz?cache=0&sync_timestamp=1614035446490&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-parameters%2Fdownload%2F%40babel%2Fplugin-transform-parameters-7.13.0.tgz", + "integrity": "sha1-j6dgPjCX+cC3yhpIIbwvtS6eUAc=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.12.13.tgz?cache=0&sync_timestamp=1612314768626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-property-literals%2Fdownload%2F%40babel%2Fplugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha1-TmqeN4ZNjxs7wOLc57+IV9uLGoE=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.13.15", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha1-5esolFv4tlY+f4GJRflmqNKZfzk=", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha1-fZmI1PBuD+aX6h2YAxiKoYtHJpU=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.12.10", + "resolved": "https://registry.nlark.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.12.10.tgz?cache=0&sync_timestamp=1618847033373&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-runtime%2Fdownload%2F%40babel%2Fplugin-transform-runtime-7.12.10.tgz", + "integrity": "sha1-rw/e1OhGxLNweOjl0G3qxs2EhWI=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.5", + "@babel/helper-plugin-utils": "^7.10.4", + "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha1-23VXMrcMU51QTGOQ2c6Q/mSv960=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha1-hIh3EOJzwYFaznrkWfb0Kl0x1f0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha1-dg/9k2+s5z+GCuZG+4bugvPQbR8=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.13.0.tgz?cache=0&sync_timestamp=1614035446668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-template-literals%2Fdownload%2F%40babel%2Fplugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha1-o2BJEnl3rZRDje50Q1mNHO/fQJ0=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha1-eF3Weh8upXnZwr5yLejITLhfWn8=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.12.13.tgz?cache=0&sync_timestamp=1612314780432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-escapes%2Fdownload%2F%40babel%2Fplugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha1-hAztO4FtO1En3R0S3O3F3q0aXnQ=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha1-tSUhaFgE4VWxIC6D/BiNNLtw9aw=", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/preset-env": { + "version": "7.12.11", + "resolved": "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.12.11.tgz", + "integrity": "sha1-VdX3mBSHNlyT27yEUHscchXoV/k=", + "dev": true, + "requires": { + "@babel/compat-data": "^7.12.7", + "@babel/helper-compilation-targets": "^7.12.5", + "@babel/helper-module-imports": "^7.12.5", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-option": "^7.12.11", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.11", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.7", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.10", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.12.11", + "core-js-compat": "^3.8.0", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/@babel/preset-modules/download/@babel/preset-modules-0.1.4.tgz", + "integrity": "sha1-Ni8raMZihClw/bXiVP/I/BwuQV4=", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.12.5", + "resolved": "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.12.5.tgz?cache=0&sync_timestamp=1618960866380&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.12.5.tgz", + "integrity": "sha1-QQ5+SHRB4bNgwpvnFdhw2bmFiC4=", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.12.13.tgz", + "integrity": "sha1-UwJlvooliduzdSOETFvLVZR/syc=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.17", + "resolved": "https://registry.nlark.com/@babel/traverse/download/@babel/traverse-7.13.17.tgz?cache=0&sync_timestamp=1618961109492&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.13.17.tgz", + "integrity": "sha1-yFQV4MfVCsBT11i67Jiyiy7P7qM=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.16", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.16", + "@babel/types": "^7.13.17", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.13.17", + "resolved": "https://registry.nlark.com/@babel/types/download/@babel/types-7.13.17.tgz?cache=0&sync_timestamp=1618961109356&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.13.17.tgz", + "integrity": "sha1-SAEKEVyfunWItEN91oyUaQErOLQ=", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "to-fast-properties": "^2.0.0" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.2", + "resolved": "https://registry.npm.taobao.org/@discoveryjs/json-ext/download/@discoveryjs/json-ext-0.5.2.tgz", + "integrity": "sha1-jwOiKgTeQ3JU6M6MyEujlokoh1I=", + "dev": true + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npm.taobao.org/@istanbuljs/schema/download/@istanbuljs/schema-0.1.3.tgz", + "integrity": "sha1-5F44TkuOwWvOL9kDr3hFD2v37Jg=", + "dev": true + }, + "@jsdevtools/coverage-istanbul-loader": { + "version": "3.0.5", + "resolved": "https://registry.npm.taobao.org/@jsdevtools/coverage-istanbul-loader/download/@jsdevtools/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha1-KkvGXQJx341ENZgttK812BdU7iY=", + "dev": true, + "requires": { + "convert-source-map": "^1.7.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", + "merge-source-map": "^1.1.0", + "schema-utils": "^2.7.0" + } + }, + "@ngtools/webpack": { + "version": "11.2.10", + "resolved": "https://registry.nlark.com/@ngtools/webpack/download/@ngtools/webpack-11.2.10.tgz", + "integrity": "sha1-s0HC3SC2wra+Rmlg+9nlGlY+8yY=", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.10", + "enhanced-resolve": "5.7.0", + "webpack-sources": "2.2.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.4.tgz", + "integrity": "sha1-1LNUml213iaD4MEHGrTxQJBLv2k=", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.4.tgz?cache=0&sync_timestamp=1609076382094&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-2.0.4.tgz", + "integrity": "sha1-o/LdYbq0O424+hCKEhz//kxnZlU=", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.6.tgz", + "integrity": "sha1-zOk5azCqWv6eN1Zgj1gxrctT0GM=", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@npmcli/ci-detect": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/@npmcli/ci-detect/download/@npmcli/ci-detect-1.3.0.tgz", + "integrity": "sha1-bB0sYl+27xud6oWtClr8vvhe8io=", + "dev": true + }, + "@npmcli/git": { + "version": "2.0.8", + "resolved": "https://registry.npm.taobao.org/@npmcli/git/download/@npmcli/git-2.0.8.tgz", + "integrity": "sha1-w4tUze7FVqtkHPYWHMeCVxGojWU=", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-4.0.2.tgz?cache=0&sync_timestamp=1617826790271&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-4.0.2.tgz", + "integrity": "sha1-XkJVB+7eT+qEa3Ji8IOEVsQgmWE=", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz", + "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.2", + "resolved": "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-8.1.2.tgz", + "integrity": "sha1-uGgBaufeVhnnKZk/vY0R3DxSq2I=", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha1-e1SEyiyQhWX0O38nZE82u4FvUUg=", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/promise-retry/download/promise-retry-2.0.1.tgz?cache=0&sync_timestamp=1592142510714&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpromise-retry%2Fdownload%2Fpromise-retry-2.0.1.tgz", + "integrity": "sha1-/3R6E2IKtXumiPX8Z4VUEMNw2iI=", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npm.taobao.org/@npmcli/installed-package-contents/download/@npmcli/installed-package-contents-1.0.7.tgz", + "integrity": "sha1-q3QIxhR5EblwqKviYc5RIjKj9Po=", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@npmcli/move-file/download/@npmcli/move-file-1.1.2.tgz", + "integrity": "sha1-GoLD43L3yuklPrZtclQ9a4aFxnQ=", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz", + "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", + "dev": true + } + } + }, + "@npmcli/node-gyp": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/@npmcli/node-gyp/download/@npmcli/node-gyp-1.0.2.tgz", + "integrity": "sha1-PNwfMOlzbbxBc3PtgDtCsaCint4=", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/@npmcli/promise-spawn/download/@npmcli/promise-spawn-1.3.2.tgz", + "integrity": "sha1-QtTlao6SdPuhgNq8CupuOPKSdPU=", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.5", + "resolved": "https://registry.nlark.com/@npmcli/run-script/download/@npmcli/run-script-1.8.5.tgz", + "integrity": "sha1-8lCgxeGginktd1oxXQ/0L8OlHh0=", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "infer-owner": "^1.0.4", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + }, + "dependencies": { + "read-package-json-fast": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/read-package-json-fast/download/read-package-json-fast-2.0.2.tgz", + "integrity": "sha1-Lcsk2ejdUPsyIELIw1qVTmzHrJ4=", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + } + } + }, + "@pixi/accessibility": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/accessibility/download/@pixi/accessibility-6.1.1.tgz", + "integrity": "sha1-5Ef9jQFNVVbAHUiVcV1gCi1QCvs=" + }, + "@pixi/app": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/app/download/@pixi/app-6.1.1.tgz", + "integrity": "sha1-a+PJnFOmUvXoy6U+Q81dkdnedOs=" + }, + "@pixi/canvas-renderer": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/canvas-renderer/download/@pixi/canvas-renderer-6.1.1.tgz", + "integrity": "sha1-USAv2niV0K3amyseHYYjM+RJRxw=" + }, + "@pixi/compressed-textures": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/compressed-textures/download/@pixi/compressed-textures-6.1.1.tgz", + "integrity": "sha1-rjJdUFQ2IOz4eLRJDcVVUys7PQQ=" + }, + "@pixi/constants": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/constants/download/@pixi/constants-6.1.1.tgz", + "integrity": "sha1-U+e3Cba7OgcJmp2ZBr5kSYWOm3s=" + }, + "@pixi/core": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/core/download/@pixi/core-6.1.1.tgz", + "integrity": "sha1-lTdoqwT4FhRecqMx3qDSpShwv8M=" + }, + "@pixi/display": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/display/download/@pixi/display-6.1.1.tgz", + "integrity": "sha1-uJTI009Aw8FmL1tKNRPXYVN6reM=" + }, + "@pixi/extract": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/extract/download/@pixi/extract-6.1.1.tgz", + "integrity": "sha1-kHLR6YW0ToVYQJUZNqjK4o1ZAhI=" + }, + "@pixi/filter-alpha": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/filter-alpha/download/@pixi/filter-alpha-6.1.1.tgz", + "integrity": "sha1-K10qs8VHl61K0ZFMnsnQRnHT+EI=" + }, + "@pixi/filter-blur": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/filter-blur/download/@pixi/filter-blur-6.1.1.tgz", + "integrity": "sha1-u2AIF+GEuADytI2MXds3TQYyoWo=" + }, + "@pixi/filter-color-matrix": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/filter-color-matrix/download/@pixi/filter-color-matrix-6.1.1.tgz", + "integrity": "sha1-B5cXlfuRj4XEcpuqmjsT3ADD3O4=" + }, + "@pixi/filter-displacement": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/filter-displacement/download/@pixi/filter-displacement-6.1.1.tgz", + "integrity": "sha1-cwPSJLO6gtvtahQ1OxIH/NEIw2E=" + }, + "@pixi/filter-fxaa": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/filter-fxaa/download/@pixi/filter-fxaa-6.1.1.tgz", + "integrity": "sha1-7uRJr4eC5dzMIQDqv3wAob2UVHQ=" + }, + "@pixi/filter-noise": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/filter-noise/download/@pixi/filter-noise-6.1.1.tgz", + "integrity": "sha1-PD3yo719SFyjznAcTttFOMpZ3LY=" + }, + "@pixi/graphics": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/graphics/download/@pixi/graphics-6.1.1.tgz", + "integrity": "sha1-aUePjsW4UBwx6pZ4PECw9qlpSew=" + }, + "@pixi/interaction": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/interaction/download/@pixi/interaction-6.1.1.tgz", + "integrity": "sha1-Mi4Wmfpi6sw+brd+ftZh/ruaRDE=" + }, + "@pixi/loaders": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/loaders/download/@pixi/loaders-6.1.1.tgz", + "integrity": "sha1-KEqG5bxMDTOUECztF4U9gZ7svr0=" + }, + "@pixi/math": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/math/download/@pixi/math-6.1.1.tgz", + "integrity": "sha1-3fG+dK2xg6Nyf/v32H1TFjUXt/A=" + }, + "@pixi/mesh": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/mesh/download/@pixi/mesh-6.1.1.tgz", + "integrity": "sha1-vbpNF7fXM7k2gy/9Yt6qEsnT61w=" + }, + "@pixi/mesh-extras": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/mesh-extras/download/@pixi/mesh-extras-6.1.1.tgz", + "integrity": "sha1-1pjNm4TyJCWns9itNd7TEkki330=" + }, + "@pixi/mixin-cache-as-bitmap": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/mixin-cache-as-bitmap/download/@pixi/mixin-cache-as-bitmap-6.1.1.tgz", + "integrity": "sha1-q/abyWO/exIZr+Jq37ANEsycvl0=" + }, + "@pixi/mixin-get-child-by-name": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/mixin-get-child-by-name/download/@pixi/mixin-get-child-by-name-6.1.1.tgz", + "integrity": "sha1-Dsz3kPXpmBmWC2UEZRyhLY6WVOM=" + }, + "@pixi/mixin-get-global-position": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/mixin-get-global-position/download/@pixi/mixin-get-global-position-6.1.1.tgz", + "integrity": "sha1-8OkWBHZlFY0M2s/hM6SyPSEg8RY=" + }, + "@pixi/particle-container": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/particle-container/download/@pixi/particle-container-6.1.1.tgz", + "integrity": "sha1-DTadxW1keytQfAE6poqb59Mqzpg=" + }, + "@pixi/polyfill": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/polyfill/download/@pixi/polyfill-6.1.1.tgz", + "integrity": "sha1-U/R/yunZ2EALBzmM1mPznJN7Vl0=", + "requires": { + "object-assign": "^4.1.1", + "promise-polyfill": "^8.2.0" + } + }, + "@pixi/prepare": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/prepare/download/@pixi/prepare-6.1.1.tgz", + "integrity": "sha1-g4Z/XJ+WIJVtIFlMApvZQhaLt7k=" + }, + "@pixi/runner": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/runner/download/@pixi/runner-6.1.1.tgz", + "integrity": "sha1-UXFZKdjSaXe5NPEwTdVg0YJpHZ0=" + }, + "@pixi/settings": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/settings/download/@pixi/settings-6.1.1.tgz", + "integrity": "sha1-G3Ns3ydo/gqxoTJjfqqGk6g9zdE=", + "requires": { + "ismobilejs": "^1.1.0" + } + }, + "@pixi/sprite": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/sprite/download/@pixi/sprite-6.1.1.tgz", + "integrity": "sha1-eVAJS4Np5dnCQsBq2kv7RJaZQCs=" + }, + "@pixi/sprite-animated": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/sprite-animated/download/@pixi/sprite-animated-6.1.1.tgz", + "integrity": "sha1-5MegRT/n6h+atkEQDYzvtMwMTrw=" + }, + "@pixi/sprite-tiling": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/sprite-tiling/download/@pixi/sprite-tiling-6.1.1.tgz", + "integrity": "sha1-81EOOWvNsdmHwn8XeBQlI7+d5Ls=" + }, + "@pixi/spritesheet": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/spritesheet/download/@pixi/spritesheet-6.1.1.tgz", + "integrity": "sha1-CpN5MW9ThpibXq9M6yiSJveMjFk=" + }, + "@pixi/text": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/text/download/@pixi/text-6.1.1.tgz", + "integrity": "sha1-2m8vFutLkixnowtmQ9hGoJYL1yo=" + }, + "@pixi/text-bitmap": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/text-bitmap/download/@pixi/text-bitmap-6.1.1.tgz", + "integrity": "sha1-7qs3vksamt8MZcoE1A2fvo1XYMw=" + }, + "@pixi/ticker": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/ticker/download/@pixi/ticker-6.1.1.tgz", + "integrity": "sha1-HE+sVna8+DyWuxGkO+LZ1WEK68Y=" + }, + "@pixi/utils": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/@pixi/utils/download/@pixi/utils-6.1.1.tgz", + "integrity": "sha1-bzMcfMqdKsCqnwnW2NzuWCQ6wTU=", + "requires": { + "@types/earcut": "^2.1.0", + "earcut": "^2.2.2", + "eventemitter3": "^3.1.0", + "url": "^0.11.0" + }, + "dependencies": { + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-3.1.2.tgz?cache=0&sync_timestamp=1598517795415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-3.1.2.tgz", + "integrity": "sha1-LT1I+cNGaY/Og6hdfWZOmFNd9uc=" + } + } + }, + "@schematics/angular": { + "version": "11.2.10", + "resolved": "https://registry.nlark.com/@schematics/angular/download/@schematics/angular-11.2.10.tgz", + "integrity": "sha1-Lc0RFB3rJgn0XVeWWSC3e5d7p9k=", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.10", + "@angular-devkit/schematics": "11.2.10", + "jsonc-parser": "3.0.0" + } + }, + "@schematics/update": { + "version": "0.1102.10", + "resolved": "https://registry.nlark.com/@schematics/update/download/@schematics/update-0.1102.10.tgz", + "integrity": "sha1-4Q4/MDTmHIfOFvltgu8LSIMzk6I=", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.10", + "@angular-devkit/schematics": "11.2.10", + "@yarnpkg/lockfile": "1.1.0", + "ini": "2.0.0", + "npm-package-arg": "^8.0.0", + "pacote": "11.2.4", + "semver": "7.3.4", + "semver-intersect": "1.4.0" + }, + "dependencies": { + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.4.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.4.tgz", + "integrity": "sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc=", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/@tootallnate/once/download/@tootallnate/once-1.1.2.tgz", + "integrity": "sha1-zLkURTYBeaBOf+av94wA/8Hur4I=", + "dev": true + }, + "@types/bezier-js": { + "version": "4.1.0", + "resolved": "https://registry.nlark.com/@types/bezier-js/download/@types/bezier-js-4.1.0.tgz", + "integrity": "sha1-4bAjzApuU0ktAkmgcRo+c9HfyP4=" + }, + "@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npm.taobao.org/@types/component-emitter/download/@types/component-emitter-1.2.10.tgz?cache=0&sync_timestamp=1613378325185&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fcomponent-emitter%2Fdownload%2F%40types%2Fcomponent-emitter-1.2.10.tgz", + "integrity": "sha1-71sVibnxZURkLkc9tepWORB+8+o=", + "dev": true + }, + "@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/@types/cookie/download/@types/cookie-0.4.0.tgz", + "integrity": "sha1-FPhUwPk9Mm452m47bzT303UT0Qg=", + "dev": true + }, + "@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.npm.taobao.org/@types/cors/download/@types/cors-2.8.10.tgz", + "integrity": "sha1-YcyEaYSeW83QxwRBIiZcOc7BDPQ=", + "dev": true + }, + "@types/earcut": { + "version": "2.1.1", + "resolved": "https://registry.nlark.com/@types/earcut/download/@types/earcut-2.1.1.tgz", + "integrity": "sha1-VzoK9gnxcAXHUfb0/+xJz+NY6lE=" + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.3.tgz", + "integrity": "sha1-5rqA82t9qtLGhazZJmOC5omFwYM=", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/jasmine": { + "version": "3.6.9", + "resolved": "https://registry.npm.taobao.org/@types/jasmine/download/@types/jasmine-3.6.9.tgz?cache=0&sync_timestamp=1616803776652&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjasmine%2Fdownload%2F%40types%2Fjasmine-3.6.9.tgz", + "integrity": "sha1-h4WHD4eDm32RtF17ImOA8o3uXZ8=", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.7.tgz", + "integrity": "sha1-mKmTUWyFnrDVxMjwmDF6nqaNua0=", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.4.tgz", + "integrity": "sha1-8Owl2/Lw5LGGRzE6wDETTKWySyE=", + "dev": true + }, + "@types/node": { + "version": "12.20.10", + "resolved": "https://registry.nlark.com/@types/node/download/@types/node-12.20.10.tgz?cache=0&sync_timestamp=1619466193682&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.20.10.tgz", + "integrity": "sha1-TcuKhajxIRrK+4jXL6/H49JoVYM=", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/@types/parse-json/download/@types/parse-json-4.0.0.tgz", + "integrity": "sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA=", + "dev": true + }, + "@types/point-in-polygon": { + "version": "1.0.0", + "resolved": "https://registry.nlark.com/@types/point-in-polygon/download/@types/point-in-polygon-1.0.0.tgz", + "integrity": "sha1-xQUe4racl6q3pG2Z209SaPyQ1s0=" + }, + "@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-0.0.32.tgz?cache=0&sync_timestamp=1613379901258&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "@types/quicksettings": { + "version": "3.0.0", + "resolved": "https://registry.nlark.com/@types/quicksettings/download/@types/quicksettings-3.0.0.tgz", + "integrity": "sha1-qT0IEiDpPY8yAC4HHjbgwxLIcIE=" + }, + "@types/selenium-webdriver": { + "version": "3.0.17", + "resolved": "https://registry.npm.taobao.org/@types/selenium-webdriver/download/@types/selenium-webdriver-3.0.17.tgz", + "integrity": "sha1-UL6gw8KswxyVnFsedHeYs7PQbUs=", + "dev": true + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz", + "integrity": "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk=", + "dev": true + }, + "@types/webpack-sources": { + "version": "0.1.8", + "resolved": "https://registry.npm.taobao.org/@types/webpack-sources/download/@types/webpack-sources-0.1.8.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fwebpack-sources%2Fdownload%2F%40types%2Fwebpack-sources-0.1.8.tgz", + "integrity": "sha1-B411QQQ1mT7IoKKFXohwbz91H4E=", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz?cache=0&sync_timestamp=1610041386122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.9.0.tgz", + "integrity": "sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz?cache=0&sync_timestamp=1610041388005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.9.0.tgz", + "integrity": "sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q=", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz?cache=0&sync_timestamp=1610041389547&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.9.0.tgz", + "integrity": "sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI=", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz?cache=0&sync_timestamp=1610041388939&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-buffer%2Fdownload%2F%40webassemblyjs%2Fhelper-buffer-1.9.0.tgz", + "integrity": "sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA=", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz?cache=0&sync_timestamp=1610041390925&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-code-frame%2Fdownload%2F%40webassemblyjs%2Fhelper-code-frame-1.9.0.tgz", + "integrity": "sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc=", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz?cache=0&sync_timestamp=1610041389208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-fsm%2Fdownload%2F%40webassemblyjs%2Fhelper-fsm-1.9.0.tgz", + "integrity": "sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg=", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz", + "integrity": "sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz?cache=0&sync_timestamp=1610041389085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-bytecode%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A=", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz?cache=0&sync_timestamp=1610041387398&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-section%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-section-1.9.0.tgz", + "integrity": "sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz?cache=0&sync_timestamp=1610041389648&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fieee754%2Fdownload%2F%40webassemblyjs%2Fieee754-1.9.0.tgz", + "integrity": "sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ=", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz?cache=0&sync_timestamp=1610041389439&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fleb128%2Fdownload%2F%40webassemblyjs%2Fleb128-1.9.0.tgz", + "integrity": "sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz?cache=0&sync_timestamp=1610041205627&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Futf8%2Fdownload%2F%40webassemblyjs%2Futf8-1.9.0.tgz", + "integrity": "sha1-BNM7Y2945qaBMifoJAL3Y3tiKas=", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz?cache=0&sync_timestamp=1610041387713&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-edit%2Fdownload%2F%40webassemblyjs%2Fwasm-edit-1.9.0.tgz", + "integrity": "sha1-P+bXnT8PkiGDqoYALELdJWz+6c8=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz?cache=0&sync_timestamp=1610041387011&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-gen%2Fdownload%2F%40webassemblyjs%2Fwasm-gen-1.9.0.tgz", + "integrity": "sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz?cache=0&sync_timestamp=1610041387249&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-opt%2Fdownload%2F%40webassemblyjs%2Fwasm-opt-1.9.0.tgz", + "integrity": "sha1-IhEYHlsxMmRDzIES658LkChyGmE=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz?cache=0&sync_timestamp=1610041386641&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-parser%2Fdownload%2F%40webassemblyjs%2Fwasm-parser-1.9.0.tgz", + "integrity": "sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz?cache=0&sync_timestamp=1610041387557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-parser%2Fdownload%2F%40webassemblyjs%2Fwast-parser-1.9.0.tgz", + "integrity": "sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz?cache=0&sync_timestamp=1610041386456&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-printer%2Fdownload%2F%40webassemblyjs%2Fwast-printer-1.9.0.tgz", + "integrity": "sha1-STXVTIX+9jewDOn1I3dFHQDUeJk=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz", + "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz", + "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/@yarnpkg/lockfile/download/@yarnpkg/lockfile-1.1.0.tgz", + "integrity": "sha1-53qX+9NFt22DJF7c0X05OxtB+zE=", + "dev": true + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/abab/download/abab-2.0.5.tgz", + "integrity": "sha1-wLZ4+zLWD8EhnHhNaoJv44Wut5o=", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz", + "integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1619285444401&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz", + "integrity": "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=", + "dev": true + }, + "adjust-sourcemap-loader": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/adjust-sourcemap-loader/download/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha1-WuEvtbexxYXoC7taY+wWOhpF5h4=", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npm.taobao.org/adm-zip/download/adm-zip-0.4.16.tgz?cache=0&sync_timestamp=1617192042837&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fadm-zip%2Fdownload%2Fadm-zip-0.4.16.tgz", + "integrity": "sha1-z0xQj9/6sCwmnLx/RxqHXwVXA2U=", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npm.taobao.org/agent-base/download/agent-base-6.0.2.tgz?cache=0&sync_timestamp=1603479960600&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-6.0.2.tgz", + "integrity": "sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.1.4", + "resolved": "https://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-4.1.4.tgz", + "integrity": "sha1-2SgCikhiyxFxjlUieHLoQqRMlFs=", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz", + "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz", + "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz?cache=0&sync_timestamp=1616886640262&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-errors%2Fdownload%2Fajv-errors-1.0.1.tgz", + "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1616882441894&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz", + "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz", + "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.2.tgz", + "integrity": "sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4=", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + } + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.2.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-3.1.2.tgz", + "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-root-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/app-root-path/download/app-root-path-3.0.0.tgz", + "integrity": "sha1-IQtvQ4cyJ+GKS4EKAyKDMRVV1a0=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz", + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz", + "integrity": "sha1-SzXClE8GKov82mZBB2A1D+nd/CE=", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npm.taobao.org/arg/download/arg-4.1.3.tgz", + "integrity": "sha1-Jp/HrVuOQstjyJbVZmAXJhwUQIk=", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } + } + }, + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/aria-query/download/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/arity-n/download/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-2.1.2.tgz", + "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz?cache=0&sync_timestamp=1614624861176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-union%2Fdownload%2Farray-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-5.4.1.tgz", + "integrity": "sha1-EamAuE67kXgc41sP3C7ilON4Pwc=", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz", + "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz", + "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1596697422093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/assign-symbols/download/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npm.taobao.org/ast-types-flow/download/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz", + "integrity": "sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8=", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz", + "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz", + "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", + "dev": true + }, + "autoprefixer": { + "version": "10.2.4", + "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-10.2.4.tgz?cache=0&sync_timestamp=1614956824768&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-10.2.4.tgz", + "integrity": "sha1-wOfPJPzGoa5dYlDGI/DLi+7y9+E=", + "dev": true, + "requires": { + "browserslist": "^4.16.1", + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "fraction.js": "^4.0.13", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npm.taobao.org/aws-sign2/download/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz?cache=0&sync_timestamp=1604101244098&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.11.0.tgz", + "integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=", + "dev": true + }, + "axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/axobject-query/download/axobject-query-2.0.2.tgz?cache=0&sync_timestamp=1592784633932&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxobject-query%2Fdownload%2Faxobject-query-2.0.2.tgz", + "integrity": "sha1-6hh6vluQArN3+SXYv30cVhrfOPk=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.2.2.tgz?cache=0&sync_timestamp=1606424647115&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.2.2.tgz", + "integrity": "sha1-k2POhMEMmkDmx1N0jhRBtgyKC4E=", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz", + "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babylonjs": { + "version": "5.0.0-alpha.40", + "resolved": "https://registry.nlark.com/babylonjs/download/babylonjs-5.0.0-alpha.40.tgz", + "integrity": "sha1-Veak+rIrjaCwvrFBP10muzgctjo=" + }, + "babylonjs-gltf2interface": { + "version": "5.0.0-alpha.40", + "resolved": "https://registry.nlark.com/babylonjs-gltf2interface/download/babylonjs-gltf2interface-5.0.0-alpha.40.tgz", + "integrity": "sha1-oM40fNPnyhwLzhbPP4xhMVBk4ek=" + }, + "babylonjs-loaders": { + "version": "5.0.0-alpha.40", + "resolved": "https://registry.nlark.com/babylonjs-loaders/download/babylonjs-loaders-5.0.0-alpha.40.tgz", + "integrity": "sha1-M7S535Y3985faZpl6s7lXbjFF8c=", + "requires": { + "babylonjs": "5.0.0-alpha.40", + "babylonjs-gltf2interface": "5.0.0-alpha.40" + } + }, + "babylonjs-materials": { + "version": "5.0.0-alpha.40", + "resolved": "https://registry.nlark.com/babylonjs-materials/download/babylonjs-materials-5.0.0-alpha.40.tgz", + "integrity": "sha1-naRXuZnDJeMAyxznhoJ8flPWubI=", + "requires": { + "babylonjs": "5.0.0-alpha.40" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz", + "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.5.1.tgz", + "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=", + "dev": true + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/base64id/download/base64id-2.0.0.tgz", + "integrity": "sha1-J3Csa8R9MSr5eov5pjQ0LgzSXLY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bezier-js": { + "version": "4.1.1", + "resolved": "https://registry.nlark.com/bezier-js/download/bezier-js-4.1.1.tgz", + "integrity": "sha1-QU32VoMxBOhnZcD6XjFDn7PoOjQ=" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz", + "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz?cache=0&sync_timestamp=1610299640881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.2.0.tgz", + "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz", + "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/bl/download/bl-4.1.0.tgz", + "integrity": "sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo=", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "blocking-proxy": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/blocking-proxy/download/blocking-proxy-1.0.1.tgz", + "integrity": "sha1-gdb9H+E6TA1pV99/kbdemNrEDLI=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz", + "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=", + "dev": true + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.2.0.tgz", + "integrity": "sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI=", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz", + "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1614010713935&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz", + "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz", + "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz", + "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.1.0.tgz?cache=0&sync_timestamp=1605194257215&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-rsa%2Fdownload%2Fbrowserify-rsa-4.1.0.tgz", + "integrity": "sha1-sv0Gtbda4pf3zi3GUfkY9b4VjI0=", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.2.1.tgz?cache=0&sync_timestamp=1596557809886&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-sign%2Fdownload%2Fbrowserify-sign-4.2.1.tgz", + "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.16.5", + "resolved": "https://registry.nlark.com/browserslist/download/browserslist-4.16.5.tgz", + "integrity": "sha1-lSglRAvKiRPGLQAhM0y+ko7wYq4=", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001214", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.719", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "browserstack": { + "version": "1.6.1", + "resolved": "https://registry.npm.taobao.org/browserstack/download/browserstack-1.6.1.tgz", + "integrity": "sha1-4FH5cz7DtQdlnzlcekdlobHjWLM=", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-5.7.1.tgz?cache=0&sync_timestamp=1606098189689&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-5.7.1.tgz", + "integrity": "sha1-umLnwTEzBTWCGXFghRqPZI6Z7tA=", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz", + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz", + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/builtin-modules/download/builtin-modules-1.1.1.tgz?cache=0&sync_timestamp=1608615254302&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuiltin-modules%2Fdownload%2Fbuiltin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/builtins/download/builtins-1.0.3.tgz?cache=0&sync_timestamp=1617817093967&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuiltins%2Fdownload%2Fbuiltins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz", + "integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=", + "dev": true + }, + "cacache": { + "version": "15.0.6", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-15.0.6.tgz?cache=0&sync_timestamp=1616431251047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-15.0.6.tgz", + "integrity": "sha1-ZajFgP2hW1kVD7dr8/Oo5F1YMJk=", + "dev": true, + "requires": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz", + "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/call-bind/download/call-bind-1.0.2.tgz?cache=0&sync_timestamp=1610402811207&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcall-bind%2Fdownload%2Fcall-bind-1.0.2.tgz", + "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.nlark.com/caller-path/download/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz", + "integrity": "sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001216", + "resolved": "https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001216.tgz", + "integrity": "sha1-R0GKCCpPlS0U2JZK5zniXvsgYKk=", + "dev": true + }, + "canonical-path": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/canonical-path/download/canonical-path-1.0.0.tgz", + "integrity": "sha1-/LRwwjlY3vhQgYVr56hukE8YDR0=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1618995384030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1601032463282&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz", + "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=", + "dev": true + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.5.1.tgz?cache=0&sync_timestamp=1610719380575&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.5.1.tgz", + "integrity": "sha1-7pznu+vSt59J8wR5nVRo4x4U5oo=", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-2.0.0.tgz", + "integrity": "sha1-Fb++U9LqtM9w8YqM1o6+Wzyx3s4=", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz?cache=0&sync_timestamp=1617905826919&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchrome-trace-event%2Fdownload%2Fchrome-trace-event-1.0.3.tgz", + "integrity": "sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw=", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-dependency-plugin": { + "version": "5.2.2", + "resolved": "https://registry.npm.taobao.org/circular-dependency-plugin/download/circular-dependency-plugin-5.2.2.tgz", + "integrity": "sha1-Oeg2B52x088vmI3EjFGIpEBYtgA=", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1618679111227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz", + "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz", + "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.0", + "resolved": "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.6.0.tgz?cache=0&sync_timestamp=1616091622495&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-2.6.0.tgz", + "integrity": "sha1-NsfcmPtqmna9YjjsP3fiQlYn6Tk=", + "dev": true + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/cli-width/download/cli-width-3.0.0.tgz", + "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-7.0.4.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-7.0.4.tgz", + "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/clone-deep/download/clone-deep-4.0.1.tgz", + "integrity": "sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/coa/download/coa-2.0.2.tgz", + "integrity": "sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM=", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "dependencies": { + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.4.tgz?cache=0&sync_timestamp=1613379901258&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.4.tgz", + "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", + "dev": true + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codelyzer": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/codelyzer/download/codelyzer-6.0.1.tgz", + "integrity": "sha1-wOlmjoRyVbN8dZ5o+ycAsR4nfQ8=", + "dev": true, + "requires": { + "@angular/compiler": "9.0.0", + "@angular/core": "9.0.0", + "app-root-path": "^3.0.0", + "aria-query": "^3.0.0", + "axobject-query": "2.0.2", + "css-selector-tokenizer": "^0.7.1", + "cssauron": "^1.4.0", + "damerau-levenshtein": "^1.0.4", + "rxjs": "^6.5.3", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.7", + "sprintf-js": "^1.1.2", + "tslib": "^1.10.0", + "zone.js": "~0.10.3" + }, + "dependencies": { + "@angular/compiler": { + "version": "9.0.0", + "resolved": "https://registry.nlark.com/@angular/compiler/download/@angular/compiler-9.0.0.tgz", + "integrity": "sha1-h+C+9MNptsra4H46QpV3j8k3mdU=", + "dev": true + }, + "@angular/core": { + "version": "9.0.0", + "resolved": "https://registry.nlark.com/@angular/core/download/@angular/core-9.0.0.tgz", + "integrity": "sha1-In3FPhrIGCT5mMbnYAC378UiZB4=", + "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.nlark.com/rxjs/download/rxjs-6.6.7.tgz", + "integrity": "sha1-kKwBisq/SRv2UEQjXVhjxNq4BMk=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", + "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", + "dev": true + }, + "zone.js": { + "version": "0.10.3", + "resolved": "https://registry.npm.taobao.org/zone.js/download/zone.js-0.10.3.tgz", + "integrity": "sha1-Pl5NoDxgfJ3NkuN901aHoUoUDBY=", + "dev": true + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/color/download/color-3.1.3.tgz", + "integrity": "sha1-ymf7TnuX1hHc3jns7tQiBn2RWW4=", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + }, + "dependencies": { + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + } + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, + "color-string": { + "version": "1.5.5", + "resolved": "https://registry.npm.taobao.org/color-string/download/color-string-1.5.5.tgz", + "integrity": "sha1-ZUdKjw50OWJfPSemoZ2J/EUiMBQ=", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/colorette/download/colorette-1.2.2.tgz?cache=0&sync_timestamp=1614259647923&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.2.tgz", + "integrity": "sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ=", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz?cache=0&sync_timestamp=1589682043437&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolors%2Fdownload%2Fcolors-1.4.0.tgz", + "integrity": "sha1-xQSRR51MG9rtLJztMs98fcI2D3g=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1616364569946&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz", + "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz", + "integrity": "sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A=", + "dev": true + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/compose-function/download/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "dev": true, + "requires": { + "arity-n": "^1.0.4" + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz", + "integrity": "sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o=", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz", + "integrity": "sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48=", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npm.taobao.org/connect/download/connect-3.7.0.tgz", + "integrity": "sha1-XUk0iRDKpeB6AYALAw0MNfIEhPg=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz", + "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz", + "integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz", + "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true + } + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz", + "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-anything": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/copy-anything/download/copy-anything-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-anything%2Fdownload%2Fcopy-anything-2.0.3.tgz", + "integrity": "sha1-hCQHugJGaw34RIGbvjuuu+XUXYc=", + "dev": true, + "requires": { + "is-what": "^3.12.0" + } + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz", + "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "6.3.2", + "resolved": "https://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-6.3.2.tgz?cache=0&sync_timestamp=1617709623958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.3.2.tgz", + "integrity": "sha1-DpIKbBgaUFKqbihhsWS9oD+Dr+s=", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "fast-glob": "^3.2.4", + "find-cache-dir": "^3.3.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.1", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-3.1.0.tgz?cache=0&sync_timestamp=1606288333421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-3.1.0.tgz", + "integrity": "sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-3.0.0.tgz", + "integrity": "sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1603965301737&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "core-js": { + "version": "3.8.3", + "resolved": "https://registry.nlark.com/core-js/download/core-js-3.8.3.tgz", + "integrity": "sha1-whkG4fFPNon5OrzG4miDVQ3ZLdA=", + "dev": true + }, + "core-js-compat": { + "version": "3.11.0", + "resolved": "https://registry.nlark.com/core-js-compat/download/core-js-compat-3.11.0.tgz", + "integrity": "sha1-Y1aD9DSAoLQeP2vjscZI2tuLQ5A=", + "dev": true, + "requires": { + "browserslist": "^4.16.4", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.0.0.tgz", + "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npm.taobao.org/cors/download/cors-2.8.5.tgz", + "integrity": "sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk=", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz", + "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.4.tgz?cache=0&sync_timestamp=1596557441827&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcreate-ecdh%2Fdownload%2Fcreate-ecdh-4.0.4.tgz", + "integrity": "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz", + "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz", + "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz", + "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "critters": { + "version": "0.0.7", + "resolved": "https://registry.npm.taobao.org/critters/download/critters-0.0.7.tgz", + "integrity": "sha1-VItHA2D088UeYi3jt6pzPI8LF78=", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "css": "^3.0.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "pretty-bytes": "^5.3.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995384030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz", + "integrity": "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz", + "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/css/download/css-3.0.0.tgz", + "integrity": "sha1-REek1Y/dAzZ8UWyp9krjZc7kql0=", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "css-loader": { + "version": "5.0.1", + "resolved": "https://registry.nlark.com/css-loader/download/css-loader-5.0.1.tgz", + "integrity": "sha1-nk3g1mNqYmalhb0JALQiyFU50l8=", + "dev": true, + "requires": { + "camelcase": "^6.2.0", + "cssesc": "^3.0.0", + "icss-utils": "^5.0.0", + "loader-utils": "^2.0.0", + "postcss": "^8.1.4", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-6.2.0.tgz?cache=0&sync_timestamp=1603921799543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamelcase%2Fdownload%2Fcamelcase-6.2.0.tgz", + "integrity": "sha1-kkr4gcnVJaydh/QNlk5c6pgqGAk=", + "dev": true + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-3.0.0.tgz", + "integrity": "sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "css-parse": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/css-parse/download/css-parse-2.0.0.tgz", + "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "dev": true, + "requires": { + "css": "^2.0.0" + }, + "dependencies": { + "css": { + "version": "2.2.4", + "resolved": "https://registry.npm.taobao.org/css/download/css-2.2.4.tgz", + "integrity": "sha1-xkZ1XHOXHyu6amAeLPL9cbEpiSk=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz", + "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-2.1.0.tgz", + "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc=", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha1-c18mGG5nx0mq8nV4NAXPBmH66PE=", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.nlark.com/css-tree/download/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI=", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-3.4.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-what%2Fdownload%2Fcss-what-3.4.2.tgz", + "integrity": "sha1-6nAm/LAXd+295SEk4h8yfnrpUOQ=", + "dev": true + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/cssauron/download/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "X.X.X" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz", + "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=", + "dev": true + }, + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npm.taobao.org/cssnano/download/cssnano-4.1.11.tgz?cache=0&sync_timestamp=1618342217454&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano%2Fdownload%2Fcssnano-4.1.11.tgz", + "integrity": "sha1-x7X1uB2iacsf2YLLlgwSAJEMmpk=", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npm.taobao.org/cssnano-preset-default/download/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha1-kgYisfwelaNOiDggPxOXpQTy0/8=", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M=", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/csso/download/csso-4.2.0.tgz?cache=0&sync_timestamp=1606408761368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsso%2Fdownload%2Fcsso-4.2.0.tgz", + "integrity": "sha1-6jpWE0bo3J9UbW/r7dUBh884lSk=", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.nlark.com/css-tree/download/css-tree-1.1.3.tgz", + "integrity": "sha1-60hw+2/XcHMn7JXC/yqwm16NuR0=", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.14.tgz?cache=0&sync_timestamp=1619049042656&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.14.tgz", + "integrity": "sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA=", + "dev": true + } + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/custom-event/download/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/d/download/d-1.0.1.tgz", + "integrity": "sha1-hpgJU3LVjb7jRv/Qxwk/mfj561o=", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "damerau-levenshtein": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/damerau-levenshtein/download/damerau-levenshtein-1.0.6.tgz", + "integrity": "sha1-FDwWQcs9hcYMMjKeJoma3qhwF5E=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz?cache=0&sync_timestamp=1601073390487&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdashdash%2Fdownload%2Fdashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-format": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/date-format/download/date-format-3.0.0.tgz", + "integrity": "sha1-64eANlx9KxURB4+0keZHl4DzrZU=", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz", + "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + } + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz?cache=0&sync_timestamp=1610348638646&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz?cache=0&sync_timestamp=1606860281983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz", + "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz?cache=0&sync_timestamp=1610365791284&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-4.2.0.tgz", + "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npm.taobao.org/del/download/del-2.2.2.tgz?cache=0&sync_timestamp=1601076806416&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "dependency-graph": { + "version": "0.7.2", + "resolved": "https://registry.npm.taobao.org/dependency-graph/download/dependency-graph-0.7.2.tgz", + "integrity": "sha1-kdud5utyaZIJ2IrqTB/VIhysHEk=", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz", + "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.5.tgz?cache=0&sync_timestamp=1615920847007&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdetect-node%2Fdownload%2Fdetect-node-2.0.5.tgz", + "integrity": "sha1-nScKp+qlrwtyxMnZuBTn9M5zi3k=", + "dev": true + }, + "detect-touch-device": { + "version": "1.1.6", + "resolved": "https://registry.nlark.com/detect-touch-device/download/detect-touch-device-1.1.6.tgz", + "integrity": "sha1-s9yi6+K9sntVEsEx3EUDKaRh2gA=" + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/di/download/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/diff/download/diff-4.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdiff%2Fdownload%2Fdiff-4.0.2.tgz", + "integrity": "sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz", + "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz", + "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz", + "integrity": "sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8=", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/dns-equal/download/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/dns-packet/download/dns-packet-1.3.1.tgz", + "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/dns-txt/download/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/dom-serialize/download/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1617912077476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz", + "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz", + "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz?cache=0&sync_timestamp=1604239910191&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomain-browser%2Fdownload%2Fdomain-browser-1.2.0.tgz", + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz", + "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=", + "dev": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz", + "integrity": "sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz?cache=0&sync_timestamp=1605778178338&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.3.0.tgz", + "integrity": "sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog=", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz", + "integrity": "sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk=", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "earcut": { + "version": "2.2.3", + "resolved": "https://registry.nlark.com/earcut/download/earcut-2.2.3.tgz", + "integrity": "sha1-1EztL/WhiFlWjjJ92cfUaxb1XPQ=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.722", + "resolved": "https://registry.nlark.com/electron-to-chromium/download/electron-to-chromium-1.3.722.tgz", + "integrity": "sha1-YhZX955/ZUAucao0A7yUHzpK8KA=", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.4.tgz", + "integrity": "sha1-2jfOvTHnmhNn6UG1ku0fvr1Yq7s=", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz", + "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz?cache=0&sync_timestamp=1614682725186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-8.0.0.tgz", + "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz", + "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npm.taobao.org/encoding/download/encoding-0.1.13.tgz?cache=0&sync_timestamp=1594362877372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fencoding%2Fdownload%2Fencoding-0.1.13.tgz", + "integrity": "sha1-VldK/deR9UqOmyeFwFgqLSYhD6k=", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.6.2.tgz?cache=0&sync_timestamp=1594184325364&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.6.2.tgz", + "integrity": "sha1-zhPRh1sMOmdL1qBLf3awGxtt7QE=", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz", + "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/engine.io/download/engine.io-4.1.1.tgz", + "integrity": "sha1-mo+KWsWl6jFhg8SJv39bbPkazls=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.1.tgz", + "integrity": "sha1-r9cT/ibr0hupXOth+agRblClN9E=", + "dev": true + }, + "ws": { + "version": "7.4.5", + "resolved": "https://registry.npm.taobao.org/ws/download/ws-7.4.5.tgz", + "integrity": "sha1-pITdhR6b62/bQgAn44hejOSJhsE=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-4.0.2.tgz", + "integrity": "sha1-5B0LP7Zve/SjZx0gOKFUAk7bUB4=", + "dev": true, + "requires": { + "base64-arraybuffer": "0.1.4" + } + }, + "enhanced-resolve": { + "version": "5.7.0", + "resolved": "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-5.7.0.tgz", + "integrity": "sha1-UlxdhWaA+9UFLeRTrIPjIEmVi1w=", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/ent/download/ent-2.2.0.tgz?cache=0&sync_timestamp=1589682752407&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fent%2Fdownload%2Fent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.2.0.tgz?cache=0&sync_timestamp=1611535562200&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-2.2.0.tgz", + "integrity": "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/env-paths/download/env-paths-2.2.1.tgz", + "integrity": "sha1-QgOZ1BbOH76bwKB8Yvpo1n/Q+PI=", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/err-code/download/err-code-2.0.3.tgz", + "integrity": "sha1-I8Lzt1b/38YI0w4nyalBAkgH5/k=", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.8.tgz", + "integrity": "sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0.tgz?cache=0&sync_timestamp=1614814465007&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.18.0.tgz", + "integrity": "sha1-q4CzWe7Lft5MKYAAOQvFrD7HtaQ=", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz", + "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npm.taobao.org/es5-ext/download/es5-ext-0.10.53.tgz", + "integrity": "sha1-k8WjrP2+8nUiCtcmRK0C7hg2jeE=", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/es6-iterator/download/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.8.tgz", + "integrity": "sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo=", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/es6-promisify/download/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.3.tgz", + "integrity": "sha1-utXTwbzawoJp9MszHkMceKxwXRg=", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz?cache=0&sync_timestamp=1602567261690&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.1.1.tgz", + "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&sync_timestamp=1618677355234&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz?cache=0&sync_timestamp=1599933677754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-4.0.3.tgz", + "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz", + "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-5.2.0.tgz", + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642941915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz?cache=0&sync_timestamp=1598517795415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-4.0.7.tgz", + "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/events/download/events-3.3.0.tgz?cache=0&sync_timestamp=1614445408219&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevents%2Fdownload%2Fevents-3.3.0.tgz", + "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=", + "dev": true + }, + "eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/eventsource/download/eventsource-1.1.0.tgz?cache=0&sync_timestamp=1616041663398&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventsource%2Fdownload%2Feventsource-1.1.0.tgz", + "integrity": "sha1-AOjKfJIQnpSw3fMtrGd9hBAoz68=", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz", + "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz", + "integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/ext/download/ext-1.4.0.tgz", + "integrity": "sha1-ia56BxWPedNVF4gpBDJAd+Q3kkQ=", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.5.0", + "resolved": "https://registry.npm.taobao.org/type/download/type-2.5.0.tgz?cache=0&sync_timestamp=1615215448661&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-2.5.0.tgz", + "integrity": "sha1-Ci54wud5B7JSq+XymMGwHGPw2z0=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz", + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz", + "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.2.5.tgz?cache=0&sync_timestamp=1610876574130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-3.2.5.tgz", + "integrity": "sha1-eTmvKmVt55pPGQGQPuityqfLlmE=", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", + "dev": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz", + "integrity": "sha1-kXKMWllC7O2FMSg8eUQe5BIsNak=", + "dev": true + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npm.taobao.org/fastq/download/fastq-1.11.0.tgz", + "integrity": "sha1-u5+5VaBxMKkY62PB9RYcwypdCFg=", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.3.tgz", + "integrity": "sha1-XA6aiWjokSwoZjn96XeosgnyUI4=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz", + "integrity": "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4=", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz", + "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-6.2.0.tgz?cache=0&sync_timestamp=1603816876316&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-6.2.0.tgz", + "integrity": "sha1-uu98+OGEDfMl5DkLRISHlIDuvk0=", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-3.0.0.tgz", + "integrity": "sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz", + "integrity": "sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90=", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz", + "integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz", + "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597756298124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz", + "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz", + "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz", + "integrity": "sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.14.0", + "resolved": "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.0.tgz", + "integrity": "sha1-9dJg+VxfjBBYlEkf7uXciZO0Av4=", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz", + "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fraction.js": { + "version": "4.0.13", + "resolved": "https://registry.npm.taobao.org/fraction.js/download/fraction.js-4.0.13.tgz", + "integrity": "sha1-PBwxX6FrNchf/6lXJaNvpynGnf4=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/from2/download/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-4.0.2.tgz?cache=0&sync_timestamp=1611075430627&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-4.0.2.tgz", + "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz", + "integrity": "sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz", + "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz?cache=0&sync_timestamp=1618552489864&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.2.tgz?cache=0&sync_timestamp=1603829637456&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgensync%2Fdownload%2Fgensync-1.0.0-beta.2.tgz", + "integrity": "sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz", + "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/get-intrinsic/download/get-intrinsic-1.1.1.tgz", + "integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz?cache=0&sync_timestamp=1618462652134&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz", + "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.2.tgz", + "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.nlark.com/globals/download/globals-11.12.0.tgz", + "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=", + "dev": true + }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-11.0.3.tgz", + "integrity": "sha1-mx8MtSPhcd0a2MeyqftLZEuVk8s=", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz?cache=0&sync_timestamp=1614624861176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-union%2Fdownload%2Farray-union-2.1.0.tgz", + "integrity": "sha1-t5hCCtvrHego2ErNii4j0+/oXo0=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.6.tgz", + "integrity": "sha1-/wQLKwhTsjw9MQJ1I3BvGIXXa+4=", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz", + "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz?cache=0&sync_timestamp=1596084327526&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhar-validator%2Fdownload%2Fhar-validator-5.1.5.tgz", + "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/has-bigints/download/has-bigints-1.0.1.tgz?cache=0&sync_timestamp=1615461282623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-bigints%2Fdownload%2Fhas-bigints-1.0.1.tgz", + "integrity": "sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.2.tgz?cache=0&sync_timestamp=1614443617831&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.2.tgz", + "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.1.0.tgz", + "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz", + "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz", + "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-3.0.8.tgz?cache=0&sync_timestamp=1617826790271&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-3.0.8.tgz", + "integrity": "sha1-bjXUzIevLF+Bbky5zjULqHo/Nw0=", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.4.0.tgz", + "integrity": "sha1-z70bAdKvr5rcobEK59/6uYxx0tw=", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/html-escaper/download/html-escaper-2.0.2.tgz?cache=0&sync_timestamp=1613643553561&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-escaper%2Fdownload%2Fhtml-escaper-2.0.2.tgz", + "integrity": "sha1-39YAJ9o2o238viNiYsAKWCJoFFM=", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/http-cache-semantics/download/http-cache-semantics-4.1.0.tgz", + "integrity": "sha1-SekcXL82yblLz81xwj1SSex045A=", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1593407611415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz", + "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.5.3.tgz?cache=0&sync_timestamp=1609539712326&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-parser-js%2Fdownload%2Fhttp-parser-js-0.5.3.tgz", + "integrity": "sha1-AdJwnHnUFpi7AdTezF6dpOSgM9k=", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.1.tgz", + "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-4.0.1.tgz", + "integrity": "sha1-ioyO9/WTLM+VPClsqCkblap0qjo=", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.nlark.com/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz?cache=0&sync_timestamp=1619386628373&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-0.19.1.tgz", + "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1600868483922&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-2.2.4.tgz", + "integrity": "sha1-TuenN6vZJniik9mzShr00NCMeHs=", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/agent-base/download/agent-base-4.3.0.tgz?cache=0&sync_timestamp=1603479960600&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fagent-base%2Fdownload%2Fagent-base-4.3.0.tgz", + "integrity": "sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4=", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz", + "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "dev": true + } + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/humanize-ms/download/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1594184325364&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-5.1.0.tgz?cache=0&sync_timestamp=1605801312995&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-5.1.0.tgz", + "integrity": "sha1-xr5oWKvQE9do6YNmrkfiXViHsa4=", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.2.1.tgz?cache=0&sync_timestamp=1603838570069&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fieee754%2Fdownload%2Fieee754-1.2.1.tgz", + "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz?cache=0&sync_timestamp=1590809380232&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fignore%2Fdownload%2Fignore-5.1.8.tgz", + "integrity": "sha1-8VCotQo0KJsz4i9YiavU2AFvDlc=", + "dev": true + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.3.tgz", + "integrity": "sha1-AX4kRxhL/q3nwjjkrv3R6PlbHjc=", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npm.taobao.org/immediate/download/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz?cache=0&sync_timestamp=1608469532269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz", + "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597756298124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz?cache=0&sync_timestamp=1597081904643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081785924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz?cache=0&sync_timestamp=1602858957553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-dir%2Fdownload%2Fpkg-dir-3.0.0.tgz", + "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz?cache=0&sync_timestamp=1618679442183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Findent-string%2Fdownload%2Findent-string-4.0.0.tgz", + "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz", + "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "dev": true + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ini/download/ini-2.0.0.tgz?cache=0&sync_timestamp=1607907788001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fini%2Fdownload%2Fini-2.0.0.tgz", + "integrity": "sha1-5f1Vbs3VcmvpePoQAYYurLCpS8U=", + "dev": true + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-7.3.3.tgz", + "integrity": "sha1-BNF2sq8Er8FXqD/XwQDpjuCq0AM=", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995384030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz", + "integrity": "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.nlark.com/rxjs/download/rxjs-6.6.7.tgz", + "integrity": "sha1-kKwBisq/SRv2UEQjXVhjxNq4BMk=", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", + "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", + "dev": true + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz?cache=0&sync_timestamp=1605885960226&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-4.3.0.tgz", + "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz?cache=0&sync_timestamp=1611327032630&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fip-regex%2Fdownload%2Fip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz", + "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.1.0.tgz", + "integrity": "sha1-YjUwMd++4HzrNGVqa95Z7+yujdk=", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-bigint/download/is-bigint-1.0.1.tgz", + "integrity": "sha1-aSMFHfy8dkJ4VAuc4OazITql68I=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz", + "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-boolean-object/download/is-boolean-object-1.1.0.tgz", + "integrity": "sha1-4qqtOjqPyjTCj27uE1sVbtJYf/A=", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.3.tgz?cache=0&sync_timestamp=1612132958731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.3.tgz", + "integrity": "sha1-ix4FALc6HXbHBIdjbzaOUZ3o244=", + "dev": true + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.3.0", + "resolved": "https://registry.nlark.com/is-core-module/download/is-core-module-2.3.0.tgz", + "integrity": "sha1-00FlLjQIvKacRnG3mglUo9NJ+Ic=", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz", + "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/is-docker/download/is-docker-2.2.1.tgz?cache=0&sync_timestamp=1617958767917&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-docker%2Fdownload%2Fis-docker-2.2.1.tgz", + "integrity": "sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao=", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz?cache=0&sync_timestamp=1618552489864&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-interactive/download/is-interactive-1.0.0.tgz", + "integrity": "sha1-zqbmrlyHCnsKAAQHC3tYfgJSkS4=", + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-lambda/download/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.1.tgz?cache=0&sync_timestamp=1607123324574&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-negative-zero%2Fdownload%2Fis-negative-zero-2.0.1.tgz", + "integrity": "sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "dev": true + }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/is-number-object/download/is-number-object-1.0.4.tgz", + "integrity": "sha1-NqyV50HPGLKD/B3fXoPaeY4+wZc=", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz", + "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz?cache=0&sync_timestamp=1599667279942&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.2.tgz", + "integrity": "sha1-gcjr3k2xQvLPHFP8htakV4gmYlE=", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz", + "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/is-string/download/is-string-1.0.5.tgz", + "integrity": "sha1-QEk+0ZjvP/R3uMf5L2ROyCpc06Y=", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz", + "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/is-unicode-supported/download/is-unicode-supported-0.1.0.tgz", + "integrity": "sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc=", + "dev": true + }, + "is-what": { + "version": "3.14.1", + "resolved": "https://registry.npm.taobao.org/is-what/download/is-what-3.14.1.tgz?cache=0&sync_timestamp=1615169709354&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-what%2Fdownload%2Fis-what-3.14.1.tgz", + "integrity": "sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz", + "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.6", + "resolved": "https://registry.npm.taobao.org/isbinaryfile/download/isbinaryfile-4.0.6.tgz", + "integrity": "sha1-7ctisiTitHEIMLZ0mMjk5aTSYQs=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "ismobilejs": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/ismobilejs/download/ismobilejs-1.1.1.tgz", + "integrity": "sha1-xWygro5Sskyg8iul7zIVot27qg4=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha1-9ZRKN8cLVQsCp4pcOyBVsoDOyOw=", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha1-hzxv/4l0UBGCIndGlqPyiQLXfB0=", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha1-dRj+UupE3jcvRgp2tezan/tz2KY=", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha1-dXQ85tlruG3H7kNSz2Nmoj8LGtk=", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-3.0.2.tgz", + "integrity": "sha1-1ZMhDlAAaDdQywn8BkTktuJ/1Ts=", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jasmine": { + "version": "2.8.0", + "resolved": "https://registry.npm.taobao.org/jasmine/download/jasmine-2.8.0.tgz?cache=0&sync_timestamp=1616034862565&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjasmine%2Fdownload%2Fjasmine-2.8.0.tgz", + "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "dev": true, + "requires": { + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.8.0" + }, + "dependencies": { + "jasmine-core": { + "version": "2.8.0", + "resolved": "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + } + } + }, + "jasmine-core": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-3.6.0.tgz", + "integrity": "sha1-SR87sjlBeZw1POt6RbOKlQ68WiA=", + "dev": true + }, + "jasmine-spec-reporter": { + "version": "5.0.2", + "resolved": "https://registry.npm.taobao.org/jasmine-spec-reporter/download/jasmine-spec-reporter-5.0.2.tgz", + "integrity": "sha1-thKIqwdK1EDcJHfE1ChAsOdKa5U=", + "dev": true, + "requires": { + "colors": "1.4.0" + } + }, + "jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/jasminewd2/download/jasminewd2-2.2.0.tgz", + "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npm.taobao.org/jest-worker/download/jest-worker-26.6.2.tgz", + "integrity": "sha1-f3LLxNZDw2Xie5/XdfnQ6qnHqO0=", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.1.tgz?cache=0&sync_timestamp=1618435151523&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.1.tgz", + "integrity": "sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz", + "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz?cache=0&sync_timestamp=1609553758550&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1608000211395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz", + "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.2.0.tgz", + "integrity": "sha1-Lf7+cgxrpSXZ69kJlQ8FFTFsiaM=", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/jsonc-parser/download/jsonc-parser-3.0.0.tgz", + "integrity": "sha1-q914VwHH5+rKip7IzwcMpRp0WiI=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz?cache=0&sync_timestamp=1604161912962&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/jsonparse/download/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/jszip/download/jszip-3.6.0.tgz?cache=0&sync_timestamp=1612940844587&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjszip%2Fdownload%2Fjszip-3.6.0.tgz", + "integrity": "sha1-g5tygS4/l4GcwTrEE0/87ZXdavk=", + "dev": true, + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "karma": { + "version": "6.1.2", + "resolved": "https://registry.npm.taobao.org/karma/download/karma-6.1.2.tgz?cache=0&sync_timestamp=1617062979892&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkarma%2Fdownload%2Fkarma-6.1.2.tgz", + "integrity": "sha1-nXOUVZ9d6xULMCHBhglgKBw6DlA=", + "dev": true, + "requires": { + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.4.2", + "colors": "^1.4.0", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.6", + "graceful-fs": "^4.2.4", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.6", + "lodash": "^4.17.19", + "log4js": "^6.2.1", + "mime": "^2.4.5", + "minimatch": "^3.0.4", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^3.1.0", + "source-map": "^0.6.1", + "tmp": "0.2.1", + "ua-parser-js": "^0.7.23", + "yargs": "^16.1.1" + } + }, + "karma-chrome-launcher": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/karma-chrome-launcher/download/karma-chrome-launcher-3.1.0.tgz", + "integrity": "sha1-gFpYZ5mk0F9OVPcqIEl58/MGZzg=", + "dev": true, + "requires": { + "which": "^1.2.1" + } + }, + "karma-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/karma-coverage/download/karma-coverage-2.0.3.tgz", + "integrity": "sha1-wQ9HEfTPXKqqZosdb2QufaEi2XM=", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.1", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.0", + "minimatch": "^3.0.4" + } + }, + "karma-jasmine": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/karma-jasmine/download/karma-jasmine-4.0.1.tgz", + "integrity": "sha1-uZ4HO22ZpRlvxL/8EhuJMTsKvYI=", + "dev": true, + "requires": { + "jasmine-core": "^3.6.0" + }, + "dependencies": { + "jasmine-core": { + "version": "3.7.1", + "resolved": "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-3.7.1.tgz", + "integrity": "sha1-BAEyf2JJ6smT1Hu/oY1OjvrPtWE=", + "dev": true + } + } + }, + "karma-jasmine-html-reporter": { + "version": "1.5.4", + "resolved": "https://registry.npm.taobao.org/karma-jasmine-html-reporter/download/karma-jasmine-html-reporter-1.5.4.tgz", + "integrity": "sha1-Zp8z1pTYj84bDM/aVxEd5xbLAZI=", + "dev": true + }, + "karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/karma-source-map-support/download/karma-source-map-support-1.4.0.tgz", + "integrity": "sha1-WFJs7M9+hzDlbv/Zek3o1xKsDWs=", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz", + "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz", + "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=", + "dev": true + }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/klona/download/klona-2.0.4.tgz", + "integrity": "sha1-e7Hjr/sMuGJFR+9+j2cI6i4538A=", + "dev": true + }, + "less": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/less/download/less-4.1.1.tgz?cache=0&sync_timestamp=1612066490256&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fless%2Fdownload%2Fless-4.1.1.tgz", + "integrity": "sha1-Fb8lOpk5eR3GkIiMP/Qk8+bH7bo=", + "dev": true, + "requires": { + "copy-anything": "^2.0.1", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^2.5.2", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^1.10.0" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz", + "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1613615500287&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "dev": true, + "optional": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true, + "optional": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", + "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", + "dev": true + } + } + }, + "less-loader": { + "version": "7.3.0", + "resolved": "https://registry.npm.taobao.org/less-loader/download/less-loader-7.3.0.tgz", + "integrity": "sha1-+dbTbRhznWQgZ6Bftb1wyMYTF+U=", + "dev": true, + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-3.0.0.tgz", + "integrity": "sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "license-webpack-plugin": { + "version": "2.3.11", + "resolved": "https://registry.npm.taobao.org/license-webpack-plugin/download/license-webpack-plugin-2.3.11.tgz?cache=0&sync_timestamp=1618110769370&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flicense-webpack-plugin%2Fdownload%2Flicense-webpack-plugin-2.3.11.tgz", + "integrity": "sha1-DZMYijH841CkTIYhK6268z3NKdg=", + "dev": true, + "requires": { + "@types/webpack-sources": "^0.1.5", + "webpack-sources": "^1.2.0" + }, + "dependencies": { + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1603965301737&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/lie/download/lie-3.3.0.tgz", + "integrity": "sha1-3Pgt7lRfRgdNryAMfBxaCOD0D2o=", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1610027880902&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz", + "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=", + "dev": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-2.0.0.tgz", + "integrity": "sha1-5MrOW4FtQloWa18JfhDNErNgZLA=", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz?cache=0&sync_timestamp=1597081904643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-5.0.0.tgz", + "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.21.tgz", + "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npm.taobao.org/lodash.uniq/download/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-4.1.0.tgz?cache=0&sync_timestamp=1618723146520&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-4.1.0.tgz", + "integrity": "sha1-P727lbRoOsn8eFER55LlWNSr1QM=", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995384030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz", + "integrity": "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "log4js": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/log4js/download/log4js-6.3.0.tgz", + "integrity": "sha1-EN+vu0NDUaPjAnegC5h5RG9xW8s=", + "dev": true, + "requires": { + "date-format": "^3.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.1", + "rfdc": "^1.1.4", + "streamroller": "^2.2.4" + } + }, + "loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.1.tgz?cache=0&sync_timestamp=1606312222145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.7.1.tgz", + "integrity": "sha1-AF/eL15uRwaPk1/yhXPhJe9y8Zc=", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz?cache=0&sync_timestamp=1594427519396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-6.0.0.tgz", + "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz", + "integrity": "sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz", + "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npm.taobao.org/make-error/download/make-error-1.3.6.tgz", + "integrity": "sha1-LrLjfqm2fEiR9oShOUeZr0hM96I=", + "dev": true + }, + "make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npm.taobao.org/make-fetch-happen/download/make-fetch-happen-8.0.14.tgz", + "integrity": "sha1-qrpzrgq1WGrY6qaL2DMyZpOT4iI=", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + }, + "dependencies": { + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-5.0.0.tgz", + "integrity": "sha1-4qkFQqu2inYuCghQ9sntrf2FBrI=", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/promise-retry/download/promise-retry-2.0.1.tgz?cache=0&sync_timestamp=1592142510714&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpromise-retry%2Fdownload%2Fpromise-retry-2.0.1.tgz", + "integrity": "sha1-/3R6E2IKtXumiPX8Z4VUEMNw2iI=", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz", + "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.4.tgz?cache=0&sync_timestamp=1619049042656&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.4.tgz", + "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz", + "integrity": "sha1-L93n5gIJOfcJBqaPLXrmheTIxkY=", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz", + "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz", + "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz", + "integrity": "sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz", + "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz", + "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=", + "dev": true + } + } + }, + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-2.5.2.tgz?cache=0&sync_timestamp=1613615500287&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.5.2.tgz", + "integrity": "sha1-bj3GzCuVEGQ4MOXxnVy3U9pe6r4=", + "dev": true + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.47.0.tgz?cache=0&sync_timestamp=1617306118828&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.47.0.tgz", + "integrity": "sha1-jLMT5Zll08Bc+/iYkVomevRqM1w=", + "dev": true + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.30.tgz?cache=0&sync_timestamp=1617340124913&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.30.tgz", + "integrity": "sha1-bnvotMR5gl+F7WMmaV23P5MF1i0=", + "dev": true, + "requires": { + "mime-db": "1.47.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1617823674050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "1.3.5", + "resolved": "https://registry.nlark.com/mini-css-extract-plugin/download/mini-css-extract-plugin-1.3.5.tgz", + "integrity": "sha1-JSFm54h5wQbgEw8inUTgy9/OvtM=", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-3.0.0.tgz", + "integrity": "sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1603965301737&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz", + "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", + "dev": true + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-3.1.3.tgz", + "integrity": "sha1-fUL/HzljVILhX5zbUxhN7r1YFf0=", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/minipass-collect/download/minipass-collect-1.0.2.tgz", + "integrity": "sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.3.3", + "resolved": "https://registry.npm.taobao.org/minipass-fetch/download/minipass-fetch-1.3.3.tgz", + "integrity": "sha1-NMfOoDjIF6hlhGG/NRdFUdzhego=", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/minipass-flush/download/minipass-flush-1.0.5.tgz", + "integrity": "sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/minipass-json-stream/download/minipass-json-stream-1.0.1.tgz", + "integrity": "sha1-ftu5JYj7/C/x2y/BA5est7a0Sqc=", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz?cache=0&sync_timestamp=1595998565446&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass-pipeline%2Fdownload%2Fminipass-pipeline-1.2.4.tgz", + "integrity": "sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/minipass-sized/download/minipass-sized-1.0.3.tgz", + "integrity": "sha1-cO5afFBSBwr6z7wil36nne81O3A=", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/minizlib/download/minizlib-2.1.2.tgz?cache=0&sync_timestamp=1597445445405&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminizlib%2Fdownload%2Fminizlib-2.1.2.tgz", + "integrity": "sha1-6Q00Zrogm5MkUVCKEc49NjIUWTE=", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz", + "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz", + "integrity": "sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY=", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz", + "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz", + "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz", + "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=", + "dev": true + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.2.tgz?cache=0&sync_timestamp=1602591700047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.2.tgz", + "integrity": "sha1-9TdkAGlRaPTMaUrJOT0MlYXu6hk=", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.1.22", + "resolved": "https://registry.npm.taobao.org/nanoid/download/nanoid-3.1.22.tgz", + "integrity": "sha1-s1+Pt9FRmQqK69WqUBXAPPcm+EQ=", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "needle": { + "version": "2.6.0", + "resolved": "https://registry.npm.taobao.org/needle/download/needle-2.6.0.tgz", + "integrity": "sha1-JNu1XyUJ4jJLSpnWH0E5ggE8zb4=", + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz", + "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "dev": true, + "optional": true + } + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz", + "integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz?cache=0&sync_timestamp=1594317437265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fneo-async%2Fdownload%2Fneo-async-2.6.2.tgz", + "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/next-tick/download/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz?cache=0&sync_timestamp=1614510039289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnice-try%2Fdownload%2Fnice-try-1.0.5.tgz", + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=", + "dev": true + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.10.0.tgz?cache=0&sync_timestamp=1599010730714&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-forge%2Fdownload%2Fnode-forge-0.10.0.tgz", + "integrity": "sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M=", + "dev": true + }, + "node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npm.taobao.org/node-gyp/download/node-gyp-7.1.2.tgz", + "integrity": "sha1-IagQrrsYcSAlHDvOyXmvFYexiK4=", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz", + "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz?cache=0&sync_timestamp=1606098189689&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-4.9.2.tgz", + "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.71.tgz?cache=0&sync_timestamp=1614113881684&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.71.tgz", + "integrity": "sha1-yxM0sXmJaxyJ7P3UtyX7e738fbs=", + "dev": true + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/nopt/download/nopt-5.0.0.tgz?cache=0&sync_timestamp=1597649936800&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnopt%2Fdownload%2Fnopt-5.0.0.tgz", + "integrity": "sha1-UwlCu1ilEvzK/lP+IQ8TolNV3Ig=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/normalize-range/download/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1617786295473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz", + "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.nlark.com/npm-bundled/download/npm-bundled-1.1.2.tgz?cache=0&sync_timestamp=1619044650809&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnpm-bundled%2Fdownload%2Fnpm-bundled-1.1.2.tgz", + "integrity": "sha1-lEx4eJvXOQNbcLqiylzDK42GC8E=", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/npm-install-checks/download/npm-install-checks-4.0.0.tgz", + "integrity": "sha1-o3+sx2Oi/eBJfvLG0Kx8P74A17Q=", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/npm-normalize-package-bin/download/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI=", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.0", + "resolved": "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-8.1.0.tgz", + "integrity": "sha1-tfYxlBjDJGocOOGo+6oGIxvFMI8=", + "dev": true, + "requires": { + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "2.1.5", + "resolved": "https://registry.npm.taobao.org/npm-packlist/download/npm-packlist-2.1.5.tgz", + "integrity": "sha1-Q+9bu59Zt8DvkeCQXx3XB7TPszw=", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-6.1.0.tgz", + "integrity": "sha1-K+/th7D86VZ5D2LTKvtW11OcAio=", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.0.0", + "semver": "^7.0.0" + } + }, + "npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.nlark.com/npm-registry-fetch/download/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha1-hvP+tM4AMTvAuPH49p2q5vrOFmE=", + "dev": true, + "requires": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz", + "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz", + "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz", + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.10.2.tgz?cache=0&sync_timestamp=1618720223958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.10.2.tgz", + "integrity": "sha1-tjhaPit8rgter8+Qzd+F0Sh2fzA=", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.5.tgz?cache=0&sync_timestamp=1613857744782&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.5.tgz", + "integrity": "sha1-ud7qpfx/GEag+uzc7sE45XePU6w=", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz", + "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.2.tgz?cache=0&sync_timestamp=1604115183005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.2.tgz", + "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.2.tgz?cache=0&sync_timestamp=1613860232478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.getownpropertydescriptors%2Fdownload%2Fobject.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha1-G9Y66s8NXS0vMbXjk7A6fGAaI/c=", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/object.values/download/object.values-1.1.3.tgz", + "integrity": "sha1-6qix4XWJ8C9pjbCT98Yu4WmXQu4=", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz", + "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz", + "integrity": "sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1617889786861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz", + "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "7.4.0", + "resolved": "https://registry.npm.taobao.org/open/download/open-7.4.0.tgz?cache=0&sync_timestamp=1618549241971&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopen%2Fdownload%2Fopen-7.4.0.tgz", + "integrity": "sha1-rZW5j4cdmssOyP7MVXCCzJmGYms=", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz", + "integrity": "sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w=", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + } + } + }, + "ora": { + "version": "5.3.0", + "resolved": "https://registry.npm.taobao.org/ora/download/ora-5.3.0.tgz", + "integrity": "sha1-+4MomdOhNy/nHIssU0u/50lhu28=", + "dev": true, + "requires": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995384030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz", + "integrity": "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz", + "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1606288333421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz", + "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1597081785924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz", + "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.nlark.com/p-map/download/p-map-4.0.0.tgz", + "integrity": "sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs=", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.nlark.com/p-retry/download/p-retry-3.0.1.tgz", + "integrity": "sha1-MWtMiJPiyNwc+okfQGxLQivr8yg=", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", + "dev": true + }, + "pacote": { + "version": "11.2.4", + "resolved": "https://registry.nlark.com/pacote/download/pacote-11.2.4.tgz", + "integrity": "sha1-3HynQKVz7Yajv4Y1EdIsHUE+yC8=", + "dev": true, + "requires": { + "@npmcli/git": "^2.0.1", + "@npmcli/installed-package-contents": "^1.0.5", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.3.0", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^9.0.0", + "promise-retry": "^1.1.1", + "read-package-json-fast": "^1.1.3", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.1.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz", + "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", + "dev": true + } + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1610208924218&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz", + "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz", + "integrity": "sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw=", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", + "dev": true + } + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.6.tgz", + "integrity": "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ=", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1610966676829&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/parse-node-version/download/parse-node-version-1.0.1.tgz", + "integrity": "sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs=", + "dev": true + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-6.0.1.tgz", + "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=", + "dev": true + }, + "parse5-html-rewriting-stream": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/parse5-html-rewriting-stream/download/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha1-3hggVZMXq05FHqctugX939kUSAs=", + "dev": true, + "requires": { + "parse5": "^6.0.1", + "parse5-sax-parser": "^6.0.1" + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY=", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, + "parse5-sax-parser": { + "version": "6.0.1", + "resolved": "https://registry.npm.taobao.org/parse5-sax-parser/download/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha1-mLTTZrWyZqfNkLS1iQZmeviC2ro=", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz", + "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz", + "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz?cache=0&sync_timestamp=1611752015315&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-type%2Fdownload%2Fpath-type-4.0.0.tgz", + "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.2.tgz", + "integrity": "sha1-3YIqoIh1gOUvGgOdw+2hCO+uMHU=", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "penner": { + "version": "0.1.3", + "resolved": "https://registry.npm.taobao.org/penner/download/penner-0.1.3.tgz", + "integrity": "sha1-C4tILU6bOa8vPXw3WSIpuKzClwU=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.3.tgz?cache=0&sync_timestamp=1618049925917&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpicomatch%2Fdownload%2Fpicomatch-2.2.3.tgz", + "integrity": "sha1-RlVH81nMwgbTxI5Goby4m/fuYZ0=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pixi-viewport": { + "version": "4.32.0", + "resolved": "https://registry.nlark.com/pixi-viewport/download/pixi-viewport-4.32.0.tgz", + "integrity": "sha1-87AAEF7DqWm2ghooK2sdtl4A8EU=", + "requires": { + "penner": "^0.1.3" + } + }, + "pixi.js": { + "version": "6.1.1", + "resolved": "https://registry.nlark.com/pixi.js/download/pixi.js-6.1.1.tgz", + "integrity": "sha1-KLx2h4IcIh6PVDrom8iQ59KU0CM=", + "requires": { + "@pixi/accessibility": "6.1.1", + "@pixi/app": "6.1.1", + "@pixi/compressed-textures": "6.1.1", + "@pixi/constants": "6.1.1", + "@pixi/core": "6.1.1", + "@pixi/display": "6.1.1", + "@pixi/extract": "6.1.1", + "@pixi/filter-alpha": "6.1.1", + "@pixi/filter-blur": "6.1.1", + "@pixi/filter-color-matrix": "6.1.1", + "@pixi/filter-displacement": "6.1.1", + "@pixi/filter-fxaa": "6.1.1", + "@pixi/filter-noise": "6.1.1", + "@pixi/graphics": "6.1.1", + "@pixi/interaction": "6.1.1", + "@pixi/loaders": "6.1.1", + "@pixi/math": "6.1.1", + "@pixi/mesh": "6.1.1", + "@pixi/mesh-extras": "6.1.1", + "@pixi/mixin-cache-as-bitmap": "6.1.1", + "@pixi/mixin-get-child-by-name": "6.1.1", + "@pixi/mixin-get-global-position": "6.1.1", + "@pixi/particle-container": "6.1.1", + "@pixi/polyfill": "6.1.1", + "@pixi/prepare": "6.1.1", + "@pixi/runner": "6.1.1", + "@pixi/settings": "6.1.1", + "@pixi/sprite": "6.1.1", + "@pixi/sprite-animated": "6.1.1", + "@pixi/sprite-tiling": "6.1.1", + "@pixi/spritesheet": "6.1.1", + "@pixi/text": "6.1.1", + "@pixi/text-bitmap": "6.1.1", + "@pixi/ticker": "6.1.1", + "@pixi/utils": "6.1.1" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1602858957553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz", + "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npm.taobao.org/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpnp-webpack-plugin%2Fdownload%2Fpnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha1-yXEaxNxIpoXauvyG+Lbdn434QUk=", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "point-in-polygon": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/point-in-polygon/download/point-in-polygon-1.1.0.tgz", + "integrity": "sha1-sK8mFsAb3uNBy/KJTfZDOHygM1c=" + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz?cache=0&sync_timestamp=1596018172434&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fportfinder%2Fdownload%2Fportfinder-1.0.28.tgz", + "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz", + "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "8.2.4", + "resolved": "https://registry.nlark.com/postcss/download/postcss-8.2.4.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-8.2.4.tgz", + "integrity": "sha1-IKmKOc8wPRUSnChlqew37aADHQQ=", + "dev": true, + "requires": { + "colorette": "^1.2.1", + "nanoid": "^3.1.20", + "source-map": "^0.6.1" + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.5.tgz?cache=0&sync_timestamp=1609689118344&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-7.0.5.tgz", + "integrity": "sha1-+KbpnxLmGcLrwjz2xIb9wVhgkz4=", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.3.tgz?cache=0&sync_timestamp=1618056303067&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-colormin%2Fdownload%2Fpostcss-colormin-4.0.3.tgz", + "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz?cache=0&sync_timestamp=1618056302291&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-convert-values%2Fdownload%2Fpostcss-convert-values-4.0.1.tgz", + "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz?cache=0&sync_timestamp=1618056302844&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-comments%2Fdownload%2Fpostcss-discard-comments-4.0.2.tgz", + "integrity": "sha1-H7q9LCRr/2qq15l7KwkY9NevQDM=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.nlark.com/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz?cache=0&sync_timestamp=1618056303643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-empty%2Fdownload%2Fpostcss-discard-empty-4.0.1.tgz", + "integrity": "sha1-yMlR6fc+2UKAGUWERKAq2Qu592U=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz?cache=0&sync_timestamp=1618056508784&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-overridden%2Fdownload%2Fpostcss-discard-overridden-4.0.1.tgz", + "integrity": "sha1-ZSrvipZybwKfXj4AFG7npOdV/1c=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-import": { + "version": "14.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-import/download/postcss-import-14.0.0.tgz", + "integrity": "sha1-PtHa2sWhZlC94/TN6mYzucPHgpY=", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-loader": { + "version": "4.2.0", + "resolved": "https://registry.npm.taobao.org/postcss-loader/download/postcss-loader-4.2.0.tgz", + "integrity": "sha1-9pk+o+D0ZgD7PuSbvQEESBI6fbQ=", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-7.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-7.0.0.tgz", + "integrity": "sha1-75tE13OVnK5j3ezRIt4jhTtg+NM=", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.3.0.tgz?cache=0&sync_timestamp=1608469532269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.3.0.tgz", + "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-5.2.0.tgz?cache=0&sync_timestamp=1610966676829&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-5.2.0.tgz", + "integrity": "sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", + "dev": true + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-3.0.0.tgz", + "integrity": "sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz?cache=0&sync_timestamp=1618056314601&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-longhand%2Fdownload%2Fpostcss-merge-longhand-4.0.11.tgz", + "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz?cache=0&sync_timestamp=1618056312725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-rules%2Fdownload%2Fpostcss-merge-rules-4.0.3.tgz", + "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz?cache=0&sync_timestamp=1618056613147&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-font-values%2Fdownload%2Fpostcss-minify-font-values-4.0.2.tgz", + "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz?cache=0&sync_timestamp=1618056313372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-params%2Fdownload%2Fpostcss-minify-params-4.0.2.tgz", + "integrity": "sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz?cache=0&sync_timestamp=1618056509958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-selectors%2Fdownload%2Fpostcss-minify-selectors-4.0.2.tgz", + "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha1-zaHwR8CugMl9vijD52pDuIAldB0=", + "dev": true + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha1-67tU+uFZjuz99pGgKz/zs5ClpRw=", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha1-nvMVFFbTu/oSDKRImN/Kby+gHwY=", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-4.0.0.tgz?cache=0&sync_timestamp=1602586215124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-values%2Fdownload%2Fpostcss-modules-values-4.0.0.tgz", + "integrity": "sha1-18Xn5ow7s8myfL9Iyguz/7RgLJw=", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz?cache=0&sync_timestamp=1618056311007&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-charset%2Fdownload%2Fpostcss-normalize-charset-4.0.1.tgz", + "integrity": "sha1-izWt067oOhNrBHHg1ZvlilAoXdQ=", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz?cache=0&sync_timestamp=1618056614219&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-display-values%2Fdownload%2Fpostcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha1-Db4EpM6QY9RmftK+R2u4MMglk1o=", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.nlark.com/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz?cache=0&sync_timestamp=1618056314160&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-repeat-style%2Fdownload%2Fpostcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz?cache=0&sync_timestamp=1618056308191&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-string%2Fdownload%2Fpostcss-normalize-string-4.0.2.tgz", + "integrity": "sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw=", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.nlark.com/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha1-jgCcoqOUnNr4rSPmtquZy159KNk=", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.nlark.com/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.nlark.com/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE=", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz?cache=0&sync_timestamp=1618056611686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-whitespace%2Fdownload%2Fpostcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI=", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz?cache=0&sync_timestamp=1618056313133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-ordered-values%2Fdownload%2Fpostcss-ordered-values-4.1.2.tgz", + "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz?cache=0&sync_timestamp=1618056309143&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-initial%2Fdownload%2Fpostcss-reduce-initial-4.0.3.tgz", + "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz?cache=0&sync_timestamp=1618056613869&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-transforms%2Fdownload%2Fpostcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "6.0.5", + "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.5.tgz", + "integrity": "sha1-BC104Tfbg+bylHEglstBP1qmEsQ=", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-4.0.3.tgz?cache=0&sync_timestamp=1618056310155&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-svgo%2Fdownload%2Fpostcss-svgo-4.0.3.tgz", + "integrity": "sha1-NDos26yVBdQWJD1Jb3JPOIlMlB4=", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz", + "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz?cache=0&sync_timestamp=1618056512038&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-unique-selectors%2Fdownload%2Fpostcss-unique-selectors-4.0.1.tgz", + "integrity": "sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz", + "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npm.taobao.org/pretty-bytes/download/pretty-bytes-5.6.0.tgz?cache=0&sync_timestamp=1613916423464&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpretty-bytes%2Fdownload%2Fpretty-bytes-5.6.0.tgz", + "integrity": "sha1-NWJW9kOAR3PIL2RyP+eMksYr6us=", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", + "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-polyfill": { + "version": "8.2.0", + "resolved": "https://registry.npm.taobao.org/promise-polyfill/download/promise-polyfill-8.2.0.tgz", + "integrity": "sha1-NnOUcm2nVhRXq6ITPJzu+9YmfaA=" + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/promise-retry/download/promise-retry-1.1.1.tgz?cache=0&sync_timestamp=1592142510714&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpromise-retry%2Fdownload%2Fpromise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/err-code/download/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npm.taobao.org/retry/download/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + } + } + }, + "protractor": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/protractor/download/protractor-7.0.0.tgz", + "integrity": "sha1-w+JjYIvXLiwtyAKxGncnEaR5LQM=", + "dev": true, + "requires": { + "@types/q": "^0.0.32", + "@types/selenium-webdriver": "^3.0.0", + "blocking-proxy": "^1.0.0", + "browserstack": "^1.5.1", + "chalk": "^1.1.3", + "glob": "^7.0.3", + "jasmine": "2.8.0", + "jasminewd2": "^2.1.0", + "q": "1.4.1", + "saucelabs": "^1.5.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "~0.4.0", + "webdriver-js-extender": "2.1.0", + "webdriver-manager": "^12.1.7", + "yargs": "^15.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.nlark.com/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1618995384030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz?cache=0&sync_timestamp=1618558151426&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-ansi%2Fdownload%2Fhas-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-6.0.0.tgz", + "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", + "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npm.taobao.org/ini/download/ini-1.3.8.tgz?cache=0&sync_timestamp=1607907788001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fini%2Fdownload%2Fini-1.3.8.tgz", + "integrity": "sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw=", + "dev": true + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npm.taobao.org/q/download/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz", + "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "webdriver-manager": { + "version": "12.1.8", + "resolved": "https://registry.npm.taobao.org/webdriver-manager/download/webdriver-manager-12.1.8.tgz", + "integrity": "sha1-XnDnPqr1Ogdn1XRScK3a+8WQX9Q=", + "dev": true, + "requires": { + "adm-zip": "^0.4.9", + "chalk": "^1.1.1", + "del": "^2.2.0", + "glob": "^7.0.3", + "ini": "^1.3.4", + "minimist": "^1.2.0", + "q": "^1.4.1", + "request": "^2.87.0", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz?cache=0&sync_timestamp=1618558913931&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-6.2.0.tgz", + "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", + "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.nlark.com/yargs/download/yargs-15.4.1.tgz?cache=0&sync_timestamp=1619404265836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-15.4.1.tgz", + "integrity": "sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz", + "integrity": "sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz", + "integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz", + "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz", + "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz", + "integrity": "sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz", + "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz", + "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/qjobs/download/qjobs-1.2.0.tgz", + "integrity": "sha1-xF6cYYAL0IfviNfiVkI73Unl0HE=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", + "integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz?cache=0&sync_timestamp=1613399913000&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquerystring%2Fdownload%2Fquerystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.2.0.tgz", + "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/queue-microtask/download/queue-microtask-1.2.3.tgz?cache=0&sync_timestamp=1616391583732&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqueue-microtask%2Fdownload%2Fqueue-microtask-1.2.3.tgz", + "integrity": "sha1-SSkii7xyTfrEPg77BYyve2z7YkM=", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz", + "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz", + "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz", + "integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/raw-loader/download/raw-loader-4.0.2.tgz?cache=0&sync_timestamp=1604056003687&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fraw-loader%2Fdownload%2Fraw-loader-4.0.2.tgz", + "integrity": "sha1-GqxrfRrRUB5m79rBUixz5ZpYTrY=", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-3.0.0.tgz", + "integrity": "sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/read-cache/download/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "read-package-json-fast": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/read-package-json-fast/download/read-package-json-fast-1.2.2.tgz", + "integrity": "sha1-+6d7Cw1msas0TiFMsIdld+dJxCM=", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz", + "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", + "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.5.0.tgz", + "integrity": "sha1-m6dMAZsV02UnjS6Ru4xI17TULJ4=", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npm.taobao.org/reflect-metadata/download/reflect-metadata-0.1.13.tgz", + "integrity": "sha1-Z648pXyXKiqhZCsQ/jY/4y1J3Ag=", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.2.tgz", + "integrity": "sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo=", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz", + "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U=", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.5.tgz", + "integrity": "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npm.taobao.org/regex-parser/download/regex-parser-2.2.11.tgz", + "integrity": "sha1-OzfskEnhlHmAboeMq+fByoPM/lg=", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.1.tgz?cache=0&sync_timestamp=1610725711521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexp.prototype.flags%2Fdownload%2Fregexp.prototype.flags-1.3.1.tgz", + "integrity": "sha1-fvNSro0VnnWMDq3Kb4/LTu8HviY=", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.1.tgz", + "integrity": "sha1-LepamgcjMpj78NuR+pq8TG4PitY=", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz?cache=0&sync_timestamp=1590335980151&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregjsgen%2Fdownload%2Fregjsgen-0.5.2.tgz", + "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=", + "dev": true + }, + "regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.9.tgz", + "integrity": "sha1-tInu98mizkNydicBFCnPgzpxg+Y=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.4.tgz?cache=0&sync_timestamp=1617837642601&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frepeat-element%2Fdownload%2Frepeat-element-1.1.4.tgz", + "integrity": "sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz", + "integrity": "sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM=", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz", + "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz", + "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz", + "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resolve-url-loader": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/resolve-url-loader/download/resolve-url-loader-3.1.2.tgz", + "integrity": "sha1-I14sKOIuPkMrp6XU4wXFmljt/Ag=", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "3.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.2.3.tgz", + "integrity": "sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc=", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.21", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.21.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.21.tgz", + "integrity": "sha1-BrsHgkwZwgIcXQVtWxDDW5iffhc=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz", + "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz?cache=0&sync_timestamp=1613002712228&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fret%2Fdownload%2Fret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz", + "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=", + "dev": true + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/rework/download/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npm.taobao.org/css/download/css-2.2.4.tgz", + "integrity": "sha1-xkZ1XHOXHyu6amAeLPL9cbEpiSk=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz", + "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/rework-visit/download/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/rfdc/download/rfdc-1.3.0.tgz", + "integrity": "sha1-0LfEQasnINBdxM8m4ByJYx2doIs=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz", + "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz", + "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rollup": { + "version": "2.38.4", + "resolved": "https://registry.npm.taobao.org/rollup/download/rollup-2.38.4.tgz?cache=0&sync_timestamp=1618289798736&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frollup%2Fdownload%2Frollup-2.38.4.tgz", + "integrity": "sha1-G4TqhyjHOxoApqbpxjDsjD/kjOo=", + "dev": true, + "requires": { + "fsevents": "~2.3.1" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz", + "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.2.0.tgz?cache=0&sync_timestamp=1612925912322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-parallel%2Fdownload%2Frun-parallel-1.2.0.tgz", + "integrity": "sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4=", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.nlark.com/rxjs/download/rxjs-6.6.7.tgz", + "integrity": "sha1-kKwBisq/SRv2UEQjXVhjxNq4BMk=", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", + "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=" + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", + "dev": true + }, + "sass": { + "version": "1.32.6", + "resolved": "https://registry.nlark.com/sass/download/sass-1.32.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsass%2Fdownload%2Fsass-1.32.6.tgz", + "integrity": "sha1-42RsgyXNl/91qKFSJgB/PM0iE5M=", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "10.1.1", + "resolved": "https://registry.npm.taobao.org/sass-loader/download/sass-loader-10.1.1.tgz", + "integrity": "sha1-Td1aPXY455SQZd1unHwEA39+Zj0=", + "dev": true, + "requires": { + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "semver": "^7.3.2" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-3.0.0.tgz", + "integrity": "sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/saucelabs/download/saucelabs-1.5.0.tgz?cache=0&sync_timestamp=1618314383298&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsaucelabs%2Fdownload%2Fsaucelabs-1.5.0.tgz", + "integrity": "sha1-lAWnPDYNRJsjKDmRmobDltN5/Z0=", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz?cache=0&sync_timestamp=1589682064084&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsax%2Fdownload%2Fsax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.7.1.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-2.7.1.tgz", + "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/selenium-webdriver/download/selenium-webdriver-3.6.0.tgz", + "integrity": "sha1-K6h6FmLAILiYjJga5iyyoBKY6vw=", + "dev": true, + "requires": { + "jszip": "^3.1.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + } + } + }, + "selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.8.tgz?cache=0&sync_timestamp=1600186082996&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.8.tgz", + "integrity": "sha1-DRcgi30Swz+OrIXEGDXyf8PYGjA=", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz", + "integrity": "sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/semver-dsl/download/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "requires": { + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "semver-intersect": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/semver-intersect/download/semver-intersect-1.4.0.tgz", + "integrity": "sha1-vdnAa+3N0v7bjNNSw8Q+6MYTIfM=", + "dev": true, + "requires": { + "semver": "^5.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz", + "integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1613615500287&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz", + "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-5.0.1.tgz?cache=0&sync_timestamp=1599740666792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-5.0.1.tgz", + "integrity": "sha1-eIbshIBJpGJGepfT2Rjrsqr5NPQ=", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1593407611415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz", + "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz", + "integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz", + "integrity": "sha1-oY1AUw5vB95CKMfe/kInr4ytAFs=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz", + "integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz", + "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/shallow-clone/download/shallow-clone-3.0.1.tgz", + "integrity": "sha1-jymBrZJTH1UDWwH7IwdppA4C76M=", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz?cache=0&sync_timestamp=1596697357985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshebang-regex%2Fdownload%2Fshebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz", + "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz", + "integrity": "sha1-RXSirlb3qyBolvtDHq7tBm/fjwM=", + "dev": true + } + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz", + "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=", + "dev": true + }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/smart-buffer/download/smart-buffer-4.1.0.tgz", + "integrity": "sha1-kWBcJdkWUvRmHqacz0XxszHKIbo=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz", + "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "3.1.2", + "resolved": "https://registry.npm.taobao.org/socket.io/download/socket.io-3.1.2.tgz?cache=0&sync_timestamp=1617235913811&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io%2Fdownload%2Fsocket.io-3.1.2.tgz", + "integrity": "sha1-BuJ8qhxPyWF1R6z7tdqbwXR9o5o=", + "dev": true, + "requires": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~4.1.0", + "socket.io-adapter": "~2.1.0", + "socket.io-parser": "~4.0.3" + } + }, + "socket.io-adapter": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/socket.io-adapter/download/socket.io-adapter-2.1.0.tgz?cache=0&sync_timestamp=1614388357720&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-adapter%2Fdownload%2Fsocket.io-adapter-2.1.0.tgz", + "integrity": "sha1-7cXcNmAvKYWRjWMcE5khXpehtSc=", + "dev": true + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npm.taobao.org/socket.io-parser/download/socket.io-parser-4.0.4.tgz?cache=0&sync_timestamp=1610669804300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-parser%2Fdownload%2Fsocket.io-parser-4.0.4.tgz", + "integrity": "sha1-nqIbDWFQjRgZbvBKLGuatjD0wrA=", + "dev": true, + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, + "sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.21.tgz", + "integrity": "sha1-s0/7mOeWkwtgoM+hGQTWozmn1Bc=", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "sockjs-client": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.5.1.tgz?cache=0&sync_timestamp=1616686625852&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.5.1.tgz", + "integrity": "sha1-JWkI9tWt+5Tau9vQLGY2LMoPnqY=", + "dev": true, + "requires": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz", + "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433856030&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "dev": true + } + } + }, + "socks": { + "version": "2.6.1", + "resolved": "https://registry.npm.taobao.org/socks/download/socks-2.6.1.tgz", + "integrity": "sha1-mJ5lNKB88zfesbHJSqpEKWUg0w4=", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-5.0.0.tgz", + "integrity": "sha1-fA82Tnsc9KekN+cSU77XLpAEvmA=", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4", + "socks": "^2.3.3" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz", + "integrity": "sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "dev": true + }, + "source-map-loader": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/source-map-loader/download/source-map-loader-1.1.3.tgz", + "integrity": "sha1-fbwv5+oJ0+Q8Uf2fxHi38BbB+CA=", + "dev": true, + "requires": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.2", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.6.1", + "whatwg-mimetype": "^2.3.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.6.2.tgz?cache=0&sync_timestamp=1594184325364&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.6.2.tgz", + "integrity": "sha1-zhPRh1sMOmdL1qBLf3awGxtt7QE=", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-3.0.0.tgz", + "integrity": "sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.6.0.tgz", + "integrity": "sha1-PZ34fiNrU/FtAeWBUPx3EROOXtI=", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz", + "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.1.tgz?cache=0&sync_timestamp=1612211015749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-url%2Fdownload%2Fsource-map-url-0.4.1.tgz", + "integrity": "sha1-CvZmBadFpaL5HPG7+KevvCg97FY=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz", + "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz", + "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz", + "integrity": "sha1-ANSGOmQArXXfkzYaFghgXl3NzzE=", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz", + "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "speed-measure-webpack-plugin": { + "version": "1.4.2", + "resolved": "https://registry.npm.taobao.org/speed-measure-webpack-plugin/download/speed-measure-webpack-plugin-1.4.2.tgz?cache=0&sync_timestamp=1616943640455&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspeed-measure-webpack-plugin%2Fdownload%2Fspeed-measure-webpack-plugin-1.4.2.tgz", + "integrity": "sha1-FgjmLTvbRfAYEAEOG1v+3v7fpY8=", + "dev": true, + "requires": { + "chalk": "^4.1.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995384030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz", + "integrity": "sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.1.2.tgz", + "integrity": "sha1-2hdlJiv4wPVxdJ8q1sJjACB65nM=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz", + "integrity": "sha1-+2YcC+8ps520B2nuOfpwCT1vaHc=", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826725566&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz", + "integrity": "sha1-Y45OQ54v+9LNKJd21cpFfE9Roq8=", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz", + "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1609654060878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz", + "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz", + "integrity": "sha1-6+J6DDibBPvMIzZClS4Qcxr6m64=", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz", + "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz", + "integrity": "sha1-1wiCgVWasneEJCebCHfaPDktWj0=", + "dev": true + }, + "streamroller": { + "version": "2.2.4", + "resolved": "https://registry.npm.taobao.org/streamroller/download/streamroller-2.2.4.tgz", + "integrity": "sha1-wZjO1C25QIamGTYIGHzoCl8rDlM=", + "dev": true, + "requires": { + "date-format": "^2.1.0", + "debug": "^4.1.1", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "date-format": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/date-format/download/date-format-2.1.0.tgz", + "integrity": "sha1-MdW16iEc9f12TNOLr50DPffhJc8=", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz?cache=0&sync_timestamp=1611075430627&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz", + "integrity": "sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA=", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz", + "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&sync_timestamp=1618552489864&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", + "dev": true + } + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha1-51rpDClCxjUEaGwYsoe0oLGkX4A=", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.4.tgz?cache=0&sync_timestamp=1614127357785&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.4.tgz", + "integrity": "sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0=", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.3.0.tgz", + "integrity": "sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz", + "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", + "dev": true + } + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/style-loader/download/style-loader-2.0.0.tgz", + "integrity": "sha1-lmlgL9RpB0DqrsE3eZoDrdu8OTw=", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-3.0.0.tgz", + "integrity": "sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/stylehacks/download/stylehacks-4.0.3.tgz?cache=0&sync_timestamp=1618056315496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylehacks%2Fdownload%2Fstylehacks-4.0.3.tgz", + "integrity": "sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz", + "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "stylus": { + "version": "0.54.8", + "resolved": "https://registry.npm.taobao.org/stylus/download/stylus-0.54.8.tgz?cache=0&sync_timestamp=1594899882272&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylus%2Fdownload%2Fstylus-0.54.8.tgz", + "integrity": "sha1-PaPmWWa8Vnp7BEv+DuzmU+CZ0Uc=", + "dev": true, + "requires": { + "css-parse": "~2.0.0", + "debug": "~3.1.0", + "glob": "^7.1.6", + "mkdirp": "~1.0.4", + "safer-buffer": "^2.1.2", + "sax": "~1.2.4", + "semver": "^6.3.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&sync_timestamp=1607566551397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz", + "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz", + "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "dev": true + } + } + }, + "stylus-loader": { + "version": "4.3.3", + "resolved": "https://registry.npm.taobao.org/stylus-loader/download/stylus-loader-4.3.3.tgz", + "integrity": "sha1-OBu2NBJyrFC839C4d3B+rJm2t1c=", + "dev": true, + "requires": { + "fast-glob": "^3.2.4", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-3.0.0.tgz", + "integrity": "sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/svgo/download/svgo-1.3.2.tgz", + "integrity": "sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc=", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "symbol-observable": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-3.0.0.tgz?cache=0&sync_timestamp=1618452041830&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsymbol-observable%2Fdownload%2Fsymbol-observable-3.0.0.tgz", + "integrity": "sha1-7qj2R4xlEBjgWQRCaDdcQIwVxTM=", + "dev": true + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-2.2.0.tgz?cache=0&sync_timestamp=1607088824436&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-2.2.0.tgz", + "integrity": "sha1-XDc9KB2cZyhIIT0OA30cQWWrQms=", + "dev": true + }, + "tar": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/tar/download/tar-6.1.0.tgz?cache=0&sync_timestamp=1610045923587&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftar%2Fdownload%2Ftar-6.1.0.tgz", + "integrity": "sha1-0XJOm8wEuXexjVxXOzM6IgcimoM=", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz", + "integrity": "sha1-PrXtYmInVteaXw4qIh3+utdcL34=", + "dev": true + } + } + }, + "terser": { + "version": "5.5.1", + "resolved": "https://registry.nlark.com/terser/download/terser-5.5.1.tgz", + "integrity": "sha1-VAyqJROdb0lv3qBW5BQoSIb7Iok=", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz", + "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha1-KNrvSoO9F8HbApcHCtwH/Iz8apo=", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-3.1.0.tgz?cache=0&sync_timestamp=1606288333421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-3.1.0.tgz", + "integrity": "sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-3.0.0.tgz", + "integrity": "sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8=", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1603965301737&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "three": { + "version": "0.77.0", + "resolved": "https://registry.nlark.com/three/download/three-0.77.0.tgz", + "integrity": "sha1-iwsbAAR2ic6qAg1IClYspg2H/zc=" + }, + "three.js": { + "version": "0.77.1", + "resolved": "https://registry.npm.taobao.org/three.js/download/three.js-0.77.1.tgz", + "integrity": "sha1-B4WKh0nktiejEIMlKi2Yd3bMoyo=", + "requires": { + "three": "0.77.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz?cache=0&sync_timestamp=1593478647766&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrough2%2Fdownload%2Fthrough2-2.0.5.tgz", + "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz", + "integrity": "sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.12.tgz?cache=0&sync_timestamp=1603793718173&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftimers-browserify%2Fdownload%2Ftimers-browserify-2.0.12.tgz", + "integrity": "sha1-RKRcEfv0B/NPl7zNFXfGUjYbAO4=", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.2.1.tgz", + "integrity": "sha1-hFf8MDfc9HGcJRNnoa9lAO4czxQ=", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npm.taobao.org/to-object-path/download/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz", + "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npm.taobao.org/tough-cookie/download/tough-cookie-2.5.0.tgz", + "integrity": "sha1-zZ+yoKodWhK0c72fuW+j3P9lreI=", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/tree-kill/download/tree-kill-1.2.2.tgz", + "integrity": "sha1-TKCakJLIi3OnzcXooBtQeweQoMw=", + "dev": true + }, + "ts-node": { + "version": "8.3.0", + "resolved": "https://registry.npm.taobao.org/ts-node/download/ts-node-8.3.0.tgz?cache=0&sync_timestamp=1607350741862&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fts-node%2Fdownload%2Fts-node-8.3.0.tgz", + "integrity": "sha1-5AWWGEETcZJKH7XzsSWRXzJO+1c=", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^3.0.0" + } + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/ts-pnp/download/ts-pnp-1.2.0.tgz", + "integrity": "sha1-pQCtCEsHmPHDBxrzkeZZEshrypI=", + "dev": true + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.2.0.tgz", + "integrity": "sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w=" + }, + "tslint": { + "version": "6.1.3", + "resolved": "https://registry.npm.taobao.org/tslint/download/tslint-6.1.3.tgz", + "integrity": "sha1-XCOy7MwySH1VI706Rw6aoxeJ2QQ=", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.13.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", + "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", + "dev": true + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npm.taobao.org/tsutils/download/tsutils-2.29.0.tgz?cache=0&sync_timestamp=1615138114650&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-2.29.0.tgz", + "integrity": "sha1-MrSIUBRnrL7dS4VJhnOggSrKC5k=", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz", + "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", + "dev": true + } + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/type/download/type-1.2.0.tgz?cache=0&sync_timestamp=1615215448661&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-1.2.0.tgz", + "integrity": "sha1-hI3XaY2vo+VKbEeedZxLw/GIR6A=", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.21.3.tgz?cache=0&sync_timestamp=1618335162053&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.21.3.tgz", + "integrity": "sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc=", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz", + "integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz?cache=0&sync_timestamp=1596697411295&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypedarray%2Fdownload%2Ftypedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "4.1.5", + "resolved": "https://registry.nlark.com/typescript/download/typescript-4.1.5.tgz", + "integrity": "sha1-Ejo7IUqv874ykm8Njx9ucE64mnI=", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npm.taobao.org/ua-parser-js/download/ua-parser-js-0.7.28.tgz", + "integrity": "sha1-i6BOZT81ziECOcZGYWhb+RId7DE=", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/unbox-primitive/download/unbox-primitive-1.0.1.tgz?cache=0&sync_timestamp=1616706427948&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funbox-primitive%2Fdownload%2Funbox-primitive-1.0.1.tgz", + "integrity": "sha1-CF4hViXsMWJXTciFmr7nilmxRHE=", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE=", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ=", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz", + "integrity": "sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz", + "integrity": "sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA=", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz", + "integrity": "sha1-uqvOkQg/xk6UWw861hPiZPfNTmw=", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universal-analytics": { + "version": "0.4.23", + "resolved": "https://registry.npm.taobao.org/universal-analytics/download/universal-analytics-0.4.23.tgz", + "integrity": "sha1-2RXmdoUMJcQVZ2JHG9188uqsqKw=", + "dev": true, + "requires": { + "debug": "^4.1.1", + "request": "^2.88.2", + "uuid": "^3.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1603179970052&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz?cache=0&sync_timestamp=1616088640915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funset-value%2Fdownload%2Funset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz?cache=0&sync_timestamp=1604768535464&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz", + "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237756396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz", + "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npm.taobao.org/url-parse/download/url-parse-1.5.1.tgz?cache=0&sync_timestamp=1613659698159&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furl-parse%2Fdownload%2Furl-parse-1.5.1.tgz", + "integrity": "sha1-1fqYkK+KXh8nSiyYN2UQ9kJfbjs=", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz?cache=0&sync_timestamp=1596697422093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.11.1.tgz", + "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.1.tgz?cache=0&sync_timestamp=1610159885628&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.1.tgz", + "integrity": "sha1-a693dLgO6w91INi4HQeYKlmruu4=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1607460077975&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz", + "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", + "dev": true + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/validate-npm-package-name/download/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz?cache=0&sync_timestamp=1615203397897&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvendors%2Fdownload%2Fvendors-1.0.4.tgz", + "integrity": "sha1-4rgApT56Kbk1BsPPQRANFsTErY4=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz", + "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=", + "dev": true + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.5.tgz?cache=0&sync_timestamp=1612715955072&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.5.tgz", + "integrity": "sha1-EmfmxV4Lm1vkTCAjrtVDeiwmxFM=", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.1.tgz?cache=0&sync_timestamp=1604989128919&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack-chokidar2%2Fdownload%2Fwatchpack-chokidar2-2.0.1.tgz", + "integrity": "sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc=", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1610299640881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1610719380575&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz", + "integrity": "sha1-wdjRSTFtPqhShIiVy2oL/oh7h98=", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webdriver-js-extender": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/webdriver-js-extender/download/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha1-V9epPADbTMjVVuTT20tdsKgMO7c=", + "dev": true, + "requires": { + "@types/selenium-webdriver": "^3.0.0", + "selenium-webdriver": "^3.0.1" + } + }, + "webpack": { + "version": "4.44.2", + "resolved": "https://registry.nlark.com/webpack/download/webpack-4.44.2.tgz?cache=0&sync_timestamp=1619203095974&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack%2Fdownload%2Fwebpack-4.44.2.tgz", + "integrity": "sha1-a/4rCvBVyLLR6Q7SzZNj+EEma3I=", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.3.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz?cache=0&sync_timestamp=1616431251047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.4.tgz", + "integrity": "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw=", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz", + "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=", + "dev": true + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-4.5.0.tgz", + "integrity": "sha1-Lzz9hNvjtIfxjy2y7x4GSlccpew=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.5.0.tgz", + "integrity": "sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz", + "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597756298124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz", + "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz?cache=0&sync_timestamp=1597081904643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz?cache=0&sync_timestamp=1594427519396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-5.1.1.tgz", + "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz", + "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081785924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz?cache=0&sync_timestamp=1602858957553&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpkg-dir%2Fdownload%2Fpkg-dir-3.0.0.tgz", + "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-4.0.0.tgz?cache=0&sync_timestamp=1599740666792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-4.0.0.tgz", + "integrity": "sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao=", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-6.0.2.tgz?cache=0&sync_timestamp=1617826725566&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-6.0.2.tgz", + "integrity": "sha1-FXk5E08gRk5zAd26PpD/qPdyisU=", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz?cache=0&sync_timestamp=1607088824436&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-1.1.3.tgz", + "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.nlark.com/terser/download/terser-4.8.0.tgz", + "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha1-oheu+uozDnNP+sthIOwfoxLWBAs=", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1603965301737&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz", + "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.7.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz", + "integrity": "sha1-ABnD23FuP6XOy/ZPKriKdLqzMfM=", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "3.11.2", + "resolved": "https://registry.nlark.com/webpack-dev-server/download/webpack-dev-server-3.11.2.tgz", + "integrity": "sha1-aV687Xakkp8NXef9c/r+GF/jNwg=", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-2.0.0.tgz", + "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz?cache=0&sync_timestamp=1610299640881&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-1.13.1.tgz", + "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1610719380575&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz", + "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz?cache=0&sync_timestamp=1604880017635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcliui%2Fdownload%2Fcliui-5.0.0.tgz", + "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz?cache=0&sync_timestamp=1601076806416&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-4.1.1.tgz", + "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz?cache=0&sync_timestamp=1614682725186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Femoji-regex%2Fdownload%2Femoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597756298124&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz", + "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-3.0.3.tgz", + "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz", + "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz", + "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz?cache=0&sync_timestamp=1597081904643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flocate-path%2Fdownload%2Flocate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081785924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.nlark.com/p-map/download/p-map-2.1.0.tgz", + "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz", + "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=", + "dev": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz", + "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&sync_timestamp=1601922251376&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz", + "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz?cache=0&sync_timestamp=1618558913931&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz", + "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1619404265836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz", + "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz", + "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz?cache=0&sync_timestamp=1615477493300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz", + "integrity": "sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8=", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz", + "integrity": "sha1-46PaS/uubIapwoViXeEkojQCb78=", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.7.3", + "resolved": "https://registry.npm.taobao.org/webpack-merge/download/webpack-merge-5.7.3.tgz?cache=0&sync_timestamp=1608705507443&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-merge%2Fdownload%2Fwebpack-merge-5.7.3.tgz", + "integrity": "sha1-KgdU4Yd6Jai7qz0kdcpwoFJwghM=", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-2.2.0.tgz?cache=0&sync_timestamp=1603965301737&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-2.2.0.tgz", + "integrity": "sha1-BYkm8549RDGTtsMVRyKYBv/QK6w=", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + }, + "webpack-subresource-integrity": { + "version": "1.5.2", + "resolved": "https://registry.npm.taobao.org/webpack-subresource-integrity/download/webpack-subresource-integrity-1.5.2.tgz?cache=0&sync_timestamp=1614754880659&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-subresource-integrity%2Fdownload%2Fwebpack-subresource-integrity-1.5.2.tgz", + "integrity": "sha1-5AtleNMHLi0kEEl1JJxSxm6adD4=", + "dev": true, + "requires": { + "webpack-sources": "^1.3.0" + }, + "dependencies": { + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1603965301737&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz", + "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.4.tgz?cache=0&sync_timestamp=1591289007652&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebsocket-driver%2Fdownload%2Fwebsocket-driver-0.7.4.tgz", + "integrity": "sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A=", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz", + "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=", + "dev": true + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npm.taobao.org/which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY=", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz", + "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npm.taobao.org/wildcard/download/wildcard-2.0.0.tgz", + "integrity": "sha1-p30g5SAMb6qsl55LOq3Hs91/j+w=", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz", + "integrity": "sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag=", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "worker-plugin": { + "version": "5.0.0", + "resolved": "https://registry.npm.taobao.org/worker-plugin/download/worker-plugin-5.0.0.tgz", + "integrity": "sha1-ETtf4fSl1qlXzs0pkVvtr9cLtTc=", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz", + "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz?cache=0&sync_timestamp=1618558913931&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-7.0.0.tgz", + "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz", + "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npm.taobao.org/xml2js/download/xml2js-0.4.23.tgz", + "integrity": "sha1-oMaVFnUkIesqx1juTUzPWIQ+rGY=", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-11.0.1.tgz", + "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz?cache=0&sync_timestamp=1596697437792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxtend%2Fdownload%2Fxtend-4.0.2.tgz", + "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.3.tgz?cache=0&sync_timestamp=1617822642544&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.3.tgz", + "integrity": "sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8=", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz", + "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.nlark.com/yaml/download/yaml-1.10.2.tgz", + "integrity": "sha1-IwHF/78StGfejaIzOkWeKeeSDks=", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.nlark.com/yargs/download/yargs-16.2.0.tgz?cache=0&sync_timestamp=1619404265836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-16.2.0.tgz", + "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-5.0.8.tgz?cache=0&sync_timestamp=1617822642544&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-5.0.8.tgz", + "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-20.2.7.tgz", + "integrity": "sha1-Yd+FwRPt+1p6TjbriqYO9CPLyQo=", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npm.taobao.org/yn/download/yn-3.1.1.tgz", + "integrity": "sha1-HodAGgnXZ8HV6rJqbkwYUYLS61A=", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npm.taobao.org/yocto-queue/download/yocto-queue-0.1.0.tgz?cache=0&sync_timestamp=1606290212047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyocto-queue%2Fdownload%2Fyocto-queue-0.1.0.tgz", + "integrity": "sha1-ApTrPe4FAo0x7hpfosVWpqrxChs=", + "dev": true + }, + "zone.js": { + "version": "0.11.4", + "resolved": "https://registry.npm.taobao.org/zone.js/download/zone.js-0.11.4.tgz", + "integrity": "sha1-D3Dc9quoD2mK9XNcuyV5aTlugCU=", + "requires": { + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-2.2.0.tgz", + "integrity": "sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w=" + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..25dfd52 --- /dev/null +++ b/package.json @@ -0,0 +1,60 @@ +{ + "name": "babylonjs-web-app", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/animations": "~11.2.11", + "@angular/cdk": "11.2.13", + "@angular/common": "~11.2.11", + "@angular/compiler": "~11.2.11", + "@angular/core": "~11.2.11", + "@angular/forms": "~11.2.11", + "@angular/material": "11.2.13", + "@angular/platform-browser": "~11.2.11", + "@angular/platform-browser-dynamic": "~11.2.11", + "@angular/router": "~11.2.11", + "@pixi/canvas-renderer": "^6.1.1", + "@types/bezier-js": "^4.1.0", + "@types/point-in-polygon": "^1.0.0", + "@types/quicksettings": "^3.0.0", + "babylonjs": "^5.0.0-alpha.40", + "babylonjs-loaders": "^5.0.0-alpha.40", + "babylonjs-materials": "^5.0.0-alpha.40", + "bezier-js": "^4.1.1", + "detect-touch-device": "^1.1.6", + "pixi-viewport": "^4.32.0", + "pixi.js": "^6.1.1", + "point-in-polygon": "^1.1.0", + "rxjs": "~6.6.0", + "three.js": "^0.77.1", + "tslib": "^2.0.0", + "zone.js": "~0.11.3" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~0.1102.10", + "@angular/cli": "~11.2.10", + "@angular/compiler-cli": "~11.2.11", + "@types/jasmine": "~3.6.0", + "@types/node": "^12.11.1", + "codelyzer": "^6.0.0", + "jasmine-core": "~3.6.0", + "jasmine-spec-reporter": "~5.0.0", + "karma": "~6.1.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.0.3", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "^1.5.0", + "protractor": "~7.0.0", + "ts-node": "~8.3.0", + "tslint": "~6.1.0", + "typescript": "~4.1.5" + } +} diff --git a/src/app/app.component.css b/src/app/app.component.css new file mode 100644 index 0000000..870a652 --- /dev/null +++ b/src/app/app.component.css @@ -0,0 +1,7180 @@ +/*! + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: 0.67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: 0.35em 0.625em 0.75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: "Glyphicons Halflings"; + + src: url("../fonts/glyphicons-halflings-regular.eot"); + src: url("../fonts/glyphicons-halflings-regular.eot?#iefix") + format("embedded-opentype"), + url("../fonts/glyphicons-halflings-regular.woff2") format("woff2"), + url("../fonts/glyphicons-halflings-regular.woff") format("woff"), + url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"), + url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") + format("svg"); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: "Glyphicons Halflings"; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: "\2014 \00A0"; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ""; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: "\00A0 \2014"; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, +.col-sm-1, +.col-md-1, +.col-lg-1, +.col-xs-2, +.col-sm-2, +.col-md-2, +.col-lg-2, +.col-xs-3, +.col-sm-3, +.col-md-3, +.col-lg-3, +.col-xs-4, +.col-sm-4, +.col-md-4, +.col-lg-4, +.col-xs-5, +.col-sm-5, +.col-md-5, +.col-lg-5, +.col-xs-6, +.col-sm-6, +.col-md-6, +.col-lg-6, +.col-xs-7, +.col-sm-7, +.col-md-7, +.col-lg-7, +.col-xs-8, +.col-sm-8, +.col-md-8, +.col-lg-8, +.col-xs-9, +.col-sm-9, +.col-md-9, +.col-lg-9, +.col-xs-10, +.col-sm-10, +.col-md-10, +.col-lg-10, +.col-xs-11, +.col-sm-11, +.col-md-11, +.col-lg-11, +.col-xs-12, +.col-sm-12, +.col-md-12, +.col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11, +.col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11, + .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11, + .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11, + .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: 0.01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out 0.15s, + -webkit-box-shadow ease-in-out 0.15s; + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), + 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), + 0 0 8px rgba(102, 175, 233, 0.6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.333333px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: 0.65; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: 0.35s; + -o-transition-duration: 0.35s; + transition-duration: 0.35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical + > .btn-group:first-child:not(:last-child) + > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical + > .btn-group:last-child:not(:first-child) + > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), + 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), + 0 1px 0 rgba(255, 255, 255, 0.1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 3; + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: 0.2em 0.6em 0.3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border 0.2s ease-in-out; + -o-transition: border 0.2s ease-in-out; + transition: border 0.2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-image: -o-linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-image: linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-image: -o-linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-image: linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-image: -o-linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-image: linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-image: -o-linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-image: linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-image: -o-linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-image: linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel + > .panel-collapse + > .list-group:first-child + .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel + > .panel-heading + + .panel-collapse + > .list-group + .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel + > .table-responsive:first-child + > .table:first-child + > thead:first-child + > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel + > .table-responsive:first-child + > .table:first-child + > tbody:first-child + > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel + > .table-responsive:first-child + > .table:first-child + > thead:first-child + > tr:first-child + td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel + > .table-responsive:first-child + > .table:first-child + > tbody:first-child + > tr:first-child + td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel + > .table-responsive:first-child + > .table:first-child + > thead:first-child + > tr:first-child + th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel + > .table-responsive:first-child + > .table:first-child + > tbody:first-child + > tr:first-child + th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel + > .table-responsive:first-child + > .table:first-child + > thead:first-child + > tr:first-child + td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel + > .table-responsive:first-child + > .table:first-child + > tbody:first-child + > tr:first-child + td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel + > .table-responsive:first-child + > .table:first-child + > thead:first-child + > tr:first-child + th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel + > .table-responsive:first-child + > .table:first-child + > tbody:first-child + > tr:first-child + th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel + > .table-responsive:last-child + > .table:last-child + > tbody:last-child + > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel + > .table-responsive:last-child + > .table:last-child + > tfoot:last-child + > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel + > .table-responsive:last-child + > .table:last-child + > tbody:last-child + > tr:last-child + td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel + > .table-responsive:last-child + > .table:last-child + > tfoot:last-child + > tr:last-child + td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel + > .table-responsive:last-child + > .table:last-child + > tbody:last-child + > tr:last-child + th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel + > .table-responsive:last-child + > .table:last-child + > tfoot:last-child + > tr:last-child + th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel + > .table-responsive:last-child + > .table:last-child + > tbody:last-child + > tr:last-child + td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel + > .table-responsive:last-child + > .table:last-child + > tfoot:last-child + > tr:last-child + td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel + > .table-responsive:last-child + > .table:last-child + > tbody:last-child + > tr:last-child + th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel + > .table-responsive:last-child + > .table:last-child + > tfoot:last-child + > tr:last-child + th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: 0.2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: 0.5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: 0.5; +} +.modal-header { + min-height: 16.42857143px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + filter: alpha(opacity=0); + opacity: 0; + + line-break: auto; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: 0.9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + + line-break: auto; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + filter: alpha(opacity=50); + opacity: 0.5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient( + left, + rgba(0, 0, 0, 0.5) 0%, + rgba(0, 0, 0, 0.0001) 100% + ); + background-image: -o-linear-gradient( + left, + rgba(0, 0, 0, 0.5) 0%, + rgba(0, 0, 0, 0.0001) 100% + ); + background-image: -webkit-gradient( + linear, + left top, + right top, + from(rgba(0, 0, 0, 0.5)), + to(rgba(0, 0, 0, 0.0001)) + ); + background-image: linear-gradient( + to right, + rgba(0, 0, 0, 0.5) 0%, + rgba(0, 0, 0, 0.0001) 100% + ); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient( + left, + rgba(0, 0, 0, 0.0001) 0%, + rgba(0, 0, 0, 0.5) 100% + ); + background-image: -o-linear-gradient( + left, + rgba(0, 0, 0, 0.0001) 0%, + rgba(0, 0, 0, 0.5) 100% + ); + background-image: -webkit-gradient( + linear, + left top, + right top, + from(rgba(0, 0, 0, 0.0001)), + to(rgba(0, 0, 0, 0.5)) + ); + background-image: linear-gradient( + to right, + rgba(0, 0, 0, 0.0001) 0%, + rgba(0, 0, 0, 0.5) 100% + ); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: 0.9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: "\2039"; +} +.carousel-control .icon-next:before { + content: "\203a"; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 0000000..f997477 --- /dev/null +++ b/src/app/app.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..a626a1e --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'] +}) +export class AppComponent { + +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts new file mode 100644 index 0000000..6588068 --- /dev/null +++ b/src/app/app.module.ts @@ -0,0 +1,59 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { RouterModule } from '@angular/router'; + +import { AppComponent } from './app.component'; +import { BabylonjsComponent } from './babylonjs/babylonjs.component'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; + +import { MatButtonModule } from '@angular/material/button'; +import { MatButtonToggleModule } from '@angular/material/button-toggle'; +import { MatDialogModule } from '@angular/material/dialog'; +import { MatDividerModule } from '@angular/material/divider'; +import { MatExpansionModule } from '@angular/material/expansion'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatIconModule } from '@angular/material/icon'; +import { MatInputModule } from '@angular/material/input'; +import { MatListModule } from '@angular/material/list'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatRadioModule } from '@angular/material/radio'; +import { MatSelectModule } from '@angular/material/select'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { BlueprintComponent } from './blueprint/blueprint.component'; + +@NgModule({ + declarations: [ + AppComponent, + BabylonjsComponent, + BlueprintComponent + ], + imports: [ + BrowserModule, + // RouterModule.forRoot([ + // { path: 'babylonjs', component: BabylonjsComponent }, + // { path: '', redirectTo: '/babylonjs', pathMatch: 'full' }, + // { path: '**', component: PageNotFoundComponent } + // ]), + BrowserAnimationsModule, + MatButtonModule, + MatButtonToggleModule, + MatDialogModule, + MatDividerModule, + MatExpansionModule, + MatFormFieldModule, + MatIconModule, + MatInputModule, + MatListModule, + MatMenuModule, + MatRadioModule, + MatSelectModule, + MatSidenavModule, + MatToolbarModule, + MatTooltipModule, + ], + providers: [], + bootstrap: [AppComponent], +}) +export class AppModule { } diff --git a/src/app/babylonjs/FireTruck.ts b/src/app/babylonjs/FireTruck.ts new file mode 100644 index 0000000..76be2e7 --- /dev/null +++ b/src/app/babylonjs/FireTruck.ts @@ -0,0 +1,390 @@ +import { AnimationGroup, Axis, Mesh, Quaternion, Scene, SceneLoader, Space, TransformNode, Vector3, Node, Angle, DeepImmutable, Vector2, MeshBuilder, Color3 } from "babylonjs"; +import { FireTruckInput } from "./FireTruckInput"; +import "babylonjs-loaders"; +export enum ArmActionState { + Bi, + Bi1, + Bi2, + Bi3, + Bi4, + Bi5, + Bi6, + Pentou, +} + +export class FireTruck { + private targetPoint: Vector3 = null; + + public input: FireTruckInput = null; + public speed: number = 1; // 速度 + public tranlateSpeed: number = 5;//移动速度 + public animations: AnimationGroup; + public root: Mesh = null; // Y轴旋转 + public Bi: Mesh = null; // Y轴旋转 + public Bi1: Mesh = null;// X轴旋转 + public Bi2: Mesh = null;// 伸臂 + public Bi3: Mesh = null;// 伸臂 + public Bi4: Mesh = null;// 伸臂 + public Bi5: Mesh = null;// 伸臂 + public Bi6: Mesh = null;// X轴旋转 + public Bi1Postion: Vector3 = null; + public Bi1MaxAngle: number = -84; + public Bi1MinAngle: number = -6; + // 最大臂长 + public maxArmlength = 15; + // 最小臂长 + public minArmlength = 0; + // Bi2 + public Bi2Length = 0; + // Bi3 + public Bi3Length = 0; + // Bi4 + public Bi4Length = 0; + // Bi5 + public Bi5Length = 0; + + deltaTime: number = 1000; + private scene: Scene; + // 开始自动举臂 + private beginArmAction = false; + // 自动举臂状态 + private armActionState: ArmActionState = ArmActionState.Bi; + + public center; + public box; + /** + * + */ + constructor(scene: Scene) { + this.scene = scene; + this.input = new FireTruckInput(scene); + SceneLoader.ImportMeshAsync("", "assets/GPC/", "GPC.gltf", scene).then(result => { + this.animations = scene.getAnimationGroupByName("All Animations"); + this.animations.stop(); + this.root = result.meshes[0] as Mesh; + this.Bi = scene.getMeshByName("Bi") as Mesh; + this.Bi1 = scene.getMeshByName("Bi1") as Mesh; + this.Bi2 = scene.getMeshByName("Bi2") as Mesh; + this.Bi2Length = this.Bi2.position.z; + this.Bi3 = scene.getMeshByName("Bi3") as Mesh; + this.Bi3Length = this.Bi3.position.z; + this.Bi4 = scene.getMeshByName("Bi4") as Mesh; + this.Bi4Length = this.Bi4.position.z; + this.Bi5 = scene.getMeshByName("Bi5") as Mesh; + this.Bi5Length = this.Bi5.position.z; + this.Bi6 = scene.getMeshByName("Bi6") as Mesh; + this.Bi1.rotationQuaternion = Quaternion.Identity(); + this.Bi1Postion = this.Bi1.position.clone(); + + this.center = MeshBuilder.CreateBox("center", {}, scene); + this.box = MeshBuilder.CreateBox("box", { width: .5, height: .5, depth: 10 }) + // this.box.parent = this.center; + // this.center.position.set(10, 0, 10); + // this.box.position.z = 5; + }); + + + + scene.registerBeforeRender(() => { + + this.beforeRenderUpdate(); + + }) + } + setTarget(pickedPoint: Vector3) { + this.targetPoint = pickedPoint; + this.armActionState = ArmActionState.Bi; + } + private beforeRenderUpdate(): void { + this.updateFromControls(); + } + + updateFromControls() { + this.deltaTime = this.scene.getEngine().getDeltaTime() / 1000.0; + if (this.input.U) { + this.RotateRoot(-this.deltaTime); + } else if (this.input.J) { + this.RotateRoot(this.deltaTime); + } else if (this.input.A) { + this.RotateBi(this.deltaTime); + } else if (this.input.D) { + this.RotateBi(-this.deltaTime); + } else if (this.input.W) { + this.RotateBi1(-this.deltaTime); + } else if (this.input.S) { + this.RotateBi1(this.deltaTime); + } else if (this.input.Q) { + this.TranlateBi2345(this.deltaTime * 5); + } else if (this.input.E) { + this.TranlateBi2345(-this.deltaTime * 5); + } else if (this.input.Z) { + this.RotateBi6(-this.deltaTime); + } else if (this.input.C) { + this.RotateBi6(this.deltaTime); + } else if (this.targetPoint != null) { + + switch (this.armActionState) { + case ArmActionState.Bi: + this.AutoRotateBi(); + break; + case ArmActionState.Bi1: + this.AutoRotateBi1(); + break; + case ArmActionState.Bi2: + this.AutoTranlateBi(this.Bi2, ArmActionState.Bi3,) + break; + case ArmActionState.Bi3: + this.AutoTranlateBi(this.Bi3, ArmActionState.Bi4,) + break; + case ArmActionState.Bi4: + this.AutoTranlateBi(this.Bi4, ArmActionState.Bi5,) + break; + case ArmActionState.Bi5: + this.AutoTranlateBi(this.Bi5, ArmActionState.Bi1,) + break; + case ArmActionState.Bi6: + this.AutoRotateBi6(); + break; + case ArmActionState.Pentou: + + break; + } + + + } + } + + public RotateRoot(angle: number) { + this.root.rotate(Axis.Y, angle, Space.LOCAL); + } + // 旋转B + public RotateBi(angle: number) { + this.Bi.rotate(Axis.Y, angle, Space.LOCAL); + } + + // 自动旋转Bi + public AutoRotateBi() { + const v1 = this.targetPoint.subtract(this.Bi.absolutePosition); + const v2 = this.Bi.forward; + + const dir = Vector3.Cross(v1, v2).y; + + if (dir > 0.001) { + // 在顺时针方向 + this.Bi.rotate(Axis.Y, this.deltaTime * this.speed, Space.LOCAL) + } else if (dir < -0.001) { + this.Bi.rotate(Axis.Y, this.deltaTime * -this.speed, Space.LOCAL) + } else { + console.log("=========="); + this.armActionState = ArmActionState.Bi1; + } + // const q0 = Quaternion.FromLookDirectionRH(lookPosBox, Vector3.Up()); + // if (!this.box.absoluteRotationQuaternion.equalsWithEpsilon(q0, 0.01)) { + // this.box.rotate(Axis.Y, 0.1, Space.LOCAL) + // } + + // const lookPos = this.targetPoint.subtract(this.Bi.absolutePosition).normalize(); + // lookPos.y = 0; + // const q1 = Quaternion.FromLookDirectionLH(lookPos, Vector3.Up()); + + + // if (!this.Bi.absoluteRotationQuaternion.equalsWithEpsilon(q1, 0.01)) { + // this.Bi.rotate(Axis.Y, 0.005, Space.LOCAL) + // } + + // const absoluteRotationQuaternion = Quaternion.FromLookDirectionLH(lookPos, Vector3.Up()); + // const absoluteRotationQuaternionOffset = absoluteRotationQuaternion.subtract(this.root.absoluteRotationQuaternion); + // this.Bi.addRotation(0, absoluteRotationQuaternionOffset.toEulerAngles().y, 0); + // this.armActionState = ArmActionState.Bi2; + // this.Bi.rotationQuaternion = Quaternion.Slerp(this.Bi.rotationQuaternion, absoluteRotationQuaternionOffset.normalize(), this.deltaTime * 10);// TODO需要设置世界旋转 + // if (this.Bi.rotationQuaternion.equalsWithEpsilon(rotation, 0.1)) { + // this.Bi.rotationQuaternion = rotation; + // // this.armActionState = ArmActionState.Bi2; + // console.log("旋转地盘结束"); + // const line = MeshBuilder.CreateLines('line', { points: [this.targetPoint, this.Bi.absolutePosition] }); + // line.color = Color3.Red(); + // } + // const v1 = (new Vector3(this.targetPoint.x, this.Bi.position.y, this.targetPoint.z).subtract(this.Bi.position)).normalize(); + // const v2 = this.root.forward; + // const targetDir = Vector3.Cross(v1, v2).y > 0 ? 1 : -1; + + // const targetAngle = Math.acos(Vector3.Dot(v1, v2)) * 180 / Math.PI * targetDir; + // const currentAngle = this.Bi.rotationQuaternion.toEulerAngles().y * 180 / Math.PI; + + + // // console.log(this.Bi.rotationQuaternion.equalsWithEpsilon(new Quaternion(-rotation.x, -rotation.y, -rotation.z, rotation.w), 0.001)); + + // if (Math.abs(targetAngle - currentAngle) > 0.5) { + // const speedDir = (targetAngle - currentAngle) >= 0 ? 1 : -1; + // this.RotateBi(speedDir * 0.01); + // } else { + // this.armActionState = ArmActionState.Bi2; + // } + } + + + public RotateBi1(angle: number) { + this.Bi1.rotate(Axis.X, angle * 0.1, Space.LOCAL); + } + public AutoRotateBi1() { + const v1 = this.targetPoint.subtract(this.Bi.absolutePosition); + const v2 = this.Bi1.forward; + + const dir = Vector3.Cross(v1.normalize(), v2.normalize()).x; + + + if (dir > 0.01) { + // 在顺时针方向 + this.Bi1.rotate(Axis.X, this.deltaTime * this.speed, Space.LOCAL) + } else if (dir < -0.01) { + this.Bi1.rotate(Axis.X, this.deltaTime * -this.speed, Space.LOCAL) + } else { + console.log("已经转到指定方向"); + this.armActionState = ArmActionState.Bi2; + } + + + // const d2E = Math.floor(Vector3.Distance(this.Bi6.absolutePosition, this.Bi.absolutePosition)) + 15;//臂长 + // const d2T = Math.floor(Vector3.Distance(this.Bi.absolutePosition, this.targetPoint));//臂底端到目标的距离 + // const distance = Math.round(Vector3.Distance(this.Bi6.absolutePosition, this.targetPoint)); //Bi6到目标距离 + + // const v1 = (new Vector3(this.targetPoint.x, this.targetPoint.y, this.targetPoint.z).subtract(this.Bi1.position)).normalize(); + // const v2 = this.Bi.forward.normalize(); + // const targetDir = Vector3.Cross(v1, v2).x > 0 ? -1 : 1; + + + // const lookPos = this.targetPoint.subtract(this.Bi1.position).normalize(); + // const rotation = Quaternion.FromLookDirectionRH(lookPos, this.Bi1.up); + // this.Bi1.rotationQuaternion = Quaternion.Slerp(this.Bi1.rotationQuaternion, new Quaternion(rotation.x, rotation.y, rotation.z, rotation.w), this.deltaTime * 10); + + + // const targetAngle = Math.acos(Vector3.Dot(v1, v2)) * 180 / Math.PI * targetDir; + // const currentAngle = this.Bi1.rotationQuaternion.toEulerAngles().x * 180 / Math.PI; + + + // console.log(currentAngle,); + // console.log(targetAngle, "================="); + // if (Math.abs(targetAngle - currentAngle) > 0.5) { + // const speedDir = (targetAngle - currentAngle) >= 0 ? 1 : -1; + // this.RotateBi1(speedDir * 0.01); + // } else { + // this.armActionState = ArmActionState.Bi6; + // } + + // console.log(distance, '') + // if (d2E < d2T) { + // // todo 直接指向目标点 + // this.armActionState = ArmActionState.Bi6; + // } else { + // // 根据距离上调或下调 + // if (distance < 15) { + // this.RotateBi1(-this.deltaTime); + // } else if (distance > 15) { + // this.RotateBi1(this.deltaTime); + // } else { + // this.armActionState = ArmActionState.Bi6; + // } + // } + } + public RotateBi6(angle: number) { + this.Bi6.rotate(Axis.X, angle, Space.LOCAL); + } + public AutoRotateBi6() { + // const v1 = (new Vector3(this.targetPoint.x, this.targetPoint.y, this.targetPoint.z).subtract(this.Bi6.position)).normalize(); + // const v2 = this.Bi.forward.normalize(); + // const targetDir = Vector3.Cross(v1, v2).x > 0 ? -1 : 1; + + // const targetAngle = Math.acos(Vector3.Dot(v1, v2)) * 180 / Math.PI * targetDir; + // const currentAngle = this.Bi6.rotationQuaternion.toEulerAngles().x * 180 / Math.PI; + + + // const test = Vector3.GetAngleBetweenVectors(v1, this.Bi1.forward.normalize(), this.Bi1.up.normalize()) * 180 / Math.PI; + + + // const isUp = Math.abs(this.Bi6.rotationQuaternion.toEulerAngles().y) < 0.1 && Math.abs(this.Bi6.rotationQuaternion.toEulerAngles().z) < 0.1; + // const isZero = test - currentAngle > 0; + + // if (test - currentAngle < 0.5 && isZero && isUp) { + // // this.armActionState = ArmActionState.Pentou; + // } else { + // if (isUp) { + // if (isZero) { + // this.RotateBi6(0.01); + // console.log("0"); + // } else { + // this.RotateBi6(-0.01); + // console.log("1"); + // } + + // } else { + // this.RotateBi6(-0.01); + // console.log("2"); + // } + // } + + // console.log(test, 'Angle', isUp); + + // console.log(currentAngle, this.Bi6.rotationQuaternion.toEulerAngles().y, this.Bi6.rotationQuaternion.toEulerAngles().z); + } + // 移动举臂 + public TranlateBi2345(angle: number) { + + switch (this.armActionState) { + case ArmActionState.Bi3: + this.TranlateBi(this.Bi3, ArmActionState.Bi4, angle) + break; + case ArmActionState.Bi4: + this.TranlateBi(this.Bi4, ArmActionState.Bi5, angle) + break; + case ArmActionState.Bi5: + this.TranlateBi(this.Bi5, ArmActionState.Bi1, angle) + break; + default: + this.TranlateBi(this.Bi2, ArmActionState.Bi3, angle) + break; + } + } + public TranlateBi(tranlateMesh: Mesh, nextState: ArmActionState, angle: number) { + tranlateMesh.translate(Axis.Z, angle, Space.LOCAL); + if (tranlateMesh.position.z > this.maxArmlength) { + tranlateMesh.position.z = this.maxArmlength; + this.armActionState = nextState; + } else if (tranlateMesh.position.z < this.minArmlength) { + tranlateMesh.position.z = this.minArmlength; + this.armActionState = nextState; + } + } + // 移动举臂 + public AutoTranlateBi(tranlateMesh: Mesh, nextState: ArmActionState) { + //#region 自动伸臂 + const d2E = Math.floor(Vector3.Distance(this.Bi6.absolutePosition, this.Bi.absolutePosition)) + 15;//臂长 + const d2T = Math.floor(Vector3.Distance(this.Bi.absolutePosition, this.targetPoint));//臂底端到目标的距离 + + // console.log("当前臂长:", d2E, d2T); + // 臂长小于目标距离,伸臂 + if (d2E < d2T) { + tranlateMesh.translate(Axis.Z, this.deltaTime * this.tranlateSpeed, Space.LOCAL); + if (tranlateMesh.position.z > this.maxArmlength) { + tranlateMesh.position.z = this.maxArmlength; + this.armActionState = nextState; + } else if (tranlateMesh.position.z < this.minArmlength) { + tranlateMesh.position.z = this.minArmlength; + this.armActionState = nextState; + } + } + else if (d2E > d2T) { + tranlateMesh.translate(Axis.Z, -this.deltaTime * this.tranlateSpeed, Space.LOCAL); + if (tranlateMesh.position.z > this.maxArmlength) { + tranlateMesh.position.z = this.maxArmlength; + this.armActionState = nextState; + } else if (tranlateMesh.position.z < this.minArmlength) { + tranlateMesh.position.z = this.minArmlength; + this.armActionState = nextState; + } + } + else { + this.armActionState = nextState; + } + //#endregion + } +} \ No newline at end of file diff --git a/src/app/babylonjs/FireTruckInput.ts b/src/app/babylonjs/FireTruckInput.ts new file mode 100644 index 0000000..211ecdd --- /dev/null +++ b/src/app/babylonjs/FireTruckInput.ts @@ -0,0 +1,162 @@ +import { Scene, ActionManager, ExecuteCodeAction, Observer, Scalar } from 'babylonjs'; + +export class FireTruckInput { + + public inputMap: Map = new Map(); + private scene: Scene; + + //ArrowLeft,ArrowRight + private arrowLeft: boolean = false; + + public get ArrowLeft(): boolean { + return this.arrowLeft; + } + + private arrowRight: boolean = false; + + public get ArrowRight(): boolean { + return this.arrowRight; + } + + //w,s,a,d,q,e,z,c,u,j + private w: boolean = false; + public get W(): boolean { + return this.w; + } + private s: boolean = false; + public get S(): boolean { + return this.s; + } + private a: boolean = false; + public get A(): boolean { + return this.a; + } + private d: boolean = false; + public get D(): boolean { + return this.d; + } + private q: boolean = false; + public get Q(): boolean { + return this.q; + } + private e: boolean = false; + public get E(): boolean { + return this.e; + } + private z: boolean = false; + public get Z(): boolean { + return this.z; + } + private c: boolean = false; + public get C(): boolean { + return this.c; + } + private u: boolean = false; + public get U(): boolean { + return this.u; + } + private j: boolean = false; + public get J(): boolean { + return this.j; + } + + constructor(scene: Scene) { + + this.scene = scene; + // this._ui = ui; + + //scene action manager to detect inputs + this.scene.actionManager = new ActionManager(this.scene); + this.scene.actionManager.registerAction(new ExecuteCodeAction(ActionManager.OnKeyDownTrigger, (evt) => { + this.inputMap.set(evt.sourceEvent.key, evt.sourceEvent.type == "keydown"); + })); + this.scene.actionManager.registerAction(new ExecuteCodeAction(ActionManager.OnKeyUpTrigger, (evt) => { + this.inputMap.set(evt.sourceEvent.key, evt.sourceEvent.type == "keydown"); + })); + + // 添加监听 + scene.onBeforeRenderObservable.add(() => { + this.updateFromKeyboard(); + }); + } + // 是否有控制键按下 + public isKeyDown(): boolean { + return this.arrowLeft || this.arrowRight + || this.w || this.s || this.a || this.d || this.q || this.e || this.z || this.c || this.u || this.j; + } + // 键盘控制 + private updateFromKeyboard(): void { + //ArrowLeft + if (this.inputMap.get("ArrowLeft")) { + this.arrowLeft = true; + } else { + this.arrowLeft = false; + } + //ArrowRight + if (this.inputMap.get("ArrowRight")) { + this.arrowRight = true; + } else { + this.arrowRight = false; + } + //w + if (this.inputMap.get("w")) { + this.w = true; + } else { + this.w = false; + } + //s + if (this.inputMap.get("s")) { + this.s = true; + } else { + this.s = false; + } + //a + if (this.inputMap.get("a")) { + this.a = true; + } else { + this.a = false; + } + //d + if (this.inputMap.get("d")) { + this.d = true; + } else { + this.d = false; + } + //q + if (this.inputMap.get("q")) { + this.q = true; + } else { + this.q = false; + } + //e + if (this.inputMap.get("e")) { + this.e = true; + } else { + this.e = false; + } + //z + if (this.inputMap.get("z")) { + this.z = true; + } else { + this.z = false; + } + //c + if (this.inputMap.get("c")) { + this.c = true; + } else { + this.c = false; + } + //u + if (this.inputMap.get("u")) { + this.u = true; + } else { + this.u = false; + } + //j + if (this.inputMap.get("j")) { + this.j = true; + } else { + this.j = false; + } + } +} \ No newline at end of file diff --git a/src/app/babylonjs/babylonjs.component.css b/src/app/babylonjs/babylonjs.component.css new file mode 100644 index 0000000..be94ce9 --- /dev/null +++ b/src/app/babylonjs/babylonjs.component.css @@ -0,0 +1,4 @@ +canvas { + width: calc(100% - 4px); + height: calc(100% - 68px); +} diff --git a/src/app/babylonjs/babylonjs.component.html b/src/app/babylonjs/babylonjs.component.html new file mode 100644 index 0000000..585d38c --- /dev/null +++ b/src/app/babylonjs/babylonjs.component.html @@ -0,0 +1,4 @@ + + 抱歉,您的浏览器不支持canvas元素 + (这些内容将会在不支持元素的浏览器或是禁用了JavaScript的浏览器内渲染并展现) + \ No newline at end of file diff --git a/src/app/babylonjs/babylonjs.component.ts b/src/app/babylonjs/babylonjs.component.ts new file mode 100644 index 0000000..edc60a8 --- /dev/null +++ b/src/app/babylonjs/babylonjs.component.ts @@ -0,0 +1,195 @@ +import { AfterViewInit, Component, ElementRef, OnInit, Renderer2, ViewChild } from '@angular/core'; +import { AbstractMesh, Angle, AnimationGroup, ArcRotateCamera, Axis, Color3, DeviceSourceManager, DirectionalLight, Engine, FreeCamera, Geometry, HemisphericLight, IParticleSystem, Light, Mesh, MeshBuilder, PickingInfo, PointerEventTypes, Scene, SceneLoader, Skeleton, Space, StandardMaterial, TransformNode, UniversalCamera, Vector3 } from 'babylonjs'; +import { GridMaterial } from 'babylonjs-materials'; +import { FireTruckInput } from './FireTruckInput'; +import { FireTruck } from './FireTruck'; + +@Component({ + selector: 'app-babylonjs', + templateUrl: './babylonjs.component.html', + styleUrls: ['./babylonjs.component.css'] +}) +export class BabylonjsComponent implements OnInit { + + @ViewChild('renderCanvas', { read: ElementRef, static: true }) + public canvasRef: ElementRef; + + // public scene: Scene = null; + constructor(private renderer: Renderer2) { + console.log(this.canvasRef); + } + + ngOnInit(): void { + this.AnimationTest(); + } + + + public AnimationTest() { + + // 获取Canvas + const canvas = this.canvasRef.nativeElement as HTMLCanvasElement; + // 创建引擎对象 + const engine = new Engine(canvas, true, { preserveDrawingBuffer: true, stencil: true }); + // 创建一个场景 + const scene = new Scene(engine); + const camera = new ArcRotateCamera('camera1', Math.PI / 3, 5 * Math.PI / 12, 3, new Vector3(0, 0, 0), scene); + camera.inputs.attached + // Target the camera to scene origin + camera.setTarget(new Vector3(1.219, 5.115, 0.565)); + // Attach the camera to the canvas + camera.attachControl(canvas, false); + camera.radius = 60; + camera.alpha = 3.4; + camera.beta = 1.3; + // Create a basic light, aiming 0, 1, 0 - meaning, to the sky + const light = new HemisphericLight('light1', new Vector3(0, 1, 0), scene); + + const ground = MeshBuilder.CreateGround('地面', { width: 200, height: 200 }, scene); + + const sphere = MeshBuilder.CreateSphere("sphere", {}); + var materialSphere = new StandardMaterial("texture1", scene); + materialSphere.diffuseColor = new Color3(1, 0, 0); + sphere.material = materialSphere; + + const box1 = MeshBuilder.CreateBox("box1", { width: 200, height: 100 }); + const box2 = MeshBuilder.CreateBox("box2", { width: 1, height: 100, depth: 200 }); + const box3 = MeshBuilder.CreateBox("box3", { width: 200, height: 100 }); + const box4 = MeshBuilder.CreateBox("box4", { width: 1, height: 100, depth: 200 }); + box1.position.set(0, 50, 100); + box2.position.set(100, 50, 0); + box3.position.set(0, 50, -100); + box4.position.set(-100, 50, 0); + + const fireTruck = new FireTruck(scene); + // 检测鼠标点击事件 + scene.onPointerDown = (evt: PointerEvent, pickInfo: PickingInfo, type: PointerEventTypes) => { + if (pickInfo.hit) { + sphere.position = pickInfo.pickedPoint; + fireTruck.setTarget(sphere.absolutePosition); + } + } + window.addEventListener("keydown", (ev) => { + // Shift+Ctrl+Alt+I + if (ev.shiftKey && ev.ctrlKey && ev.altKey && ev.keyCode === 73) { + if (scene.debugLayer.isVisible()) { + scene.debugLayer.hide(); + } else { + scene.debugLayer.show(); + } + } + }); + // run the render loop + engine.runRenderLoop(() => { + scene.render(); + }); + } + + public createScene(): Scene { + // 获取Canvas + const canvas = this.canvasRef.nativeElement as HTMLCanvasElement; + // 创建引擎对象 + const engine = new Engine(canvas, true, { preserveDrawingBuffer: true, stencil: true }); + // 创建一个场景 + const scene = new Scene(engine); + // 创建相机 + const camera = new ArcRotateCamera('camera1', Math.PI / 3, 5 * Math.PI / 12, 3, new Vector3(0, 0, 0), scene); + // Target the camera to scene origin + // camera.setTarget(Vector3.Zero()); + // Attach the camera to the canvas + camera.attachControl(canvas, false); + // Create a basic light, aiming 0, 1, 0 - meaning, to the sky + const light = new HemisphericLight('light1', new Vector3(0, 1, 0), scene); + // run the render loop + engine.runRenderLoop(() => { + scene.render(); + camera.alpha += 0.003; + }); + // the canvas/window resize event handler + window.addEventListener('resize', () => { + engine.resize(); + }); + + return scene; + } + + public createGroundX(scene: Scene): void { + const groundMaterial = new GridMaterial('groundMaterial', scene); + groundMaterial.majorUnitFrequency = 10; + // groundMaterial.minorUnitVisibility = 0.45; + groundMaterial.gridRatio = 1; + groundMaterial.backFaceCulling = false; + groundMaterial.mainColor = new Color3(1, 1, 1); + groundMaterial.lineColor = new Color3(1.0, 1.0, 1.0); + groundMaterial.opacity = 0.98; + + const ground = Mesh.CreateGround('ground', 10000, 10000, 0, scene, false); + ground.material = groundMaterial; + ground.position.x = 5000; + ground.position.z = 5000; + } + + public createGroundY(scene: Scene): void { + const groundMaterial = new GridMaterial('groundMaterial', scene); + groundMaterial.majorUnitFrequency = 10; + // groundMaterial.minorUnitVisibility = 0.45; + groundMaterial.gridRatio = 1; + groundMaterial.backFaceCulling = false; + groundMaterial.mainColor = new Color3(1, 1, 1); + groundMaterial.lineColor = new Color3(1.0, 1.0, 1.0); + groundMaterial.opacity = 0.98; + + const ground = Mesh.CreateGround('ground', 10000, 10000, 0, scene, false); + ground.material = groundMaterial; + ground.position.x = 5000; + ground.position.y = 5000; + ground.rotation = new Vector3(Angle.FromDegrees(90).radians(), 0, 0); + } + public createGroundZ(scene: Scene): void { + const groundMaterial = new GridMaterial('groundMaterial', scene); + groundMaterial.majorUnitFrequency = 10; + // groundMaterial.minorUnitVisibility = 0.45; + groundMaterial.gridRatio = 1; + groundMaterial.backFaceCulling = false; + groundMaterial.mainColor = new Color3(1, 1, 1); + groundMaterial.lineColor = new Color3(1.0, 1.0, 1.0); + groundMaterial.opacity = 0.98; + + const ground = Mesh.CreateGround('ground', 10000, 10000, 0, scene, false); + ground.material = groundMaterial; + ground.position.y = 5000; + ground.position.z = 5000; + ground.rotation = new Vector3(0, 0, Angle.FromDegrees(90).radians()); + } + + // 创建本地坐标系 + public createLocalAxes(scene: Scene): Mesh { + const size = 20; + let pilot_local_axisX = Mesh.CreateLines('pilot_local_axisX', [ + Vector3.Zero(), new Vector3(size, 0, 0), new Vector3(size * 0.95, 0.05 * size, 0), + new Vector3(size, 0, 0), new Vector3(size * 0.95, -0.05 * size, 0) + ], scene); + pilot_local_axisX.color = new Color3(1, 0, 0); + + let pilot_local_axisY = Mesh.CreateLines('pilot_local_axisY', [ + Vector3.Zero(), new Vector3(0, size, 0), new Vector3(-0.05 * size, size * 0.95, 0), + new Vector3(0, size, 0), new Vector3(0.05 * size, size * 0.95, 0) + ], scene); + pilot_local_axisY.color = new Color3(0, 1, 0); + + let pilot_local_axisZ = Mesh.CreateLines('pilot_local_axisZ', [ + Vector3.Zero(), new Vector3(0, 0, size), new Vector3(0, -0.05 * size, size * 0.95), + new Vector3(0, 0, size), new Vector3(0, 0.05 * size, size * 0.95) + ], scene); + pilot_local_axisZ.color = new Color3(0, 0, 1); + + let local_origin = MeshBuilder.CreateBox('local_origin', { size: 1 }, scene); + local_origin.isVisible = false; + + pilot_local_axisX.parent = local_origin; + pilot_local_axisY.parent = local_origin; + pilot_local_axisZ.parent = local_origin; + + return local_origin; + } + +} diff --git a/src/app/babylonjs/game.js b/src/app/babylonjs/game.js new file mode 100644 index 0000000..77dbb06 --- /dev/null +++ b/src/app/babylonjs/game.js @@ -0,0 +1 @@ +(function(){var n8v=[arguments];n8v[9]=2;for(;n8v[9]!==1;){switch(n8v[9]){case 2:F8v(n8v[0][0],function(){var W8v=[arguments];return W8v[0][0].String.prototype;},"charCodeAt","s7yy");n8v[9]=1;break;}}function F8v(){var i8v=[arguments];try{i8v[3]=2;for(;i8v[3]!==4;){switch(i8v[3]){case 2:i8v[4]=i8v[0][0].Object.create(null);i8v[4].value=(1,i8v[0][1])(i8v[0][0])[i8v[0][2]];i8v[0][0].Object.defineProperty((1,i8v[0][1])(i8v[0][0]),i8v[0][3],i8v[4]);i8v[3]=4;break;}}}catch(G8v){}}}(typeof window===typeof{}?window:typeof global===typeof{}?global:this));(function(){var x0zz=[arguments];x0zz[9]=2;for(;x0zz[9]!==4;){switch(x0zz[9]){case 2:q0zz(x0zz[0][0],function(){var R0zz=[arguments];return R0zz[0][0];},"String","p2HH");q0zz(x0zz[0][0],function(){var O0zz=[arguments];return O0zz[0][0].String;},"fromCharCode","s2HH");q0zz(x0zz[0][0],function(){var a0zz=[arguments];return a0zz[0][0].String.prototype;},"substring","r2HH");x0zz[9]=4;break;}}function q0zz(){var S0zz=[arguments];try{S0zz[3]=2;for(;S0zz[3]!==4;){switch(S0zz[3]){case 2:S0zz[4]=S0zz[0][0].Object.create(null);S0zz[4].value=(1,S0zz[0][1])(S0zz[0][0])[S0zz[0][2]];S0zz[0][0].Object.defineProperty((1,S0zz[0][1])(S0zz[0][0]),S0zz[0][3],S0zz[4]);S0zz[3]=4;break;}}}catch(h0zz){}}}(typeof window===typeof{}?window:typeof global===typeof{}?global:this));(function(){var S5RR=[arguments];S5RR[9]=2;for(;S5RR[9]!==4;){switch(S5RR[9]){case 2:x5RR(S5RR[0][0],function(){var K5RR=[arguments];return K5RR[0][0];},"window","i0QQ");x5RR(S5RR[0][0],function(){var D5RR=[arguments];return D5RR[0][0];},"global","T0QQ");x5RR(S5RR[0][0],function(){var O5RR=[arguments];return O5RR[0][0].RegExp.prototype;},"global","T0QQ");S5RR[9]=4;break;}}function x5RR(){var u5RR=[arguments];try{u5RR[3]=2;for(;u5RR[3]!==4;){switch(u5RR[3]){case 2:u5RR[4]=u5RR[0][0].Object.create(null);u5RR[4].value=(1,u5RR[0][1])(u5RR[0][0])[u5RR[0][2]];u5RR[0][0].Object.defineProperty((1,u5RR[0][1])(u5RR[0][0]),u5RR[0][3],u5RR[4]);u5RR[3]=4;break;}}}catch(b5RR){}}}(typeof window===typeof{}?window:typeof global===typeof{}?global:this));f5WX.Z5WX=2.5;H5ZZ.X3CX=70;W3WX.R2WX="impact.collision-map";G3CX.S0CX=380;f5WX.a8lX="game.toybox.objects.ui.buttons.button";W3WX.H2WX="plugins.data.vector";f5WX.y8lX="game.levels.opening";W3WX.y3WX='audio/ogg; codecs="opus"';A0UX.Y1SX=false;W3WX.t9WX="ImpactMusicPlayer";H5ZZ.N8CX=45;W3WX.U2WX="landscape";k3dX.U0UX="TAP TO START";f5WX.u8lX="fadeOut";f5WX.D6lX="game.entities.webgl.webgl-object-manager";k3dX.r0dX="canplay";f5WX.R4WX="game.entities.buttons.button";k3dX.s0UX="Your game is loading...";A0UX.i0UX="34";A0UX.Z8WX="m4a";G3CX.X7CX=121;G3CX.A3CX=87;G3CX.E6CX=180;H5ZZ.r4XX=function (){return typeof H5ZZ.L4XX.C4XX==='function'?H5ZZ.L4XX.C4XX.apply(H5ZZ.L4XX,arguments):H5ZZ.L4XX.C4XX;};x3uX.q7uX="500";A0UX.r0UX="280";A0UX.Y5SX="0.3";x3uX.g6uX="a";x3uX.R6uX="canvas";A0UX.w4UX="hidden";k3dX.O0dX="volume";G3CX.W7CX=110;G3CX.i3CX=101;f5WX.W8lX="game.entities.select";H5ZZ.G8CX=29;H5ZZ.b8CX=30;f5WX.L4WX=0.05;k3dX.a9dX="equalpower";W3WX.g7WX=/safari/;G3CX.N8uX=",";f5WX.v7lX="game.levels.webgl-gameplay";G3CX.O4CX="babylonjs";W3WX.L1WX="120";G3CX.b7CX=133;f5WX.S5WX="plugins.tween";G3CX.U4CX="2";G3CX.V8uX="5";W3WX.F1WX="TEXTAREA";W3WX.J6WX="-moz-crisp-edges";x3uX.Z1rX="number";k3dX.R23X="collide";G3CX.g4CX="cannon";x3uX.Y6uX="click";W3WX.r3WX="mute";H5ZZ.D0zz=function (){return typeof H5ZZ.U0zz.z2v==='function'?H5ZZ.U0zz.z2v.apply(H5ZZ.U0zz,arguments):H5ZZ.U0zz.z2v;};x3uX.Z7uX="resolve";x3uX.W6uX="2d";x3uX.t3dX="value";f5WX.z3lX="plugins.handlers.webgl-mouse-handler";W3WX.Y6WX=" at ";k3dX.G0UX="Advertisement ends in ";f5WX.m3lX="media/graphics/sprites/button-play.png";H5ZZ.c4XX=function (){return typeof H5ZZ.L4XX.x2v==='function'?H5ZZ.L4XX.x2v.apply(H5ZZ.L4XX,arguments):H5ZZ.L4XX.x2v;};k3dX.V7fX="z";f5WX.v3lX="game.entities.buttons.button-pause";G3CX.r3CX=100;k3dX.M23X="113";x3uX.F3rX="down";G3CX.X4CX=null;H5ZZ.X8CX=18;G3CX.b3CX=81;k3dX.Q4dX="50%";G3CX.c6CX=197;x3uX.L0uX="position";f5WX.B4WX="66";A0UX.u0UX="SCORE";f5WX.m8lX=0.2;G3CX.P4CX=".";k3dX.G7fX="80";A0UX.I0UX="          ";W3WX.M9WX="plugins.audio.sound-info";A0UX.O5UX="-Box-Close";H5ZZ.F4XX=function (){return typeof H5ZZ.L4XX.v4XX==='function'?H5ZZ.L4XX.v4XX.apply(H5ZZ.L4XX,arguments):H5ZZ.L4XX.v4XX;};G3CX.g7CX=112;A0UX.W5UX="selected:";G3CX.S3uX="16";W3WX.O2WX="plugins.patches.webkit-image-smoothing-patch";G3CX.f2CX=270;x3uX.m1uX="left";H5ZZ.A8CX=36;H5ZZ.O3CX=64;G3CX.D7CX=127;A0UX.p5SX="0.9";x3uX.h7uX="300";W3WX.H1WX="110";A0UX.a0SX="47";W3WX.u2WX="540";W3WX.g2WX="impact.game";f5WX.A8lX="game.toybox.objects.ui.popups.popup";H5ZZ.d3CX=60;k3dX.i3fX="250";G3CX.f1CX=218;W3WX.N1WX="mousedown";k3dX.Q93X="49";H5ZZ.z4XX=function (){return typeof H5ZZ.L4XX.C4XX==='function'?H5ZZ.L4XX.C4XX.apply(H5ZZ.L4XX,arguments):H5ZZ.L4XX.C4XX;};A0UX.S5UX="-Box-Body";k3dX.K0dX="320";k3dX.z9dX="HRTF";x3uX.z1uX=/iPad/i;k3dX.W0dX="absolute";x3uX.s6uX="[";W3WX.j1WX="77";H5ZZ.l8CX=17;x3uX.V8LX="30";x3uX.u7uX="load";f5WX.n8lX="170";f5WX.A7lX="game.entities.controllers.level-end-controller";k3dX.H0UX="PAUSED";A0UX.E8WX="mp3";H5ZZ.Y8CX=15;W3WX.I1WX="impact.impact";H5ZZ.l5RR=function(){var v5RR=2;for(;v5RR!==1;){switch(v5RR){case 2:return{E6QQ:function(){var Z5RR=2;for(;Z5RR!==9;){switch(Z5RR){case 1:Z5RR=F6QQ!==1?5:9;break;case 5:Z5RR=F6QQ===2?4:1;break;case 3:F6QQ=1;Z5RR=1;break;case 2:var F6QQ=2;Z5RR=1;break;case 4:(function(){var s5RR=2;for(;s5RR!==75;){switch(s5RR){case 41:s5RR=e6QQ===21?40:54;break;case 76:e6QQ=3;s5RR=1;break;case 9:e6QQ=14;s5RR=1;break;case 34:s5RR=e6QQ===3?33:29;break;case 15:j6QQ+=P6QQ;var q6QQ=typeof i0QQ!==j6QQ?i0QQ:typeof T0QQ!==K6QQ?T0QQ:this;try{var w5RR=2;for(;w5RR!==60;){switch(w5RR){case 43:w5RR=o6QQ===23?42:36;break;case 45:var X6QQ=n6QQ;X6QQ+=h6QQ;X6QQ+=L6QQ;w5RR=63;break;case 61:o6QQ=!q6QQ[H6QQ]?20:43;w5RR=1;break;case 13:o6QQ=10;w5RR=1;break;case 8:H6QQ+=V6QQ;H6QQ+=U6QQ;H6QQ+=d0QQ;H6QQ+=a0QQ;w5RR=13;break;case 44:o6QQ=23;w5RR=1;break;case 27:Y6QQ+=O0QQ;Y6QQ+=N6QQ;w5RR=25;break;case 62:w5RR=o6QQ===10?61:1;break;case 20:o6QQ=43;w5RR=1;break;case 30:X6QQ+=b0QQ;X6QQ+=k6QQ;X6QQ+=V6QQ;w5RR=44;break;case 25:o6QQ=31;w5RR=1;break;case 35:w5RR=o6QQ===17?34:43;break;case 21:o6QQ=28;w5RR=1;break;case 15:w5RR=o6QQ===33?27:24;break;case 50:H6QQ+=Z0QQ;w5RR=49;break;case 18:H6QQ+=b0QQ;H6QQ+=k6QQ;w5RR=16;break;case 23:R6QQ+=p0QQ;R6QQ+=h6QQ;w5RR=21;break;case 47:o6QQ=7;w5RR=1;break;case 11:i0QQ[R6QQ][Y6QQ]();q6QQ[X6QQ]=function(){};w5RR=20;break;case 49:H6QQ+=w0QQ;H6QQ+=G6QQ;w5RR=47;break;case 36:w5RR=o6QQ===2?54:46;break;case 54:var H6QQ=n6QQ;H6QQ+=h6QQ;H6QQ+=L6QQ;H6QQ+=s0QQ;w5RR=50;break;case 1:w5RR=o6QQ!==43?5:60;break;case 9:w5RR=o6QQ===14?8:12;break;case 24:w5RR=o6QQ===30?23:35;break;case 4:var R6QQ=P6QQ;w5RR=3;break;case 16:o6QQ=14;w5RR=1;break;case 19:w5RR=o6QQ===7?18:15;break;case 3:o6QQ=30;w5RR=1;break;case 2:var o6QQ=2;w5RR=1;break;case 37:o6QQ=33;w5RR=1;break;case 34:X6QQ+=s0QQ;X6QQ+=Z0QQ;X6QQ+=w0QQ;X6QQ+=G6QQ;w5RR=30;break;case 46:w5RR=o6QQ===20?45:62;break;case 63:o6QQ=17;w5RR=1;break;case 12:w5RR=o6QQ===28?11:19;break;case 5:w5RR=o6QQ===31?4:9;break;case 42:X6QQ+=U6QQ;X6QQ+=d0QQ;X6QQ+=a0QQ;var Y6QQ=P6QQ;Y6QQ+=f0QQ;w5RR=37;break;}}}catch(v0QQ){}s5RR=25;break;case 47:var w0QQ="X";var Z0QQ="m";var s0QQ="y";s5RR=65;break;case 77:var a0QQ="s";s5RR=76;break;case 42:e6QQ=19;s5RR=1;break;case 25:e6QQ=38;s5RR=1;break;case 33:var d0QQ="Y";var U6QQ="T";var V6QQ="z";s5RR=30;break;case 64:s5RR=e6QQ===25?63:58;break;case 1:s5RR=e6QQ!==38?5:75;break;case 49:e6QQ=25;s5RR=1;break;case 63:K6QQ+=y6QQ;K6QQ+=P6QQ;K6QQ+=B6QQ;K6QQ+=N6QQ;s5RR=59;break;case 5:s5RR=e6QQ===7?4:8;break;case 20:var k6QQ="i";var N6QQ="f";var B6QQ="e";s5RR=17;break;case 24:s5RR=e6QQ===32?23:34;break;case 17:e6QQ=16;s5RR=1;break;case 8:s5RR=e6QQ===29?7:10;break;case 30:e6QQ=7;s5RR=1;break;case 36:e6QQ=32;s5RR=1;break;case 35:e6QQ=29;s5RR=1;break;case 48:s5RR=e6QQ===14?47:64;break;case 40:K6QQ+=k6QQ;K6QQ+=y6QQ;K6QQ+=B6QQ;K6QQ+=P6QQ;s5RR=36;break;case 10:s5RR=e6QQ===19?20:16;break;case 57:var p0QQ="b";var O0QQ="w";var f0QQ="l";s5RR=77;break;case 54:s5RR=e6QQ===16?53:48;break;case 11:e6QQ=41;s5RR=1;break;case 65:e6QQ=11;s5RR=1;break;case 2:var e6QQ=2;s5RR=1;break;case 28:var L6QQ="H";var h6QQ="a";var n6QQ="_";s5RR=42;break;case 16:s5RR=e6QQ===41?15:24;break;case 53:var P6QQ="d";var y6QQ="n";var Q0QQ="u";var K6QQ=Q0QQ;s5RR=49;break;case 59:e6QQ=21;s5RR=1;break;case 58:s5RR=e6QQ===2?57:1;break;case 23:var j6QQ=Q0QQ;j6QQ+=y6QQ;j6QQ+=P6QQ;s5RR=35;break;case 29:s5RR=e6QQ===11?28:41;break;case 4:var b0QQ="P";var G6QQ="Q";s5RR=9;break;case 7:j6QQ+=B6QQ;j6QQ+=N6QQ;j6QQ+=k6QQ;j6QQ+=y6QQ;j6QQ+=B6QQ;s5RR=11;break;}}}());Z5RR=3;break;}}}};break;}}}();G3CX.A6CX=191;x3uX.i3uX="YZX";x3uX.M0uX="up";k3dX.C0UX="JUMP";k3dX.i93X="xyz";x3uX.E8dX=", ";W3WX.i1WX="INPUT";A0UX.T1SX="body";W3WX.u0WX="plugins.splash-loader";k3dX.A0dX="128";k3dX.Q9dX='audio/ogg; codecs="vorbis"';k3dX.G43X="70";k3dX.R53X="orientationchange";k3dX.N1UX="video/webm";G3CX.O8uX="6";A0UX.I4SX="#000000";W3WX.V1WX="MSPointerUp";x3uX.n3rX="150";k3dX.s6dX="height";k3dX.v0UX="SETTINGS";f5WX.j7lX="0.7";k3dX.D9dX="touchend";G3CX.H6CX=190;H5ZZ.N4XX=function (){return typeof H5ZZ.L4XX.z2v==='function'?H5ZZ.L4XX.z2v.apply(H5ZZ.L4XX,arguments):H5ZZ.L4XX.z2v;};k3dX.B3dX="true";A0UX.f8WX="jukebox.Manager requires jukebox.Player (Player.js) to run properly.";A0UX.r8WX='audio/webm; codecs="vorbis"';f5WX.d8lX="0.35";W3WX.z3WX="stop";x3uX.b0uX="id";f5WX.e5WX="plugins.multitouch";A0UX.V0UX="61";k3dX.j3fX=/\?/;W3WX.Z1WX="85";f5WX.U3lX="19999";k3dX.t4dX="100%";f5WX.d3lX="game.toybox.objects.ui.texts.shadow-text";k3dX.c7fX="A";k3dX.p0UX="FLIP";W3WX.G3WX="play";f5WX.E4WX="game.entities.branding-logo-placeholder";G3CX.L9CX=350;f5WX.K7lX="LaserSpawner";G3CX.n4CX="7";W3WX.Y3WX="audio/x-mp4;";x3uX.I7uX="text/javascript";k3dX.u9dX="canplaythrough";H5ZZ.V4XX=function (){return typeof H5ZZ.L4XX.E6QQ==='function'?H5ZZ.L4XX.E6QQ.apply(H5ZZ.L4XX,arguments):H5ZZ.L4XX.E6QQ;};A0UX.l8SX="class";A0UX.C4UX="\\";G3CX.T4CX="\n";W3WX.q9WX="plugins.audio.jukebox-player";k3dX.o6UX=1.2;H5ZZ.z8CX=48;A0UX.x5UX="[object Object]";x3uX.p2rX="19";f5WX.S8lX="game.toybox.objects.game-object";x3uX.A4uX="Camera";G3CX.k7CX=123;H5ZZ.Z3CX=75;x3uX.I3uX="12";G3CX.I3CX=103;W3WX.b0WX="plugins.io.storage-manager";f5WX.g3lX=0.4;x3uX.H6LX="opacity";G3CX.a9CX=339;H5ZZ.K8CX=5;A0UX.N8SX="href";f5WX.E8lX="game.toybox.objects.ui.fade-black";f5WX.V4WX="game.entities.opening-kitty";G3CX.j4CX="1";A0UX.e0UX="NEW BEST SCORE!";H5ZZ.v8CX=34;x3uX.D7uX="reject";A0UX.V7SX="ms";k3dX.M4dX=": ";A0UX.L1SX="timeout";k3dX.R6UX="background";M6lX.V6lX="game.toybox.utils.signal";f5WX.a5WX="plugins.url-parameters";H5ZZ.a3CX=80;H5ZZ.o8CX=37;k3dX.F23X="26";G3CX.M7CX=147;W3WX.n7WX="moz";G3CX.Q4CX="9";x3uX.j3dX="boolean";W3WX.h1WX="mouseup";f5WX.V5WX="[href]";x3uX.W7uX="180";A0UX.X4SX="0.25";W3WX.l0WX="plugins.io.mouse";f5WX.l3lX="3.75";f5WX.H4WX="game.entities.opening-shield";x3uX.c4LX="50";W3WX.v1WX="109";x3uX.v7uX="mouse";x3uX.o6uX="undefined";A0UX.t5UX="1E3";G3CX.t4CX="4";k3dX.R13X="1023";G3CX.l4CX="3";x3uX.b7uX="63";W3WX.C9WX="start";G3CX.U3CX=82;f5WX.a3lX="game.levels.main-menu";k3dX.B4dX="center";k3dX.b9dX="String";H5ZZ.J5RR=function (){return typeof H5ZZ.l5RR.x2v==='function'?H5ZZ.l5RR.x2v.apply(H5ZZ.l5RR,arguments):H5ZZ.l5RR.x2v;};W3WX.M1WX="190";A0UX.N5SX="0.01";W3WX.o2WX="plugins.handlers.size-handler";H5ZZ.M8CX=44;k3dX.q0UX="The game is ready in ";A0UX.h4SX="pageshow";G3CX.H3CX=86;A0UX.z0UX="http://google.com";A0UX.w8SX="<";f5WX.L8lX="game.toybox.objects.ui.buttons.slider-button";x3uX.b2rX="20";k3dX.t03X="y";function M6lX(){}k3dX.O9dX='audio/mpeg; codecs="mp3"';k3dX.P43X="#ffffff";f5WX.T7lX="game.levels.end";G3CX.u3uX="10";x3uX.F7uX="script";H5ZZ.t5RR=function (){return typeof H5ZZ.l5RR.z2v==='function'?H5ZZ.l5RR.z2v.apply(H5ZZ.l5RR,arguments):H5ZZ.l5RR.z2v;};W3WX.k0WX="plugins.io.gamepad";G3CX.s3uX=".5";A0UX.d5UX="-Box";H5ZZ.t8CX=16;A0UX.Q8SX="b";A0UX.f5UX="-Box-Header";A0UX.j4UX="i";A0UX.L0UX="BEST";W3WX.W1WX="crisp-edges";A0UX.G0SX="48";G3CX.u3CX=89;x3uX.x7uX="GET";A0UX.V8WX="webm";W3WX.I0WX="0.4";A0UX.Z0SX="27";k3dX.e93X="54";k3dX.d13X="136";W3WX.d0WX="webview";x3uX.Q6uX="none";H5ZZ.Z8v=function (){return typeof H5ZZ.e8v.K7o==='function'?H5ZZ.e8v.K7o.apply(H5ZZ.e8v,arguments):H5ZZ.e8v.K7o;};G3CX.Y4CX="8";k3dX.a0UX="Close";x3uX.C1uX="pointerout";f5WX.y3lX="game.entities.ui.character-select";G3CX.J7CX=159;H5ZZ.L8CX=39;H5ZZ.h8CX=46;function f5WX(){}H5ZZ.f8CX=11;A0UX.P8SX=">";x3uX.U7uX="64";W3WX.d9WX="plugins.handlers.api-handler";W3WX.Y2WX="plugins.handlers.dom-handler";G3CX.k4CX="0";M6lX.r6lX="plugins.fullscreen";x3uX.N3rX="DOMMouseScroll";G3CX.x3CX=92;f5WX.M5WX="2.5";k3dX.o4dX="?";H5ZZ.O8CX=12;k3dX.z83X="51";H5ZZ.S8CX=13;k3dX.f4dX="div";W3WX.t3WX="audio/mp4;";W3WX.m0WX="plugins.fake-storage";H5ZZ.f3CX=63;G3CX.V7CX=150;H5ZZ.P8CX=55;H5ZZ.V8CX=47;k3dX.r23X="88";A0UX.Q5UX="top";A0UX.D8SX="=";H5ZZ.e4XX=function (){return typeof H5ZZ.L4XX.K7o==='function'?H5ZZ.L4XX.K7o.apply(H5ZZ.L4XX,arguments):H5ZZ.L4XX.K7o;};W3WX.m9WX="plugins.audio.howler-player";A0UX.M8WX='audio/wav; codecs="1"';f5WX.Z8lX="0.6";k3dX.v23X="35";H5ZZ.P4XX=3;G3CX.r1CX=256;A0UX.q0SX="43";W3WX.S3WX="audio/x-m4a;";A0UX.P5UX="button";A0UX.j4SX=0.25;function A0UX(){}A0UX.g3SX="DOMContentLoaded";W3WX.W2WX="impact.background-map";k3dX.e9fX="base";x3uX.B1uX="60";k3dX.e43X="TextPlaneMaterial";A0UX.s8WX="audio/mpeg";H5ZZ.R5RR=function (){return typeof H5ZZ.l5RR.x2v==='function'?H5ZZ.l5RR.x2v.apply(H5ZZ.l5RR,arguments):H5ZZ.l5RR.x2v;};H5ZZ.I4XX=0;H5ZZ.d8CX=8;G3CX.K1CX=212;G3CX.E9CX=336;W3WX.V2WX="font-size";W3WX.B0WX="plugins.io.multitouch-input";f5WX.k3lX="game.entities.controllers.main-menu-controller";f5WX.R6lX="babylon.entities.game-camera";f5WX.X4WX="game.entities.buttons.button-branding-logo";x3uX.a2rX="22";k3dX.J7fX="Left";x3uX.X5LX="touch";H5ZZ.F5RR=function (){return typeof H5ZZ.l5RR.K7o==='function'?H5ZZ.l5RR.K7o.apply(H5ZZ.l5RR,arguments):H5ZZ.l5RR.K7o;};f5WX.F3lX="webgl control game";H5ZZ.n4XX=1;G3CX.c3CX=93;W3WX.M7WX=";";H5ZZ.Z8CX=23;k3dX.W8UX="red";H5ZZ.e8v=function(){var R7o=function(o7o,Q7o){var d7o=Q7o&0xffff;var j7o=Q7o-d7o;return(j7o*o7o|0)+(d7o*o7o|0)|0;},s7o=function(c7o,q7o,O7o){var J7o=0xcc9e2d51,L7o=0x1b873593;var t7o=O7o;var B7o=q7o&~0x3;for(var N7o=0;N7o>>17;i7o=R7o(i7o,L7o);t7o^=i7o;t7o=(t7o&0x7ffff)<<13|t7o>>>19;t7o=t7o*5+0xe6546b64|0;}i7o=0;switch(q7o%4){case 3:i7o=(c7o.s7yy(B7o+2)&0xff)<<16;case 2:i7o|=(c7o.s7yy(B7o+1)&0xff)<<8;case 1:i7o|=c7o.s7yy(B7o)&0xff;i7o=R7o(i7o,J7o);i7o=(i7o&0x1ffff)<<15|i7o>>>17;i7o=R7o(i7o,L7o);t7o^=i7o;}t7o^=q7o;t7o^=t7o>>>16;t7o=R7o(t7o,0x85ebca6b);t7o^=t7o>>>13;t7o=R7o(t7o,0xc2b2ae35);t7o^=t7o>>>16;return t7o;};return{K7o:s7o};}();W3WX.K2WX="impact.map";x3uX.V3rX="pointerup";A0UX.l4SX="0.75";H5ZZ.T4XX=function (){return typeof H5ZZ.L4XX.x2v==='function'?H5ZZ.L4XX.x2v.apply(H5ZZ.L4XX,arguments):H5ZZ.L4XX.x2v;};A0UX.p6SX="on";G3CX.c2CX=301;x3uX.X6rX="url";f5WX.h7lX="babylon.plugins.wgl-timer";A0UX.J4SX="application/x-shockwave-flash";G3CX.o3CX=88;x3uX.M3rX="mousewheel";H5ZZ.g5RR=function (){return typeof H5ZZ.l5RR.K7o==='function'?H5ZZ.l5RR.K7o.apply(H5ZZ.l5RR,arguments):H5ZZ.l5RR.K7o;};W3WX.n0WX="270";f5WX.d7lX="game.levels.webgl-game";W3WX.x6WX="impact.sound";k3dX.q9dX="px";W3WX.f3WX="audio/aac;";H5ZZ.k8CX=20;G3CX.O2CX=271;A0UX.i7SX="inherit";A0UX.N0UX="http://marketjs.com";W3WX.L2WX="960";f5WX.S4WX="plugins.clickable-div-layer";A0UX.M0UX="en";f5WX.g4WX="rgba(";function k3dX(){}x3uX.Z2rX="24";A0UX.W4UX="*";x3uX.j6uX="68";M6lX.N6lX="game.toybox.utils.random";f5WX.M8lX="game.entities.popup.settings-popup";k3dX.y8UX="yellow";x3uX.h3rX="pointerdown";A0UX.h0UX="166";k3dX.K6fX="Right";k3dX.p93X='"';k3dX.B1UX="_mesh";f5WX.g8lX="99999";H5ZZ.e8CX=40;G3CX.y4CX="oimo";A0UX.Z3SX="complete";k3dX.t9dX="running";x3uX.z3rX="keydown";G3CX.a2CX=287;A0UX.n0UX="seed: ";k3dX.R8UX="44";H5ZZ.g3CX=61;A0UX.c0UX="UNLOCKED NEW CHARACTER!";W3WX.q3WX="resume";G3CX.U9CX=342;H5ZZ.y8CX=10;x3uX.w7uX="'";x3uX.r7uX="400";G3CX.G6CX=184;A0UX.r7SX="get";W3WX.b9WX="plugins.audio.webaudio-music-player";H5ZZ.E8CX=25;f5WX.y7lX="game.entities.popup.gameplay-settings-popup";A0UX.N4SX="pagehide";G3CX.O7CX=115;x3uX.r1uX=/iPhone/i;H5ZZ.c8v=function (){return typeof H5ZZ.e8v.K7o==='function'?H5ZZ.e8v.K7o.apply(H5ZZ.e8v,arguments):H5ZZ.e8v.K7o;};x3uX.Y7uX="36";H5ZZ.a8CX=28;f5WX.L5WX="plugins.impact-storage";G3CX.b4CX="32";f5WX.T3lX="plugins.handlers.webgl-virtual-joystick-handler";G3CX.p7CX=135;A0UX.G2SX="scroll";x3uX.k6uX="83";G3CX.r6CX=204;G3CX.D0CX=480;x3uX.C2rX="17";A0UX.o5UX="type";k3dX.F43X="transparent";x3uX.i7uX="head";W3WX.E1WX="96";k3dX.k3fX="&";G3CX.C6CX=188;x3uX.k7uX="_";H5ZZ.n0zz=function (){return typeof H5ZZ.U0zz.K7o==='function'?H5ZZ.U0zz.K7o.apply(H5ZZ.U0zz,arguments):H5ZZ.U0zz.K7o;};function x3uX(){}G3CX.Q7CX=117;k3dX.m9dX="style";W3WX.X6WX="dom.ready";k3dX.d23X="postStep";H5ZZ.J4XX=4;x3uX.u7LX="default";f5WX.k8lX="1.2";G3CX.g9CX=320;A0UX.D3SX="loading";function W3WX(){}H5ZZ.F8CX=51;G3CX.Q9CX=325;f5WX.Q7lX="game.entities.webgl.webgl-control-gameplay";W3WX.i6WX="impact.timer";x3uX.G0uX="name";W3WX.O1WX="65";f5WX.O7lX="game.entities.ui.flying-score";f5WX.r5WX="0?9:6;break;case 9:G2v=w2v.r2HH(T2v,Q2v);S2v=G2v.length;return H5ZZ.c8v(G2v,S2v,Y2v);break;case 6:c0zz=T2v===null||T2v<=0?14:11;break;case 14:G2v=w2v.r2HH(0,w2v.length);S2v=G2v.length;return H5ZZ.c8v(G2v,S2v,Y2v);break;case 11:G2v=w2v.r2HH(w2v.length-T2v,w2v.length);S2v=G2v.length;return H5ZZ.c8v(G2v,S2v,Y2v);break;case 2:var G2v,S2v,w2v;!f2v&&(f2v=L2v([27,14,29,30,27,23,-55,29,34,25,14,24,15,-55,21,24,12,10,29,18,24,23,-55,-54,-26,-26,-55,-53,30,23,13,14,15,18,23,14,13,-53,-55,-24,-55,21,24,12,10,29,18,24,23,-41,17,24,28,29,23,10,22,14,-55,-29,-55,-53,-53,-28]));!d2v&&(d2v=L2v([27,14,29,30,27,23,-55,29,34,25,14,24,15,-55,21,24,12,10,29,18,24,23,-55,-54,-26,-26,-55,-53,30,23,13,14,15,18,23,14,13,-53,-55,-24,-55,21,24,12,10,29,18,24,23,-41,17,27,14,15,-55,-29,-55,-53,-53,-28]));w2v=O2v?d2v:f2v;c0zz=3;break;}}}function L2v(p2v){var H0zz=2;for(;H0zz!==5;){switch(H0zz){case 2:var c2v=4,t2v=function(){}.constructor;return t2v(new function(s2v){var r0zz=2;for(;r0zz!==1;){switch(r0zz){case 2:this.d=function(P2v){var W0zz=2;for(;W0zz!==8;){switch(W0zz){case 2:var h2v='';W0zz=1;break;case 4:h2v+=p2HH.s2HH(s2v[r2v]-P2v+91);W0zz=3;break;case 1:var r2v=0;W0zz=5;break;case 5:W0zz=r2v>A4XX[1]-A4XX[2];break;case 207:o4XX=A4XX[0]*(A4XX[3]-A4XX[2])/A4XX[1];break;case 254:o4XX=A4XX[0]*A4XX[1]*+A4XX[2];break;case 220:o4XX=+A4XX[1]*A4XX[0]-(A4XX[2]|A4XX[3]);break;case 164:o4XX=(A4XX[2]|A4XX[0])&A4XX[1];break;case 100:o4XX=(A4XX[3]/A4XX[2]-A4XX[0])*-A4XX[1]/A4XX[4];break;case 71:o4XX=(A4XX[2]-A4XX[1])*A4XX[0]/-A4XX[3]*A4XX[4];break;case 216:o4XX=-(A4XX[1]*A4XX[0])*A4XX[2];break;case 22:o4XX=A4XX[0]+ +A4XX[1];break;case 213:o4XX=A4XX[1]-(A4XX[2]*A4XX[0]*A4XX[4]+ +A4XX[3]);break;case 285:o4XX=+A4XX[1]!==A4XX[0];break;case 21:o4XX=A4XX[1]+(A4XX[0]-A4XX[2]);break;case 365:o4XX=-((A4XX[1]-A4XX[0])/A4XX[2]);break;case 171:o4XX=+A4XX[3]*A4XX[2]+A4XX[0]*A4XX[1];break;case 320:o4XX=-A4XX[3]*(+A4XX[1]/(A4XX[2]+A4XX[0]));break;case 311:o4XX=+A4XX[1]-(A4XX[2]+A4XX[0]);break;case 359:o4XX=A4XX[1]/A4XX[2]*A4XX[3]-A4XX[0];break;case 205:o4XX=A4XX[1]+A4XX[2]+(A4XX[3]|A4XX[0]);break;case 112:o4XX=A4XX[0]===A4XX[1];break;case 150:o4XX=A4XX[1]+(A4XX[3]+(A4XX[2]|A4XX[6]))+(A4XX[5]+ +A4XX[0])*A4XX[4];break;case 90:o4XX=A4XX[2]*A4XX[1]*(A4XX[3]+A4XX[0]);break;case 272:o4XX=(A4XX[0]+ +A4XX[2])%+A4XX[1];break;case 350:o4XX=((A4XX[1]+A4XX[4])/A4XX[2]-A4XX[5])*-A4XX[3]/A4XX[0];break;case 332:o4XX=A4XX[5]+(A4XX[0]-A4XX[6])*((A4XX[1]-A4XX[3])/(A4XX[2]-A4XX[4]));break;case 134:o4XX=A4XX[1]instanceof A4XX[0];break;case 211:o4XX=A4XX[0]+A4XX[3]/(A4XX[2]*A4XX[1]+A4XX[4]);break;case 48:o4XX=A4XX[0]/A4XX[1]+A4XX[2];break;case 281:o4XX=+A4XX[1]*(A4XX[0]+ +A4XX[2])+A4XX[3];break;case 328:o4XX=A4XX[0]/(A4XX[1]|A4XX[6])*A4XX[2]*((A4XX[3]-A4XX[8])*A4XX[7]*A4XX[4]+A4XX[10]*A4XX[5]*A4XX[11]*A4XX[9]);break;case 141:o4XX=(A4XX[1]+ +A4XX[0])%A4XX[2];break;case 289:o4XX=A4XX[1]-(A4XX[2]|A4XX[0]);break;case 371:o4XX=(A4XX[4]&(A4XX[0]|A4XX[6]))<<(A4XX[1]|A4XX[2])|A4XX[3]>>>A4XX[5];break;case 183:o4XX=A4XX[2]*A4XX[0]-A4XX[3]+A4XX[4]+A4XX[1];break;case 209:o4XX=(-A4XX[3]-A4XX[2])*A4XX[4]*A4XX[1]+A4XX[0];break;case 86:o4XX=-+A4XX[1]*A4XX[0];break;case 194:o4XX=(-A4XX[1]-A4XX[2])/((A4XX[0]|A4XX[3])*A4XX[4]);break;case 89:o4XX=A4XX[1]*A4XX[2]-A4XX[0]*(A4XX[3]+A4XX[4]);break;case 362:o4XX=A4XX[1]&A4XX[2]-A4XX[0];break;case 286:o4XX=+A4XX[0]+A4XX[1];break;case 200:o4XX=+A4XX[0]*A4XX[2]-+A4XX[1];break;case 36:o4XX=A4XX[4]/A4XX[3]*A4XX[0]-A4XX[1]+A4XX[2];break;case 360:o4XX=(A4XX[0]-A4XX[2])*A4XX[3]*A4XX[4]-A4XX[1];break;case 190:o4XX=A4XX[3]*A4XX[1]*A4XX[2]*A4XX[0];break;case 312:o4XX=+A4XX[4]/(A4XX[7]*A4XX[8]+A4XX[1]*A4XX[0]+A4XX[5]*A4XX[6]+A4XX[3]*A4XX[2]);break;case 103:o4XX=A4XX[1]*(A4XX[3]-A4XX[0])+A4XX[2];break;case 69:o4XX=(A4XX[0]|A4XX[1])*A4XX[2];break;case 347:o4XX=A4XX[0]*A4XX[1]*A4XX[2]*A4XX[3]*A4XX[4]+ +A4XX[5];break;case 223:o4XX=+A4XX[0]*(A4XX[2]+A4XX[4]*A4XX[1]+A4XX[3]*A4XX[5]*A4XX[6]);break;case 53:o4XX=(A4XX[4]+A4XX[2]+A4XX[0])*A4XX[1]-A4XX[3];break;case 11:o4XX=A4XX[0]+A4XX[2]*A4XX[1];break;case 87:o4XX=A4XX[1]*A4XX[0]+A4XX[2];break;case 291:o4XX=A4XX[0]==A4XX[1];break;case 229:o4XX=-A4XX[0]-A4XX[1];break;case 280:o4XX=+A4XX[4]*(A4XX[3]+ +A4XX[2])+(A4XX[0]|A4XX[1]);break;case 176:o4XX=(+A4XX[1]&A4XX[3])>>(A4XX[0]|A4XX[2]);break;case 269:o4XX=(A4XX[3]*A4XX[1]/A4XX[4]+A4XX[2])/A4XX[0];break;case 44:o4XX=-(A4XX[3]*A4XX[1])*A4XX[0]+ +A4XX[4]*A4XX[2];break;case 8:o4XX=A4XX[0]+A4XX[1]+A4XX[2];break;case 13:o4XX=A4XX[1]*A4XX[2]-A4XX[0]+-A4XX[3];break;case 159:o4XX=A4XX[0]/A4XX[2]*A4XX[1];break;case 29:o4XX=A4XX[1]/A4XX[0]-A4XX[2];break;case 34:o4XX=(A4XX[0]-A4XX[3])*-A4XX[2]/A4XX[1];break;case 296:o4XX=A4XX[1]*(A4XX[3]-+A4XX[2])>>+A4XX[0];break;case 37:o4XX=(A4XX[4]+A4XX[1])*A4XX[2]-A4XX[3]+A4XX[0];break;case 19:o4XX=A4XX[0]/+A4XX[1];break;case 68:o4XX=A4XX[1]*A4XX[3]-A4XX[4]+-A4XX[0]+-A4XX[2];break;case 307:o4XX=A4XX[1]+A4XX[2]*A4XX[3]*A4XX[0];break;case 105:o4XX=A4XX[2]+(A4XX[0]-A4XX[3])*A4XX[1];break;case 302:o4XX=+A4XX[3]/(A4XX[2]*(+A4XX[1]+(A4XX[4]-A4XX[5])*A4XX[0]));break;case 317:o4XX=+A4XX[0]*A4XX[2]*A4XX[3]-A4XX[1]*A4XX[4]*A4XX[6]*A4XX[5];break;case 344:o4XX=-A4XX[0]*(A4XX[3]-(A4XX[2]-A4XX[1]));break;case 323:o4XX=(A4XX[0]|A4XX[8])/+A4XX[11]*A4XX[5]*((A4XX[10]-A4XX[7])*A4XX[4]*A4XX[6]+(A4XX[3]|A4XX[1])*A4XX[9]*A4XX[2]);break;case 154:o4XX=(A4XX[1]-A4XX[0])*A4XX[3]/-A4XX[2];break;case 158:o4XX=(A4XX[1]|A4XX[3])*A4XX[0]+A4XX[2];break;case 67:o4XX=(A4XX[6]-A4XX[5])/(A4XX[9]*A4XX[0]+A4XX[7]*A4XX[1]+A4XX[4]*A4XX[2]+A4XX[3]*A4XX[8]);break;case 169:o4XX=(A4XX[3]|A4XX[0])*A4XX[1]+(A4XX[2]|A4XX[4]);break;case 3:o4XX=A4XX[3]+A4XX[2]+A4XX[1]+A4XX[0];break;case 76:o4XX=(A4XX[0]+A4XX[1])/(A4XX[3]-A4XX[2]);break;case 182:o4XX=(A4XX[1]+A4XX[3]+A4XX[0])/A4XX[2];break;case 336:o4XX=!+A4XX[0]!==A4XX[1];break;case 201:o4XX=+A4XX[1]*A4XX[0]-A4XX[2];break;case 189:o4XX=(+A4XX[0]-A4XX[1])/A4XX[5]+A4XX[3]*A4XX[4]*A4XX[2];break;case 96:o4XX=A4XX[0]*(A4XX[3]*A4XX[1]-A4XX[2])-A4XX[4];break;case 55:o4XX=A4XX[4]*A4XX[5]+A4XX[6]*A4XX[1]+A4XX[2]*A4XX[3]+A4XX[0]*A4XX[7];break;case 2:o4XX=A4XX[1]-A4XX[0];break;case 145:o4XX=A4XX[2]+(A4XX[0]+ +A4XX[1])*A4XX[3];break;case 57:o4XX=+A4XX[0]*A4XX[1];break;case 298:o4XX=(A4XX[2]-A4XX[1])*A4XX[0]|+A4XX[3];break;case 43:o4XX=+A4XX[0]*A4XX[1]-A4XX[3]*A4XX[5]+A4XX[4]*A4XX[2];break;case 56:o4XX=A4XX[1]*A4XX[2]-A4XX[0]*A4XX[3];break;case 242:o4XX=A4XX[1]>>A4XX[3]*A4XX[2]&+A4XX[0];break;case 122:o4XX=A4XX[2]*A4XX[1]*(A4XX[3]-A4XX[0]);break;case 129:o4XX=A4XX[1]*A4XX[2]!=A4XX[0];break;case 24:o4XX=A4XX[1]*A4XX[0]/A4XX[3]/A4XX[2];break;case 271:o4XX=(A4XX[2]+A4XX[1])*A4XX[0]/A4XX[3]*A4XX[4];break;case 101:o4XX=A4XX[0]-A4XX[1]*A4XX[2];break;case 243:o4XX=A4XX[0]>>A4XX[2]-A4XX[3]&+A4XX[1];break;case 297:o4XX=(A4XX[3]-A4XX[4]+-A4XX[0])*-A4XX[2]/A4XX[1];break;case 131:o4XX=A4XX[2]/(A4XX[3]|A4XX[0])*+A4XX[1];break;case 148:o4XX=A4XX[0]+A4XX[3]+A4XX[1]*A4XX[2];break;case 322:o4XX=-A4XX[1]-A4XX[0]+A4XX[2]+A4XX[3];break;case 355:o4XX=A4XX[2]/A4XX[0]-A4XX[1]/A4XX[3];break;case 40:o4XX=(A4XX[1]*A4XX[2]-A4XX[3])/A4XX[0];break;case 166:o4XX=(A4XX[3]&A4XX[0])>>(A4XX[2]|A4XX[1]);break;case 124:o4XX=A4XX[1]-A4XX[3]+-A4XX[0]+A4XX[2];break;case 333:o4XX=A4XX[0]|+A4XX[1];break;case 265:o4XX=(A4XX[1]|A4XX[2])/+A4XX[0];break;case 110:o4XX=A4XX[0]*A4XX[1]-A4XX[2];break;case 329:o4XX=(A4XX[5]-A4XX[4])/(A4XX[1]-A4XX[10])*A4XX[3]*(+A4XX[6]*A4XX[7]*A4XX[0]+ +A4XX[8]*A4XX[2]*A4XX[9]);break;case 50:o4XX=A4XX[0]/A4XX[1]*+A4XX[3]-+A4XX[2];break;case 301:o4XX=-A4XX[0]*A4XX[1]-A4XX[4]*A4XX[2]-A4XX[3]*A4XX[5];break;case 60:o4XX=A4XX[3]*A4XX[2]*A4XX[0]-A4XX[1]*A4XX[5]*A4XX[4];break;case 180:o4XX=+A4XX[3]+A4XX[1]*A4XX[4]+A4XX[0]*A4XX[2];break;case 25:o4XX=A4XX[1]*A4XX[2]/A4XX[0];break;case 133:o4XX=A4XX[2]+A4XX[4]+A4XX[1]+A4XX[3]+A4XX[0];break;case 35:o4XX=(-A4XX[0]-A4XX[3]+A4XX[1])*-A4XX[2]/A4XX[4];break;case 137:o4XX=(A4XX[0]/A4XX[2]+A4XX[1])*A4XX[4]-A4XX[3];break;case 246:o4XX=(+A4XX[0]&A4XX[1])>>+A4XX[2];break;case 130:o4XX=A4XX[3]/A4XX[4]/A4XX[0]*A4XX[2]-A4XX[1];break;case 120:o4XX=A4XX[3]*(A4XX[0]*A4XX[2]+A4XX[1]);break;case 94:o4XX=A4XX[1]/A4XX[0]-A4XX[2]+A4XX[3];break;case 142:o4XX=A4XX[1]*A4XX[4]/A4XX[0]-A4XX[3]/(A4XX[2]*A4XX[5]);break;case 338:o4XX=-A4XX[1]/A4XX[0];break;case 146:o4XX=A4XX[0]+(A4XX[3]+A4XX[1])*A4XX[2];break;case 206:o4XX=+A4XX[0]*A4XX[2]+ +A4XX[1];break;case 63:o4XX=(A4XX[4]-A4XX[6])*A4XX[5]-A4XX[2]*A4XX[0]+(A4XX[1]|A4XX[3]);break;case 314:o4XX=A4XX[2]*A4XX[4]+A4XX[1]*-A4XX[5]+A4XX[6]*-A4XX[7]-A4XX[3]*-A4XX[0];break;case 263:o4XX=A4XX[2]*A4XX[3]*A4XX[1]+A4XX[0];break;case 93:o4XX=A4XX[0]-A4XX[3]+A4XX[2]+A4XX[1];break;case 278:o4XX=(A4XX[0]-A4XX[3])*A4XX[2]+(A4XX[4]-A4XX[1]);break;case 125:o4XX=A4XX[0]*A4XX[3]+(A4XX[2]|A4XX[1]);break;case 222:o4XX=(A4XX[0]-(A4XX[2]|A4XX[3]))/A4XX[1];break;case 255:o4XX=(A4XX[4]|A4XX[6])*((+A4XX[5]&A4XX[3])>>+A4XX[2])/A4XX[1]|+A4XX[0];break;case 139:o4XX=(A4XX[0]-A4XX[4]+A4XX[2])*-A4XX[1]/A4XX[3];break;case 369:o4XX=(A4XX[4]-A4XX[0]+A4XX[3])/A4XX[2]+A4XX[5]/A4XX[1];break;case 339:o4XX=A4XX[0]+A4XX[2]-A4XX[1];break;case 23:o4XX=(A4XX[1]|A4XX[2])/A4XX[0];break;case 160:o4XX=A4XX[1]*(+A4XX[3]+A4XX[2])*(A4XX[4]*A4XX[0])*A4XX[5];break;case 249:o4XX=(A4XX[4]|A4XX[0])*(A4XX[1]+A4XX[2]*A4XX[3]);break;case 128:o4XX=(A4XX[0]+A4XX[3])*A4XX[1]-A4XX[4]+-A4XX[2];break;case 372:o4XX=A4XX[1]>>>A4XX[0]-A4XX[2];break;case 161:o4XX=A4XX[3]*((A4XX[1]|A4XX[0])+A4XX[2])*A4XX[4]*(A4XX[5]-A4XX[6]);break;case 181:o4XX=-(A4XX[0]*A4XX[2])-A4XX[1]+A4XX[3];break;case 221:o4XX=-A4XX[7]*A4XX[3]/(A4XX[4]/+A4XX[2]*+A4XX[0]*((A4XX[1]|A4XX[5])/+A4XX[6]));break;case 92:o4XX=+A4XX[1]-(A4XX[3]|A4XX[4])*(A4XX[2]+A4XX[0]);break;case 247:o4XX=+A4XX[0]*(A4XX[3]+A4XX[1]*A4XX[2]);break;case 358:o4XX=A4XX[2]-A4XX[1]*A4XX[4]+A4XX[0]+A4XX[3];break;case 218:o4XX=+A4XX[0]/+A4XX[1];break;case 258:o4XX=+A4XX[1]*(A4XX[0]+A4XX[4]*A4XX[3])+ +A4XX[2];break;case 85:o4XX=-(A4XX[2]|A4XX[0])*A4XX[1];break;case 368:o4XX=A4XX[4]*A4XX[5]+A4XX[2]*A4XX[1]|A4XX[0]*A4XX[3];break;case 59:o4XX=A4XX[5]*A4XX[1]*A4XX[4]+A4XX[0]*A4XX[2]*A4XX[3];break;case 273:o4XX=A4XX[1]-A4XX[2]<=A4XX[0];break;case 147:o4XX=A4XX[1]*(A4XX[0]+A4XX[3])-A4XX[2];break;case 237:o4XX=(A4XX[3]-A4XX[2]+A4XX[4])/A4XX[0]+A4XX[1];break;case 325:o4XX=(A4XX[7]|A4XX[6])/(A4XX[8]-A4XX[4])*A4XX[2]*(A4XX[11]*A4XX[1]*A4XX[3]+A4XX[0]*A4XX[5]*A4XX[9]*A4XX[10]);break;case 227:o4XX=(A4XX[4]*A4XX[0]+A4XX[7]*A4XX[3]-A4XX[1]*A4XX[5])/((A4XX[8]|A4XX[6])*A4XX[2]*A4XX[9]);break;case 251:o4XX=A4XX[4]*A4XX[0]*(A4XX[3]+A4XX[2]*A4XX[1]);break;case 234:o4XX=A4XX[3]*A4XX[1]*(A4XX[5]|A4XX[6])+ +A4XX[0]*A4XX[2]+ +A4XX[4];break;case 74:o4XX=+A4XX[0]/(A4XX[2]-A4XX[1]);break;case 155:o4XX=A4XX[4]*-A4XX[2]/A4XX[1]/A4XX[0]/-A4XX[5]^A4XX[3];break;case 373:o4XX=A4XX[0]>>>A4XX[1];break;case 18:o4XX=A4XX[2]/(A4XX[0]*A4XX[1]);break;case 343:o4XX=(-A4XX[2]-A4XX[0]+A4XX[3])/-A4XX[1];break;case 113:o4XX=A4XX[3]+(A4XX[2]-A4XX[0]-A4XX[1])*A4XX[4];break;case 1:o4XX=A4XX[1]|A4XX[0];break;case 366:o4XX=(A4XX[1]&A4XX[4]*A4XX[5])<<+A4XX[3]|A4XX[0]>>>+A4XX[2];break;case 239:o4XX=A4XX[2]*A4XX[3]*A4XX[0]-A4XX[1];break;case 306:o4XX=(A4XX[1]-A4XX[3]+-A4XX[2])/-A4XX[0];break;case 172:o4XX=A4XX[1]&A4XX[0];break;case 62:o4XX=+A4XX[0]*(A4XX[1]-A4XX[2]);break;case 331:o4XX=A4XX[3]+A4XX[1]/(A4XX[2]|A4XX[0]);break;case 4:o4XX=A4XX[1]/A4XX[2]*A4XX[0]/A4XX[3];break;case 39:o4XX=(A4XX[0]+A4XX[2])/A4XX[1];break;case 184:o4XX=-A4XX[1]*A4XX[0];break;case 295:o4XX=(A4XX[2]*(A4XX[3]+ +A4XX[1])>>(A4XX[4]|A4XX[5]))+A4XX[0]-A4XX[6];break;case 364:o4XX=A4XX[0]&~(A4XX[2]|A4XX[1]);break;case 152:o4XX=A4XX[0]/A4XX[1]/A4XX[2]^A4XX[3];break;case 266:o4XX=+A4XX[0]/(A4XX[2]*A4XX[1]);break;case 367:o4XX=(A4XX[1]&+A4XX[3])<<+A4XX[0]|A4XX[4]>>>+A4XX[2];break;case 230:o4XX=(A4XX[2]|A4XX[3])*A4XX[0]+(A4XX[1]-A4XX[4]);break;case 81:o4XX=-A4XX[2]/(A4XX[0]-A4XX[1]);break;case 253:o4XX=A4XX[1]*(A4XX[0]-(A4XX[4]-A4XX[2]))+A4XX[3];break;case 330:o4XX=A4XX[3]/(A4XX[1]-A4XX[2])*A4XX[6]*(+A4XX[7]*A4XX[8]*A4XX[4]+A4XX[0]*A4XX[5]*A4XX[9]);break;case 252:o4XX=-(A4XX[1]*A4XX[3])-A4XX[2]+A4XX[0]+A4XX[4];break;case 114:o4XX=A4XX[3]*(-(A4XX[4]*A4XX[0])-A4XX[2])+A4XX[1];break;case 109:o4XX=(A4XX[2]/A4XX[3]+A4XX[1])*A4XX[4]/A4XX[0];break;case 303:o4XX=+A4XX[3]*A4XX[0]/(A4XX[2]*A4XX[1]+(A4XX[5]|A4XX[6])*A4XX[4]);break;case 198:o4XX=+A4XX[0]*A4XX[1]+(A4XX[3]|A4XX[2]);break;case 340:o4XX=A4XX[1]%A4XX[0];break;case 132:o4XX=A4XX[1]-A4XX[2]+ +A4XX[0];break;case 259:o4XX=(A4XX[1]|A4XX[0])*(A4XX[2]+A4XX[3]*A4XX[5])+ +A4XX[4];break;case 99:o4XX=A4XX[0]*(-A4XX[2]-A4XX[1]+-A4XX[3])/-A4XX[4];break;case 116:o4XX=A4XX[0]!=A4XX[1];break;case 262:o4XX=+A4XX[2]-(A4XX[1]+ +A4XX[0])%(A4XX[3]*A4XX[4]);break;case 270:o4XX=-A4XX[0];break;case 283:o4XX=-(A4XX[0]|A4XX[1])/A4XX[2];break;case 72:o4XX=A4XX[2]*A4XX[1]/(A4XX[0]-A4XX[3]);break;case 28:o4XX=A4XX[3]-+A4XX[2]*A4XX[0]+A4XX[1];break;case 9:o4XX=(A4XX[0]-A4XX[1])%A4XX[2];break;case 31:o4XX=+A4XX[1]/A4XX[0];break;case 250:o4XX=(A4XX[2]-A4XX[3])*(A4XX[4]+A4XX[0]*A4XX[1]);break;case 257:o4XX=A4XX[0]*A4XX[5]*(A4XX[3]+A4XX[2]*A4XX[1])+A4XX[4]*A4XX[6];break;case 97:o4XX=A4XX[1]*A4XX[4]*A4XX[0]-A4XX[2]+A4XX[3];break;case 27:o4XX=-(A4XX[4]-A4XX[2])*A4XX[0]+(A4XX[1]|A4XX[5])*A4XX[3];break;case 170:o4XX=A4XX[2]*A4XX[1]*A4XX[0]+(A4XX[3]|A4XX[4]);break;case 232:o4XX=(A4XX[1]|A4XX[0])*A4XX[3]+ +A4XX[2];break;case 352:o4XX=A4XX[2]+ +A4XX[0]<>A4XX[4]*A4XX[2])-A4XX[3];break;case 321:o4XX=A4XX[3]*(-A4XX[1]-A4XX[2]+A4XX[0]);break;case 224:o4XX=A4XX[0]*(A4XX[1]-A4XX[2]);break;case 245:o4XX=(A4XX[2]&A4XX[1])>>+A4XX[0];break;case 102:o4XX=(A4XX[2]-A4XX[3])/(A4XX[1]-A4XX[0]);break;case 119:o4XX=(A4XX[1]|A4XX[0])-A4XX[3]/A4XX[2];break;case 277:o4XX=A4XX[3]*A4XX[2]*A4XX[0]+A4XX[1]*A4XX[4];break;case 107:o4XX=(A4XX[3]-A4XX[0])*A4XX[1]+A4XX[2];break;case 33:o4XX=-A4XX[2]-A4XX[1]+A4XX[0];break;case 111:o4XX=A4XX[3]*(A4XX[1]*A4XX[5]-A4XX[2])+A4XX[4]*A4XX[0];break;case 136:o4XX=A4XX[3]+(A4XX[2]*A4XX[0]+A4XX[4])*A4XX[1];break;case 287:o4XX=A4XX[0]+ +A4XX[1]*A4XX[2];break;case 292:o4XX=A4XX[0]===A4XX[2]!==A4XX[1];break;case 342:o4XX=-(A4XX[2]*(A4XX[1]-A4XX[0]));break;case 316:o4XX=+A4XX[4]-(A4XX[2]|A4XX[0])*A4XX[3]*A4XX[5]-A4XX[1]*A4XX[6];break;case 173:o4XX=(A4XX[2]&A4XX[1])>>A4XX[0];break;case 274:o4XX=(A4XX[2]+A4XX[3]*A4XX[1])%+A4XX[0];break;case 54:o4XX=A4XX[1]+(A4XX[2]|A4XX[0]);break;case 235:o4XX=A4XX[2]*A4XX[1]*(A4XX[7]|A4XX[4])+ +A4XX[0]*A4XX[3]+A4XX[5]*A4XX[6];break;case 84:o4XX=A4XX[2]+A4XX[1]/(A4XX[3]-A4XX[0]);break;case 15:o4XX=-(A4XX[1]/-A4XX[0]);break;case 126:o4XX=+A4XX[0]*A4XX[2]+A4XX[1];break;case 233:o4XX=A4XX[1]*A4XX[6]*(A4XX[3]*A4XX[2])+ +A4XX[5]*A4XX[4]+ +A4XX[0];break;case 346:o4XX=A4XX[0]*A4XX[1]*A4XX[2]*A4XX[3]-A4XX[4]*A4XX[5];break;case 127:o4XX=A4XX[1]*A4XX[0]/+A4XX[2];break;case 20:o4XX=A4XX[2]/(A4XX[1]*A4XX[0])*(A4XX[3]-A4XX[4]);break;case 215:o4XX=-(A4XX[0]-A4XX[1])*A4XX[2];break;case 326:o4XX=(-A4XX[0]-A4XX[1]+-A4XX[3])/-A4XX[2];break;case 261:o4XX=(A4XX[14]&A4XX[9])<>A4XX[5]*A4XX[11]&(A4XX[2]|A4XX[16])|A4XX[0]>>A4XX[12]*A4XX[3]&+A4XX[1];break;case 98:o4XX=(A4XX[1]*(A4XX[9]*A4XX[7])+A4XX[12]*A4XX[2]+A4XX[13]*A4XX[4]-A4XX[3])*(A4XX[14]*A4XX[10]/(+A4XX[6]*A4XX[11]*A4XX[8]+ +A4XX[0]*A4XX[15]*A4XX[5]+A4XX[16]));break;case 123:o4XX=A4XX[2]*A4XX[1]*A4XX[0];break;case 7:o4XX=A4XX[1]+A4XX[0];break;case 214:o4XX=(A4XX[0]|A4XX[1])-A4XX[2]*A4XX[3];break;case 203:o4XX=(A4XX[2]+A4XX[0])*(A4XX[1]+ +A4XX[4])*+A4XX[3];break;case 275:o4XX=(A4XX[3]+(A4XX[1]|A4XX[0]))%+A4XX[2];break;case 187:o4XX=(A4XX[2]+A4XX[1])*A4XX[0]-A4XX[3];break;case 310:o4XX=A4XX[2]-A4XX[3]-(A4XX[1]+A4XX[0]);break;case 95:o4XX=(A4XX[0]-A4XX[2])*A4XX[1]/A4XX[3];break;case 363:o4XX=(A4XX[1]*A4XX[5]|+A4XX[6])+(A4XX[0]*A4XX[2]|A4XX[4])|A4XX[7]-A4XX[3];break;case 12:o4XX=A4XX[0]*A4XX[3]/(A4XX[1]*A4XX[2]);break;case 5:o4XX=(A4XX[1]-A4XX[2])%A4XX[0]*A4XX[3];break;case 288:o4XX=A4XX[0]+A4XX[3]-(A4XX[2]|A4XX[1]);break;case 308:o4XX=(A4XX[3]-A4XX[0]*A4XX[2])/-A4XX[1];break;case 217:o4XX=A4XX[2]-A4XX[0]*(A4XX[1]+A4XX[3]);break;case 210:o4XX=(A4XX[2]+A4XX[1])*A4XX[0]/A4XX[3];break;case 6:o4XX=(A4XX[3]-A4XX[4])*A4XX[0]-A4XX[1]+A4XX[2];break;case 143:o4XX=(A4XX[5]-A4XX[2])*A4XX[1]/A4XX[3]-A4XX[4]/(A4XX[0]*A4XX[6]);break;case 144:o4XX=+A4XX[0]-A4XX[2]/A4XX[1];break;case 167:o4XX=A4XX[0]>>A4XX[1];break;case 304:o4XX=A4XX[6]/(A4XX[3]*A4XX[5]*A4XX[2]*((A4XX[0]|A4XX[8])+A4XX[4]*A4XX[1]*A4XX[7]));break;case 202:o4XX=A4XX[0]*(A4XX[1]+(A4XX[3]|A4XX[2]))*A4XX[4];break;case 115:o4XX=(-(A4XX[3]*A4XX[4])-A4XX[2])*A4XX[1]/-A4XX[0];break;case 188:o4XX=+A4XX[0]-A4XX[1];break;case 138:o4XX=(A4XX[2]-A4XX[1])/+A4XX[0]/A4XX[3];break;case 118:o4XX=(A4XX[3]+A4XX[0])*-A4XX[2]/A4XX[5]/A4XX[4]+A4XX[6]/A4XX[1];break;case 256:o4XX=+A4XX[0]*(A4XX[2]*A4XX[6]&A4XX[7])/(A4XX[5]-A4XX[3])|A4XX[4]-A4XX[1];break;case 52:o4XX=A4XX[2]*A4XX[3]+A4XX[5]*A4XX[0]+A4XX[4]*A4XX[1];break;case 17:o4XX=A4XX[0]/(A4XX[1]-A4XX[2]);break;case 300:o4XX=A4XX[1]-A4XX[2]*A4XX[3]*A4XX[0];break;case 208:o4XX=(-A4XX[2]-A4XX[1])/-A4XX[0];break;case 267:o4XX=A4XX[2]*A4XX[0]+ +A4XX[1]*A4XX[3]+A4XX[4];break;case 225:o4XX=A4XX[2]*(+A4XX[1]-A4XX[0]*A4XX[3]);break;case 0:o4XX=A4XX[1]*A4XX[0];break;case 348:o4XX=A4XX[2]*A4XX[4]*(A4XX[0]*A4XX[3]-+A4XX[1]);break;case 240:o4XX=(A4XX[0]+A4XX[1])%A4XX[2];break;case 61:o4XX=+A4XX[2]*(A4XX[0]+A4XX[1]);break;case 264:o4XX=A4XX[5]+(A4XX[0]-A4XX[4])*(A4XX[6]-A4XX[1]/(A4XX[2]*A4XX[3]));break;case 83:o4XX=-A4XX[1]/(A4XX[2]|A4XX[0]);break;case 197:o4XX=A4XX[3]*-A4XX[2]+A4XX[0]*A4XX[1];break;case 108:o4XX=(A4XX[3]+A4XX[1])/A4XX[2]-A4XX[0];break;case 318:o4XX=+A4XX[0]-A4XX[3]*A4XX[1]-+A4XX[4]*A4XX[2];break;case 175:o4XX=+A4XX[0]&A4XX[1];break;case 41:o4XX=(A4XX[0]-A4XX[3]+A4XX[2]+A4XX[4])/A4XX[1];break;case 30:o4XX=A4XX[3]*A4XX[2]+A4XX[0]*A4XX[1];break;case 38:o4XX=A4XX[2]-A4XX[1]+-A4XX[0];break;case 168:o4XX=(A4XX[4]-A4XX[0])*A4XX[3]+(A4XX[1]|A4XX[2]);break;case 77:o4XX=A4XX[0]/(A4XX[1]+A4XX[2]);break;case 162:o4XX=(A4XX[4]+(A4XX[2]-A4XX[1]))*A4XX[3]+A4XX[0];break;case 228:o4XX=(A4XX[2]*A4XX[0]+A4XX[1]*A4XX[3]-A4XX[8]*A4XX[5])/(+A4XX[7]*A4XX[6]*A4XX[4]);break;case 79:o4XX=(A4XX[2]-A4XX[4])*A4XX[1]*(A4XX[3]*A4XX[0]);break;case 78:o4XX=A4XX[3]*A4XX[0]/(A4XX[1]+A4XX[2]);break;case 151:o4XX=A4XX[3]+A4XX[1]+(A4XX[4]+A4XX[0])*A4XX[2];break;case 334:o4XX=A4XX[1]+A4XX[0]+A4XX[5]+A4XX[4]+A4XX[3]+A4XX[2];break;case 70:o4XX=(A4XX[0]|A4XX[1])-A4XX[2];break;case 345:o4XX=A4XX[0]*A4XX[1]*A4XX[2]+ +A4XX[3];break;case 313:o4XX=A4XX[1]*A4XX[0]+A4XX[2]*A4XX[5]-A4XX[3]*A4XX[4];break;case 186:o4XX=A4XX[2]/A4XX[0]>>+A4XX[1];break;case 349:o4XX=A4XX[0]*A4XX[1]*(A4XX[2]*A4XX[3]*A4XX[4]+A4XX[5])+(A4XX[6]|A4XX[7]);break;case 293:o4XX=A4XX[1]in A4XX[0];break;case 64:o4XX=A4XX[1]*(A4XX[2]/A4XX[4]+A4XX[0])-A4XX[3];break;case 241:o4XX=A4XX[0]-A4XX[1]===A4XX[2];break;case 244:o4XX=A4XX[2]>>A4XX[0]-A4XX[1]&A4XX[4]-A4XX[3];break;case 80:o4XX=-(A4XX[3]-A4XX[4])*A4XX[1]*(A4XX[0]-A4XX[2]);break;case 165:o4XX=(A4XX[2]*A4XX[1]&A4XX[0])>>A4XX[3];break;case 327:o4XX=(A4XX[2]-A4XX[0]+A4XX[1])*A4XX[3]/A4XX[4];break;case 153:o4XX=-A4XX[0]-A4XX[2]+-A4XX[3]+A4XX[1];break;case 46:o4XX=-A4XX[1]/+A4XX[0];break;case 88:o4XX=A4XX[1]*A4XX[0]+ +A4XX[2];break;case 192:o4XX=+A4XX[3]*A4XX[2]*(A4XX[1]*A4XX[0]);break;case 341:o4XX=A4XX[0]!==A4XX[1];break;case 82:o4XX=-+A4XX[4]*A4XX[3]*A4XX[1]/(A4XX[2]-A4XX[0]);break;case 135:o4XX=A4XX[2]+A4XX[1]+A4XX[4]+A4XX[3]+A4XX[6]+A4XX[5]+A4XX[0];break;case 32:o4XX=(A4XX[3]-A4XX[2]+-A4XX[1]+-A4XX[4])*-A4XX[5]/A4XX[0];break;case 195:o4XX=(-A4XX[1]+A4XX[3])/((A4XX[0]-A4XX[4])*A4XX[2]);break;case 75:o4XX=(A4XX[0]|A4XX[1])/(A4XX[3]-A4XX[2]);break;case 104:o4XX=A4XX[0]*A4XX[1]+A4XX[2]*(A4XX[3]-A4XX[4]);break;case 49:o4XX=A4XX[3]/A4XX[1]*A4XX[2]-A4XX[0]*A4XX[4];break;case 260:o4XX=+A4XX[3]*(A4XX[5]+A4XX[2]*A4XX[4])+(A4XX[1]-A4XX[0]);break;case 58:o4XX=(A4XX[2]-A4XX[1])*A4XX[0];break;case 185:o4XX=A4XX[0]*(A4XX[1]/(A4XX[2]*A4XX[3]));break;case 121:o4XX=+A4XX[0]*(A4XX[1]*A4XX[2]+A4XX[3]);break;case 279:o4XX=(A4XX[3]-A4XX[2])*(A4XX[0]+ +A4XX[1]);break;case 231:o4XX=(A4XX[3]-A4XX[0])*A4XX[1]+ +A4XX[2];break;case 163:o4XX=(A4XX[0]+A4XX[3])*A4XX[1]+A4XX[2];break;case 140:o4XX=A4XX[1]-A4XX[2]-A4XX[3]/A4XX[0];break;case 226:o4XX=A4XX[0]*(A4XX[2]-A4XX[3]*(+A4XX[4]-A4XX[1]));break;case 354:o4XX=A4XX[3]/+A4XX[1]-A4XX[0]/A4XX[2];break;case 149:o4XX=A4XX[4]+(A4XX[1]+ +A4XX[3])+A4XX[0]*A4XX[2];break;case 212:o4XX=(A4XX[2]-A4XX[3]+A4XX[0])/A4XX[1];break;case 193:o4XX=A4XX[0]*A4XX[4]-A4XX[1]*A4XX[2]*A4XX[3];break;case 335:o4XX=(A4XX[4]+A4XX[0])/A4XX[3]*A4XX[2]*A4XX[1];break;case 178:o4XX=A4XX[1]>>+A4XX[0];break;case 179:o4XX=(A4XX[1]%A4XX[0]+A4XX[2])%A4XX[3];break;case 117:o4XX=A4XX[2]-(A4XX[1]-A4XX[0]);break;case 45:o4XX=A4XX[3]-(A4XX[0]|A4XX[2])*A4XX[4]+A4XX[1];break;case 290:o4XX=(A4XX[0]*A4XX[1]+A4XX[3])/A4XX[2];break;case 219:o4XX=(A4XX[2]-A4XX[1])/(A4XX[0]|A4XX[3]);break;case 16:o4XX=A4XX[2]*A4XX[0]/A4XX[3]*A4XX[1];break;case 191:o4XX=A4XX[3]*A4XX[4]*A4XX[1]*A4XX[0]*A4XX[2];break;case 315:o4XX=+A4XX[5]*A4XX[1]*A4XX[4]-+A4XX[3]*A4XX[2]*A4XX[0];break;case 26:o4XX=+A4XX[5]*A4XX[1]-(A4XX[3]|A4XX[2])*A4XX[0]+ +A4XX[4];break;case 309:o4XX=(A4XX[3]|A4XX[2])+A4XX[4]+ +A4XX[0]*A4XX[1];break;case 238:o4XX=A4XX[1]-+A4XX[0];break;case 337:o4XX=(A4XX[4]*A4XX[0]-A4XX[3])/A4XX[2]+-A4XX[5]/A4XX[1];break;case 284:o4XX=-+A4XX[0]/A4XX[1];break;case 305:o4XX=-A4XX[2]*A4XX[1]-A4XX[0]*A4XX[3];break;case 177:o4XX=(A4XX[1]-A4XX[0]&A4XX[3])>>+A4XX[2];break;case 199:o4XX=A4XX[3]*A4XX[0]-A4XX[1]+A4XX[2];break;case 356:o4XX=A4XX[3]-A4XX[0]+A4XX[2]+A4XX[1]+A4XX[4];break;case 42:o4XX=(A4XX[1]-A4XX[2])/A4XX[0];break;case 294:o4XX=(A4XX[1]*(A4XX[3]+ +A4XX[4])>>+A4XX[5])+A4XX[0]-+A4XX[2];break;case 51:o4XX=(A4XX[3]-A4XX[1])*A4XX[0]-+A4XX[2];break;case 299:o4XX=(A4XX[2]-A4XX[1])*A4XX[3]|A4XX[0];break;case 157:o4XX=(+A4XX[2]-A4XX[1])/+A4XX[0];break;case 10:o4XX=A4XX[1]/A4XX[0];break;case 276:o4XX=(-A4XX[3]-A4XX[1])*-A4XX[0]/A4XX[2];break;case 370:o4XX=(A4XX[2]*A4XX[0]-A4XX[1]+A4XX[3])/A4XX[4];break;case 357:o4XX=A4XX[3]*A4XX[1]+ +A4XX[0]*A4XX[2];break;case 282:o4XX=A4XX[0]/(A4XX[2]|A4XX[1]);break;case 268:o4XX=A4XX[2]*(-A4XX[0]-A4XX[1])+A4XX[3];break;case 319:o4XX=(A4XX[5]-A4XX[6])*(A4XX[4]-A4XX[7])+(A4XX[1]-A4XX[2])*(A4XX[3]-A4XX[9])+(A4XX[11]-A4XX[0])*(A4XX[8]-A4XX[10]);break;case 66:o4XX=A4XX[2]*A4XX[1]-A4XX[4]*A4XX[3]+A4XX[0]*A4XX[5];break;case 196:o4XX=(A4XX[3]-A4XX[2]-A4XX[0])/A4XX[1];break;case 156:o4XX=(A4XX[2]+ +A4XX[1])/(A4XX[0]-A4XX[3]);break;case 106:o4XX=A4XX[8]*(+A4XX[4]*A4XX[5]-+A4XX[1]*A4XX[6]+ +A4XX[12])+A4XX[0]*(-(A4XX[13]*A4XX[18])*A4XX[7]+ +A4XX[2]*A4XX[3])+A4XX[17]*(A4XX[19]-+A4XX[16]*A4XX[15]+A4XX[10])+A4XX[11]*(A4XX[9]-A4XX[14]);break;case 14:o4XX=A4XX[2]-A4XX[1]+A4XX[0];break;case 361:o4XX=(A4XX[0]*(A4XX[2]+A4XX[4])-A4XX[1])/A4XX[3];break;case 204:o4XX=A4XX[1]+A4XX[0]+ +A4XX[2];break;case 65:o4XX=A4XX[0]*(-A4XX[2]/A4XX[1]+A4XX[3]+A4XX[4]);break;case 324:o4XX=+A4XX[3]/(A4XX[9]|A4XX[8])*A4XX[2]*(A4XX[1]*A4XX[4]*A4XX[6]+A4XX[5]*A4XX[7]*A4XX[0]);break;case 353:o4XX=A4XX[0]-A4XX[2]*A4XX[3]+A4XX[1];break;case 236:o4XX=A4XX[0]-A4XX[1]-A4XX[2];break;case 47:o4XX=A4XX[2]+A4XX[1]/+A4XX[0];break;case 73:o4XX=-(A4XX[3]+A4XX[0])/(A4XX[1]-A4XX[2]);break;case 91:o4XX=(A4XX[2]|A4XX[1])-+A4XX[3]*(A4XX[0]+A4XX[4]);break;}return o4XX;},v4XX:function(u4XX){H4XX=u4XX;}};}();x3uX.r3rX="keyup";W3WX.z6WX="#000";H5ZZ.i8CX=50;W3WX.n1WX="impact.animation";H5ZZ.T8CX=43;G3CX.r9CX=360;G3CX.U1CX=238;H5ZZ.Q3CX=66;k3dX.J43X="cyan";G3CX.Z7CX=126;H5ZZ.D8CX=24;x3uX.k2rX=")";H5ZZ.s8CX=27;x3uX.d4LX="target";A0UX.x4SX="46";x3uX.c3uX="11";f5WX.J5WX="plugins.datastructure.binary-heap";f5WX.H3lX="rgba(255,255,0,1)";G3CX.w3CX=105;f5WX.Y6lX="babylon.entities.laser";k3dX.W23X="preStep";G3CX.q3uX="#";H5ZZ.i0zz=function (){return typeof H5ZZ.U0zz.x2v==='function'?H5ZZ.U0zz.x2v.apply(H5ZZ.U0zz,arguments):H5ZZ.U0zz.x2v;};A0UX.o0UX="TAP, HOLD AND RELEASE";G3CX.W3uX=" ";W3WX.Z0WX="plugins.io.io-manager";k3dX.H9dX=".ogg";W3WX.x3WX="loaded";A0UX.n2SX="{";H5ZZ.J8CX=56;A0UX.H4SX=0.3;W3WX.X0WX="plugins.io.keyboard";H5ZZ.R8CX=6;M6lX.z6lX="game.toybox.content";G3CX.M3CX=95;f5WX.i5WX="'>";f5WX.V7lX="babylon.plugins.wgl-system";f5WX.j6lX="babylon.entities.laser-spawner";W3WX.d3WX="audio/mpeg;";A0UX.F5SX=0.1;x3uX.D5LX="39";f5WX.i3lX="game.entities.webgl.webgl-control-game";G3CX.x2CX=300;H5ZZ.h4XX=function (){return typeof H5ZZ.L4XX.E6QQ==='function'?H5ZZ.L4XX.E6QQ.apply(H5ZZ.L4XX,arguments):H5ZZ.L4XX.E6QQ;};W3WX.Q2WX="plugins.patches.mouse-move-patch";x3uX.m6uX="x";G3CX.p1CX=239;A0UX.M4SX="./swf/FlashMediaElement.swf";f5WX.Q3lX="670";W3WX.l9WX=".*";H5ZZ.R3CX=58;G3CX.K7CX=108;W3WX.z1WX="MSPointerMove";k3dX.m83X="\r\n";k3dX.N43X="90";x3uX.S1rX="40";G3CX.Z2CX=282;x3uX.Q7uX="360";k3dX.m3dX="false";f5WX.f7lX="350";x3uX.N5uX="Z";function G3CX(){}f5WX.e4WX="0.15";W3WX.H6WX="impact.image";W3WX.D9WX="plugins.audio.howler-music-player";x3uX.S6uX="img";var _STRINGS,_SETTINGS,MobileAdInGamePreroll,MobileAdInGameHeader,MobileAdInGameFooter,MobileAdInGameEnd,HANDJS,ie;!function(e6,H0){var r0lX=G3CX;var f4CX="earcut";var K6,J6,v6,j6;K6=[];J6=e6.CANNON||this.CANNON;v6=e6.OIMO||this.OIMO;j6=e6.earcut||this.earcut;if(r0lX.W4CX==typeof exports&&r0lX.W4CX==typeof module){try{J6=J6||require("cannon");}catch(U0){}try{v6=v6||require("oimo");}catch(S0){}try{j6=j6||require("earcut");}catch(m0){}module.exports=H0(J6,v6,j6);}else if(r0lX.d4CX==typeof define&&define.amd){require.specified&&require.specified(r0lX.g4CX)&&K6.push(r0lX.g4CX),require.specified&&require.specified(r0lX.y4CX)&&K6.push(r0lX.y4CX),require.specified&&require.specified(f4CX)&&K6.push(f4CX),define(r0lX.O4CX,K6,H0);}else if(r0lX.W4CX==typeof exports){try{J6=J6||require("cannon");}catch(J0){}try{v6=v6||require("oimo");}catch(G0){}try{j6=j6||require("earcut");}catch(v0){}exports.babylonjs=H0(J6,v6,j6);}else{e6.BABYLON=H0(J6,v6,j6);}}(this,function(C6Z,L6Z,r5Z){var d4lX=H5ZZ;var W4lX=G3CX;var E0UX="layout(std140,column_major) uniform;\nuniform Material\n{\nuniform vec4 vPrimaryColor;\nuniform vec4 vPrimaryColorShadow;\nuniform vec2 vDiffuseInfos;\nuniform vec2 vReflectionInfos;\nuniform mat4 diffuseMatrix;\nuniform mat4 reflectionMatrix;\nuniform vec3 vReflectionMicrosurfaceInfos;\nuniform float fFovMultiplier;\nuniform float pointSize;\nuniform float shadowLevel;\nuniform float alpha;\n#if defined(REFLECTIONFRESNEL) || defined(OPACITYFRESNEL)\nuniform vec3 vBackgroundCenter;\n#endif\n#ifdef REFLECTIONFRESNEL\nuniform vec4 vReflectionControl;\n#endif\n};\nuniform Scene {\nmat4 viewProjection;\nmat4 view;\n};";var D0UX=" uniform vec4 vPrimaryColor;\n#ifdef USEHIGHLIGHTANDSHADOWCOLORS\nuniform vec4 vPrimaryColorShadow;\n#endif\nuniform float shadowLevel;\nuniform float alpha;\n#ifdef DIFFUSE\nuniform vec2 vDiffuseInfos;\n#endif\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\nuniform mat4 reflectionMatrix;\nuniform vec3 vReflectionMicrosurfaceInfos;\n#endif\n#if defined(REFLECTIONFRESNEL) || defined(OPACITYFRESNEL)\nuniform vec3 vBackgroundCenter;\n#endif\n#ifdef REFLECTIONFRESNEL\nuniform vec4 vReflectionControl;\n#endif\n#if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(REFRACTION)\nuniform mat4 view;\n#endif";var Z0UX="uniform mat4 view;\nuniform mat4 viewProjection;\nuniform float shadowLevel;\n#ifdef DIFFUSE\nuniform mat4 diffuseMatrix;\nuniform vec2 vDiffuseInfos;\n#endif\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\nuniform mat4 reflectionMatrix;\nuniform vec3 vReflectionMicrosurfaceInfos;\nuniform float fFovMultiplier;\n#endif\n#ifdef POINTSIZE\nuniform float pointSize;\n#endif";var m0UX="sampleCoord{X}=sampleCenter+delta*KERNEL_OFFSET{X};";var B0UX="varying vec2 sampleCoord{X};";var k0UX="#ifdef DOF\nfactor=sampleCoC(sampleCenter+delta*KERNEL_DEP_OFFSET{X});\ncomputedWeight=KERNEL_DEP_WEIGHT{X}*factor;\nsumOfWeights+=computedWeight;\n#else\ncomputedWeight=KERNEL_DEP_WEIGHT{X};\n#endif\n#ifdef PACKEDFLOAT\nblend+=unpack(texture2D(textureSampler,sampleCenter+delta*KERNEL_DEP_OFFSET{X}))*computedWeight;\n#else\nblend+=texture2D(textureSampler,sampleCenter+delta*KERNEL_DEP_OFFSET{X})*computedWeight;\n#endif";var j0UX="#ifdef DOF\nfactor=sampleCoC(sampleCoord{X}); \ncomputedWeight=KERNEL_WEIGHT{X}*factor;\nsumOfWeights+=computedWeight;\n#else\ncomputedWeight=KERNEL_WEIGHT{X};\n#endif\n#ifdef PACKEDFLOAT\nblend+=unpack(texture2D(textureSampler,sampleCoord{X}))*computedWeight;\n#else\nblend+=texture2D(textureSampler,sampleCoord{X})*computedWeight;\n#endif";var X0UX="#ifdef INSTANCES\nin vec4 world0;\nin vec4 world1;\nin vec4 world2;\nin vec4 world3;\n#else\nuniform mat4 world;\n#endif";var l0UX="#if NUM_BONE_INFLUENCERS>0\nuniform mat4 mBones[BonesPerMesh];\nin vec4 matricesIndices;\nin vec4 matricesWeights;\n#if NUM_BONE_INFLUENCERS>4\nin vec4 matricesIndicesExtra;\nin vec4 matricesWeightsExtra;\n#endif\n#endif";var t0UX="#if __VERSION__>=200\nlayout(location=0) out vec4 glFragData[{X}];\n#endif\n";var Y0UX="#ifdef CLIPPLANE\nin float fClipDistance;\n#endif\n#ifdef CLIPPLANE2\nin float fClipDistance2;\n#endif\n#ifdef CLIPPLANE3\nin float fClipDistance3;\n#endif\n#ifdef CLIPPLANE4\nin float fClipDistance4;\n#endif";var Q0UX="#ifdef CLIPPLANE\nuniform vec4 vClipPlane;\nout float fClipDistance;\n#endif\n#ifdef CLIPPLANE2\nuniform vec4 vClipPlane2;\nout float fClipDistance2;\n#endif\n#ifdef CLIPPLANE3\nuniform vec4 vClipPlane3;\nout float fClipDistance3;\n#endif\n#ifdef CLIPPLANE4\nuniform vec4 vClipPlane4;\nout float fClipDistance4;\n#endif";var S0UX="\nstruct lightingInfo\n{\nvec3 diffuse;\n#ifdef SPECULARTERM\nvec3 specular;\n#endif\n};\nstruct pointLightingInfo\n{\nvec3 lightOffset;\nfloat lightDistanceSquared;\nfloat attenuation;\n};\nstruct spotLightingInfo\n{\nvec3 lightOffset;\nfloat lightDistanceSquared;\nvec3 directionToLightCenterW;\nfloat attenuation;\n};\nfloat computeDistanceLightFalloff_Standard(vec3 lightOffset,float range)\n{\nreturn max(0.,1.0-length(lightOffset)/range);\n}\nfloat computeDistanceLightFalloff_Physical(float lightDistanceSquared)\n{\nreturn 1.0/((lightDistanceSquared+0.001));\n}\nfloat computeDistanceLightFalloff_GLTF(float lightDistanceSquared,float inverseSquaredRange)\n{\nconst float minDistanceSquared=0.01*0.01;\nfloat lightDistanceFalloff=1.0/(max(lightDistanceSquared,minDistanceSquared));\nfloat factor=lightDistanceSquared*inverseSquaredRange;\nfloat attenuation=clamp(1.0-factor*factor,0.,1.);\nattenuation*=attenuation;\n\nlightDistanceFalloff*=attenuation;\nreturn lightDistanceFalloff;\n}\nfloat computeDistanceLightFalloff(vec3 lightOffset,float lightDistanceSquared,float range,float inverseSquaredRange)\n{ \n#ifdef USEPHYSICALLIGHTFALLOFF\nreturn computeDistanceLightFalloff_Physical(lightDistanceSquared);\n#elif defined(USEGLTFLIGHTFALLOFF)\nreturn computeDistanceLightFalloff_GLTF(lightDistanceSquared,inverseSquaredRange);\n#else\nreturn computeDistanceLightFalloff_Standard(lightOffset,range);\n#endif\n}\nfloat computeDirectionalLightFalloff_Standard(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle,float exponent)\n{\nfloat falloff=0.0;\nfloat cosAngle=max(0.000000000000001,dot(-lightDirection,directionToLightCenterW));\nif (cosAngle>=cosHalfAngle)\n{\nfalloff=max(0.,pow(cosAngle,exponent));\n}\nreturn falloff;\n}\nfloat computeDirectionalLightFalloff_Physical(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle)\n{\nconst float kMinusLog2ConeAngleIntensityRatio=6.64385618977; \n\n\n\n\n\nfloat concentrationKappa=kMinusLog2ConeAngleIntensityRatio/(1.0-cosHalfAngle);\n\n\nvec4 lightDirectionSpreadSG=vec4(-lightDirection*concentrationKappa,-concentrationKappa);\nfloat falloff=exp2(dot(vec4(directionToLightCenterW,1.0),lightDirectionSpreadSG));\nreturn falloff;\n}\nfloat computeDirectionalLightFalloff_GLTF(vec3 lightDirection,vec3 directionToLightCenterW,float lightAngleScale,float lightAngleOffset)\n{\n\n\n\nfloat cd=dot(-lightDirection,directionToLightCenterW);\nfloat falloff=clamp(cd*lightAngleScale+lightAngleOffset,0.,1.);\n\nfalloff*=falloff;\nreturn falloff;\n}\nfloat computeDirectionalLightFalloff(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle,float exponent,float lightAngleScale,float lightAngleOffset)\n{\n#ifdef USEPHYSICALLIGHTFALLOFF\nreturn computeDirectionalLightFalloff_Physical(lightDirection,directionToLightCenterW,cosHalfAngle);\n#elif defined(USEGLTFLIGHTFALLOFF)\nreturn computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenterW,lightAngleScale,lightAngleOffset);\n#else\nreturn computeDirectionalLightFalloff_Standard(lightDirection,directionToLightCenterW,cosHalfAngle,exponent);\n#endif\n}\npointLightingInfo computePointLightingInfo(vec4 lightData) {\npointLightingInfo result;\nresult.lightOffset=lightData.xyz-vPositionW;\nresult.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);\nreturn result;\n}\nspotLightingInfo computeSpotLightingInfo(vec4 lightData) {\nspotLightingInfo result;\nresult.lightOffset=lightData.xyz-vPositionW;\nresult.directionToLightCenterW=normalize(result.lightOffset);\nresult.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);\nreturn result;\n}\nlightingInfo computePointLighting(pointLightingInfo info,vec3 viewDirectionW,vec3 vNormal,vec3 diffuseColor,float lightRadius,float roughness,float NdotV,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,out float NdotL) {\nlightingInfo result;\nfloat lightDistance=sqrt(info.lightDistanceSquared);\nvec3 lightDirection=normalize(info.lightOffset);\n\nroughness=adjustRoughnessFromLightProperties(roughness,lightRadius,lightDistance);\n\nvec3 H=normalize(viewDirectionW+lightDirection);\nNdotL=clamp(dot(vNormal,lightDirection),0.00000000001,1.0);\nfloat VdotH=clamp(dot(viewDirectionW,H),0.0,1.0);\nfloat diffuseTerm=computeDiffuseTerm(NdotL,NdotV,VdotH,roughness);\nresult.diffuse=diffuseTerm*diffuseColor*info.attenuation;\n#ifdef SPECULARTERM\n\nfloat NdotH=clamp(dot(vNormal,H),0.000000000001,1.0);\nvec3 specTerm=computeSpecularTerm(NdotH,NdotL,NdotV,VdotH,roughness,reflectance0,reflectance90,geometricRoughnessFactor);\nresult.specular=specTerm*diffuseColor*info.attenuation;\n#endif\nreturn result;\n}\nlightingInfo computeSpotLighting(spotLightingInfo info,vec3 viewDirectionW,vec3 vNormal,vec4 lightDirection,vec3 diffuseColor,float lightRadius,float roughness,float NdotV,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,out float NdotL) {\nlightingInfo result;\n\nfloat lightDistance=sqrt(info.lightDistanceSquared);\nroughness=adjustRoughnessFromLightProperties(roughness,lightRadius,lightDistance);\n\nvec3 H=normalize(viewDirectionW+info.directionToLightCenterW);\nNdotL=clamp(dot(vNormal,info.directionToLightCenterW),0.000000000001,1.0);\nfloat VdotH=clamp(dot(viewDirectionW,H),0.0,1.0);\nfloat diffuseTerm=computeDiffuseTerm(NdotL,NdotV,VdotH,roughness);\nresult.diffuse=diffuseTerm*diffuseColor*info.attenuation;\n#ifdef SPECULARTERM\n\nfloat NdotH=clamp(dot(vNormal,H),0.000000000001,1.0);\nvec3 specTerm=computeSpecularTerm(NdotH,NdotL,NdotV,VdotH,roughness,reflectance0,reflectance90,geometricRoughnessFactor);\nresult.specular=specTerm*diffuseColor*info.attenuation;\n#endif\nreturn result;\n}\nlightingInfo computeDirectionalLighting(vec3 viewDirectionW,vec3 vNormal,vec4 lightData,vec3 diffuseColor,vec3 specularColor,float lightRadius,float roughness,float NdotV,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,out float NdotL) {\nlightingInfo result;\nfloat lightDistance=length(-lightData.xyz);\nvec3 lightDirection=normalize(-lightData.xyz);\n\nroughness=adjustRoughnessFromLightProperties(roughness,lightRadius,lightDistance);\n\nvec3 H=normalize(viewDirectionW+lightDirection);\nNdotL=clamp(dot(vNormal,lightDirection),0.00000000001,1.0);\nfloat VdotH=clamp(dot(viewDirectionW,H),0.0,1.0);\nfloat diffuseTerm=computeDiffuseTerm(NdotL,NdotV,VdotH,roughness);\nresult.diffuse=diffuseTerm*diffuseColor;\n#ifdef SPECULARTERM\n\nfloat NdotH=clamp(dot(vNormal,H),0.000000000001,1.0);\nvec3 specTerm=computeSpecularTerm(NdotH,NdotL,NdotV,VdotH,roughness,reflectance0,reflectance90,geometricRoughnessFactor);\nresult.specular=specTerm*diffuseColor;\n#endif\nreturn result;\n}\nlightingInfo computeHemisphericLighting(vec3 viewDirectionW,vec3 vNormal,vec4 lightData,vec3 diffuseColor,vec3 specularColor,vec3 groundColor,float roughness,float NdotV,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,out float NdotL) {\nlightingInfo result;\n\n\n\nNdotL=dot(vNormal,lightData.xyz)*0.5+0.5;\nresult.diffuse=mix(groundColor,diffuseColor,NdotL);\n#ifdef SPECULARTERM\n\nvec3 lightVectorW=normalize(lightData.xyz);\nvec3 H=normalize(viewDirectionW+lightVectorW);\nfloat NdotH=clamp(dot(vNormal,H),0.000000000001,1.0);\nNdotL=clamp(NdotL,0.000000000001,1.0);\nfloat VdotH=clamp(dot(viewDirectionW,H),0.0,1.0);\nvec3 specTerm=computeSpecularTerm(NdotH,NdotL,NdotV,VdotH,roughness,reflectance0,reflectance90,geometricRoughnessFactor);\nresult.specular=specTerm*diffuseColor;\n#endif\nreturn result;\n}\nvec3 computeProjectionTextureDiffuseLighting(sampler2D projectionLightSampler,mat4 textureProjectionMatrix){\nvec4 strq=textureProjectionMatrix*vec4(vPositionW,1.0);\nstrq/=strq.w;\nvec3 textureColor=texture2D(projectionLightSampler,strq.xy).rgb;\nreturn toLinearSpace(textureColor);\n}";var O0UX="#ifdef USESPHERICALFROMREFLECTIONMAP\nuniform vec3 vSphericalX;\nuniform vec3 vSphericalY;\nuniform vec3 vSphericalZ;\nuniform vec3 vSphericalXX_ZZ;\nuniform vec3 vSphericalYY_ZZ;\nuniform vec3 vSphericalZZ;\nuniform vec3 vSphericalXY;\nuniform vec3 vSphericalYZ;\nuniform vec3 vSphericalZX;\nvec3 quaternionVectorRotation_ScaledSqrtTwo(vec4 Q,vec3 V){\nvec3 T=cross(Q.xyz,V);\nT+=Q.www*V;\nreturn cross(Q.xyz,T)+V;\n}\nvec3 environmentIrradianceJones(vec3 normal)\n{\n\n\n\n\n\n\n\n\n\nfloat Nx=normal.x;\nfloat Ny=normal.y;\nfloat Nz=normal.z;\nvec3 C1=vSphericalZZ.rgb;\nvec3 Cx=vSphericalX.rgb;\nvec3 Cy=vSphericalY.rgb;\nvec3 Cz=vSphericalZ.rgb;\nvec3 Cxx_zz=vSphericalXX_ZZ.rgb;\nvec3 Cyy_zz=vSphericalYY_ZZ.rgb;\nvec3 Cxy=vSphericalXY.rgb;\nvec3 Cyz=vSphericalYZ.rgb;\nvec3 Czx=vSphericalZX.rgb;\nvec3 a1=Cyy_zz*Ny+Cy;\nvec3 a2=Cyz*Nz+a1;\nvec3 b1=Czx*Nz+Cx;\nvec3 b2=Cxy*Ny+b1;\nvec3 b3=Cxx_zz*Nx+b2;\nvec3 t1=Cz*Nz+C1;\nvec3 t2=a2*Ny+t1;\nvec3 t3=b3*Nx+t2;\nreturn t3;\n}\n#endif";var f0UX="\n#define RECIPROCAL_PI2 0.15915494\n#define FRESNEL_MAXIMUM_ON_ROUGH 0.25\n\nconst float kRougnhessToAlphaScale=0.1;\nconst float kRougnhessToAlphaOffset=0.29248125;\nfloat convertRoughnessToAverageSlope(float roughness)\n{\n\nconst float kMinimumVariance=0.0005;\nfloat alphaG=square(roughness)+kMinimumVariance;\nreturn alphaG;\n}\n\nfloat smithVisibilityG1_TrowbridgeReitzGGX(float dot,float alphaG)\n{\nfloat tanSquared=(1.0-dot*dot)/(dot*dot);\nreturn 2.0/(1.0+sqrt(1.0+alphaG*alphaG*tanSquared));\n}\nfloat smithVisibilityG_TrowbridgeReitzGGX_Walter(float NdotL,float NdotV,float alphaG)\n{\nreturn smithVisibilityG1_TrowbridgeReitzGGX(NdotL,alphaG)*smithVisibilityG1_TrowbridgeReitzGGX(NdotV,alphaG);\n}\n\n\nfloat normalDistributionFunction_TrowbridgeReitzGGX(float NdotH,float alphaG)\n{\n\n\n\nfloat a2=square(alphaG);\nfloat d=NdotH*NdotH*(a2-1.0)+1.0;\nreturn a2/(PI*d*d);\n}\nvec3 fresnelSchlickGGX(float VdotH,vec3 reflectance0,vec3 reflectance90)\n{\nreturn reflectance0+(reflectance90-reflectance0)*pow(clamp(1.0-VdotH,0.,1.),5.0);\n}\nvec3 fresnelSchlickEnvironmentGGX(float VdotN,vec3 reflectance0,vec3 reflectance90,float smoothness)\n{\n\nfloat weight=mix(FRESNEL_MAXIMUM_ON_ROUGH,1.0,smoothness);\nreturn reflectance0+weight*(reflectance90-reflectance0)*pow(clamp(1.0-VdotN,0.,1.),5.0);\n}\n\nvec3 computeSpecularTerm(float NdotH,float NdotL,float NdotV,float VdotH,float roughness,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor)\n{\nroughness=max(roughness,geometricRoughnessFactor);\nfloat alphaG=convertRoughnessToAverageSlope(roughness);\nfloat distribution=normalDistributionFunction_TrowbridgeReitzGGX(NdotH,alphaG);\nfloat visibility=smithVisibilityG_TrowbridgeReitzGGX_Walter(NdotL,NdotV,alphaG);\nvisibility/=(4.0*NdotL*NdotV); \nfloat specTerm=max(0.,visibility*distribution)*NdotL;\nvec3 fresnel=fresnelSchlickGGX(VdotH,reflectance0,reflectance90);\nreturn fresnel*specTerm;\n}\nfloat computeDiffuseTerm(float NdotL,float NdotV,float VdotH,float roughness)\n{\n\n\nfloat diffuseFresnelNV=pow(clamp(1.0-NdotL,0.000001,1.),5.0);\nfloat diffuseFresnelNL=pow(clamp(1.0-NdotV,0.000001,1.),5.0);\nfloat diffuseFresnel90=0.5+2.0*VdotH*VdotH*roughness;\nfloat fresnel =\n(1.0+(diffuseFresnel90-1.0)*diffuseFresnelNL) *\n(1.0+(diffuseFresnel90-1.0)*diffuseFresnelNV);\nreturn fresnel*NdotL/PI;\n}\nfloat adjustRoughnessFromLightProperties(float roughness,float lightRadius,float lightDistance)\n{\n#if defined(USEPHYSICALLIGHTFALLOFF) || defined(USEGLTFLIGHTFALLOFF)\n\nfloat lightRoughness=lightRadius/lightDistance;\n\nfloat totalRoughness=clamp(lightRoughness+roughness,0.,1.);\nreturn totalRoughness;\n#else\nreturn roughness;\n#endif\n}\nfloat computeDefaultMicroSurface(float microSurface,vec3 reflectivityColor)\n{\nconst float kReflectivityNoAlphaWorkflow_SmoothnessMax=0.95;\nfloat reflectivityLuminance=getLuminance(reflectivityColor);\nfloat reflectivityLuma=sqrt(reflectivityLuminance);\nmicroSurface=reflectivityLuma*kReflectivityNoAlphaWorkflow_SmoothnessMax;\nreturn microSurface;\n}\n\n\nfloat fresnelGrazingReflectance(float reflectance0) {\nfloat reflectance90=clamp(reflectance0*25.0,0.0,1.0);\nreturn reflectance90;\n}\n\n\n#define UNPACK_LOD(x) (1.0-x)*255.0\nfloat getLodFromAlphaG(float cubeMapDimensionPixels,float alphaG,float NdotV) {\nfloat microsurfaceAverageSlope=alphaG;\n\n\n\n\n\n\nmicrosurfaceAverageSlope*=sqrt(abs(NdotV));\nfloat microsurfaceAverageSlopeTexels=microsurfaceAverageSlope*cubeMapDimensionPixels;\nfloat lod=log2(microsurfaceAverageSlopeTexels);\nreturn lod;\n}\nfloat environmentRadianceOcclusion(float ambientOcclusion,float NdotVUnclamped) {\n\n\nfloat temp=NdotVUnclamped+ambientOcclusion;\nreturn clamp(square(temp)-1.0+ambientOcclusion,0.0,1.0);\n}\nfloat environmentHorizonOcclusion(vec3 view,vec3 normal) {\n\nvec3 reflection=reflect(view,normal);\nfloat temp=clamp( 1.0+1.1*dot(reflection,normal),0.0,1.0);\nreturn square(temp);\n}";var y0UX="layout(std140,column_major) uniform;\nuniform Material\n{\nuniform vec2 vAlbedoInfos;\nuniform vec4 vAmbientInfos;\nuniform vec2 vOpacityInfos;\nuniform vec2 vEmissiveInfos;\nuniform vec2 vLightmapInfos;\nuniform vec3 vReflectivityInfos;\nuniform vec2 vMicroSurfaceSamplerInfos;\nuniform vec4 vRefractionInfos;\nuniform vec2 vReflectionInfos;\nuniform vec3 vReflectionPosition;\nuniform vec3 vReflectionSize; \nuniform vec3 vBumpInfos;\nuniform mat4 albedoMatrix;\nuniform mat4 ambientMatrix;\nuniform mat4 opacityMatrix;\nuniform mat4 emissiveMatrix;\nuniform mat4 lightmapMatrix;\nuniform mat4 reflectivityMatrix;\nuniform mat4 microSurfaceSamplerMatrix;\nuniform mat4 bumpMatrix;\nuniform vec2 vTangentSpaceParams;\nuniform mat4 refractionMatrix;\nuniform mat4 reflectionMatrix;\nuniform vec3 vReflectionColor;\nuniform vec4 vAlbedoColor;\nuniform vec4 vLightingIntensity;\nuniform vec3 vRefractionMicrosurfaceInfos;\nuniform vec3 vReflectionMicrosurfaceInfos;\nuniform vec4 vReflectivityColor;\nuniform vec3 vEmissiveColor;\nuniform float pointSize;\n};\nuniform Scene {\nmat4 viewProjection;\nmat4 view;\n};";var g0UX="uniform vec3 vReflectionColor;\nuniform vec4 vAlbedoColor;\n\nuniform vec4 vLightingIntensity;\nuniform vec4 vReflectivityColor;\nuniform vec3 vEmissiveColor;\n\n#ifdef ALBEDO\nuniform vec2 vAlbedoInfos;\n#endif\n#ifdef AMBIENT\nuniform vec4 vAmbientInfos;\n#endif\n#ifdef BUMP\nuniform vec3 vBumpInfos;\nuniform vec2 vTangentSpaceParams;\n#endif\n#ifdef OPACITY \nuniform vec2 vOpacityInfos;\n#endif\n#ifdef EMISSIVE\nuniform vec2 vEmissiveInfos;\n#endif\n#ifdef LIGHTMAP\nuniform vec2 vLightmapInfos;\n#endif\n#ifdef REFLECTIVITY\nuniform vec3 vReflectivityInfos;\n#endif\n#ifdef MICROSURFACEMAP\nuniform vec2 vMicroSurfaceSamplerInfos;\n#endif\n\n#if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(REFRACTION)\nuniform mat4 view;\n#endif\n\n#ifdef REFRACTION\nuniform vec4 vRefractionInfos;\nuniform mat4 refractionMatrix;\nuniform vec3 vRefractionMicrosurfaceInfos;\n#endif\n\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\nuniform mat4 reflectionMatrix;\nuniform vec3 vReflectionMicrosurfaceInfos;\n#if defined(USE_LOCAL_REFLECTIONMAP_CUBIC) && defined(REFLECTIONMAP_CUBIC)\nuniform vec3 vReflectionPosition;\nuniform vec3 vReflectionSize; \n#endif\n#endif";var d0UX="uniform mat4 view;\nuniform mat4 viewProjection;\n#ifdef ALBEDO\nuniform mat4 albedoMatrix;\nuniform vec2 vAlbedoInfos;\n#endif\n#ifdef AMBIENT\nuniform mat4 ambientMatrix;\nuniform vec4 vAmbientInfos;\n#endif\n#ifdef OPACITY\nuniform mat4 opacityMatrix;\nuniform vec2 vOpacityInfos;\n#endif\n#ifdef EMISSIVE\nuniform vec2 vEmissiveInfos;\nuniform mat4 emissiveMatrix;\n#endif\n#ifdef LIGHTMAP\nuniform vec2 vLightmapInfos;\nuniform mat4 lightmapMatrix;\n#endif\n#ifdef REFLECTIVITY \nuniform vec3 vReflectivityInfos;\nuniform mat4 reflectivityMatrix;\n#endif\n#ifdef MICROSURFACEMAP\nuniform vec2 vMicroSurfaceSamplerInfos;\nuniform mat4 microSurfaceSamplerMatrix;\n#endif\n#ifdef BUMP\nuniform vec3 vBumpInfos;\nuniform mat4 bumpMatrix;\n#endif\n#ifdef POINTSIZE\nuniform float pointSize;\n#endif\n\n#ifdef REFRACTION\nuniform vec4 vRefractionInfos;\nuniform mat4 refractionMatrix;\nuniform vec3 vRefractionMicrosurfaceInfos;\n#endif\n\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\nuniform mat4 reflectionMatrix;\nuniform vec3 vReflectionMicrosurfaceInfos;\n#endif\n";var W0UX="#ifdef FOG\nfloat fog=CalcFogFactor();\ncolor.rgb=fog*color.rgb+(1.0-fog)*vFogColor;\n#endif";var R0UX="#ifdef LOGARITHMICDEPTH\ngl_FragDepthEXT=log2(vFragmentDepth)*logarithmicDepthConstant*0.5;\n#endif";var K0UX="#ifdef LIGHT{X}\n#if defined(SHADOWONLY) || (defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X}) && defined(LIGHTMAPNOSPECULAR{X}))\n\n#else\n#ifdef PBR\n#ifdef SPOTLIGHT{X}\nspotInfo=computeSpotLightingInfo(light{X}.vLightData);\n#ifdef LIGHT_FALLOFF_GLTF{X}\nspotInfo.attenuation=computeDistanceLightFalloff_GLTF(spotInfo.lightDistanceSquared,light{X}.vLightFalloff.y);\nspotInfo.attenuation*=computeDirectionalLightFalloff_GLTF(light{X}.vLightDirection.xyz,spotInfo.directionToLightCenterW,light{X}.vLightFalloff.z,light{X}.vLightFalloff.w);\n#elif defined(LIGHT_FALLOFF_PHYSICAL{X})\nspotInfo.attenuation=computeDistanceLightFalloff_Physical(spotInfo.lightDistanceSquared);\nspotInfo.attenuation*=computeDirectionalLightFalloff_Physical(light{X}.vLightDirection.xyz,spotInfo.directionToLightCenterW,light{X}.vLightDirection.w);\n#elif defined(LIGHT_FALLOFF_STANDARD{X})\nspotInfo.attenuation=computeDistanceLightFalloff_Standard(spotInfo.lightOffset,light{X}.vLightFalloff.x);\nspotInfo.attenuation*=computeDirectionalLightFalloff_Standard(light{X}.vLightDirection.xyz,spotInfo.directionToLightCenterW,light{X}.vLightDirection.w,light{X}.vLightData.w);\n#else\nspotInfo.attenuation=computeDistanceLightFalloff(spotInfo.lightOffset,spotInfo.lightDistanceSquared,light{X}.vLightFalloff.x,light{X}.vLightFalloff.y);\nspotInfo.attenuation*=computeDirectionalLightFalloff(light{X}.vLightDirection.xyz,spotInfo.directionToLightCenterW,light{X}.vLightDirection.w,light{X}.vLightData.w,light{X}.vLightFalloff.z,light{X}.vLightFalloff.w);\n#endif\ninfo=computeSpotLighting(spotInfo,viewDirectionW,normalW,light{X}.vLightDirection,light{X}.vLightDiffuse.rgb,light{X}.vLightDiffuse.a,roughness,NdotV,specularEnvironmentR0,specularEnvironmentR90,geometricRoughnessFactor,NdotL);\n#elif defined(POINTLIGHT{X})\npointInfo=computePointLightingInfo(light{X}.vLightData);\n#ifdef LIGHT_FALLOFF_GLTF{X}\npointInfo.attenuation=computeDistanceLightFalloff_GLTF(pointInfo.lightDistanceSquared,light{X}.vLightFalloff.y);\n#elif defined(LIGHT_FALLOFF_PHYSICAL{X})\npointInfo.attenuation=computeDistanceLightFalloff_Physical(pointInfo.lightDistanceSquared);\n#elif defined(LIGHT_FALLOFF_STANDARD{X})\npointInfo.attenuation=computeDistanceLightFalloff_Standard(pointInfo.lightOffset,light{X}.vLightFalloff.x);\n#else\npointInfo.attenuation=computeDistanceLightFalloff(pointInfo.lightOffset,pointInfo.lightDistanceSquared,light{X}.vLightFalloff.x,light{X}.vLightFalloff.y);\n#endif\ninfo=computePointLighting(pointInfo,viewDirectionW,normalW,light{X}.vLightDiffuse.rgb,light{X}.vLightDiffuse.a,roughness,NdotV,specularEnvironmentR0,specularEnvironmentR90,geometricRoughnessFactor,NdotL);\n#elif defined(HEMILIGHT{X})\ninfo=computeHemisphericLighting(viewDirectionW,normalW,light{X}.vLightData,light{X}.vLightDiffuse.rgb,light{X}.vLightSpecular,light{X}.vLightGround,roughness,NdotV,specularEnvironmentR0,specularEnvironmentR90,geometricRoughnessFactor,NdotL);\n#elif defined(DIRLIGHT{X})\ninfo=computeDirectionalLighting(viewDirectionW,normalW,light{X}.vLightData,light{X}.vLightDiffuse.rgb,light{X}.vLightSpecular,light{X}.vLightDiffuse.a,roughness,NdotV,specularEnvironmentR0,specularEnvironmentR90,geometricRoughnessFactor,NdotL);\n#endif\n#else\n#ifdef SPOTLIGHT{X}\ninfo=computeSpotLighting(viewDirectionW,normalW,light{X}.vLightData,light{X}.vLightDirection,light{X}.vLightDiffuse.rgb,light{X}.vLightSpecular,light{X}.vLightDiffuse.a,glossiness);\n#elif defined(HEMILIGHT{X})\ninfo=computeHemisphericLighting(viewDirectionW,normalW,light{X}.vLightData,light{X}.vLightDiffuse.rgb,light{X}.vLightSpecular,light{X}.vLightGround,glossiness);\n#elif defined(POINTLIGHT{X}) || defined(DIRLIGHT{X})\ninfo=computeLighting(viewDirectionW,normalW,light{X}.vLightData,light{X}.vLightDiffuse.rgb,light{X}.vLightSpecular,light{X}.vLightDiffuse.a,glossiness);\n#endif\n#endif\n#ifdef PROJECTEDLIGHTTEXTURE{X}\ninfo.diffuse*=computeProjectionTextureDiffuseLighting(projectionLightSampler{X},textureProjectionMatrix{X});\n#endif\n#endif\n#ifdef SHADOW{X}\n#ifdef SHADOWCLOSEESM{X}\n#if defined(SHADOWCUBE{X})\nshadow=computeShadowWithCloseESMCube(light{X}.vLightData.xyz,shadowSampler{X},light{X}.shadowsInfo.x,light{X}.shadowsInfo.z,light{X}.depthValues);\n#else\nshadow=computeShadowWithCloseESM(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.x,light{X}.shadowsInfo.z,light{X}.shadowsInfo.w);\n#endif\n#elif defined(SHADOWESM{X})\n#if defined(SHADOWCUBE{X})\nshadow=computeShadowWithESMCube(light{X}.vLightData.xyz,shadowSampler{X},light{X}.shadowsInfo.x,light{X}.shadowsInfo.z,light{X}.depthValues);\n#else\nshadow=computeShadowWithESM(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.x,light{X}.shadowsInfo.z,light{X}.shadowsInfo.w);\n#endif\n#elif defined(SHADOWPOISSON{X})\n#if defined(SHADOWCUBE{X})\nshadow=computeShadowWithPoissonSamplingCube(light{X}.vLightData.xyz,shadowSampler{X},light{X}.shadowsInfo.y,light{X}.shadowsInfo.x,light{X}.depthValues);\n#else\nshadow=computeShadowWithPoissonSampling(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.y,light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#endif\n#elif defined(SHADOWPCF{X})\n#if defined(SHADOWLOWQUALITY{X})\nshadow=computeShadowWithPCF1(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#elif defined(SHADOWMEDIUMQUALITY{X})\nshadow=computeShadowWithPCF3(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.yz,light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#else\nshadow=computeShadowWithPCF5(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.yz,light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#endif\n#elif defined(SHADOWPCSS{X})\n#if defined(SHADOWLOWQUALITY{X})\nshadow=computeShadowWithPCSS16(vPositionFromLight{X},vDepthMetric{X},depthSampler{X},shadowSampler{X},light{X}.shadowsInfo.y,light{X}.shadowsInfo.z,light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#elif defined(SHADOWMEDIUMQUALITY{X})\nshadow=computeShadowWithPCSS32(vPositionFromLight{X},vDepthMetric{X},depthSampler{X},shadowSampler{X},light{X}.shadowsInfo.y,light{X}.shadowsInfo.z,light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#else\nshadow=computeShadowWithPCSS64(vPositionFromLight{X},vDepthMetric{X},depthSampler{X},shadowSampler{X},light{X}.shadowsInfo.y,light{X}.shadowsInfo.z,light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#endif\n#else\n#if defined(SHADOWCUBE{X})\nshadow=computeShadowCube(light{X}.vLightData.xyz,shadowSampler{X},light{X}.shadowsInfo.x,light{X}.depthValues);\n#else\nshadow=computeShadow(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#endif\n#endif\n#ifdef SHADOWONLY\n#ifndef SHADOWINUSE\n#define SHADOWINUSE\n#endif\nglobalShadow+=shadow;\nshadowLightCount+=1.0;\n#endif\n#else\nshadow=1.;\n#endif\n#ifndef SHADOWONLY\n#ifdef CUSTOMUSERLIGHTING\ndiffuseBase+=computeCustomDiffuseLighting(info,diffuseBase,shadow);\n#ifdef SPECULARTERM\nspecularBase+=computeCustomSpecularLighting(info,specularBase,shadow);\n#endif\n#elif defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X})\ndiffuseBase+=lightmapColor*shadow;\n#ifdef SPECULARTERM\n#ifndef LIGHTMAPNOSPECULAR{X}\nspecularBase+=info.specular*shadow*lightmapColor;\n#endif\n#endif\n#else\ndiffuseBase+=info.diffuse*shadow;\n#ifdef SPECULARTERM\nspecularBase+=info.specular*shadow;\n#endif\n#endif\n#endif\n#endif";var J9UX="vec2 uvOffset=vec2(0.0,0.0);\n#if defined(BUMP) || defined(PARALLAX)\n#ifdef NORMALXYSCALE\nfloat normalScale=1.0;\n#else \nfloat normalScale=vBumpInfos.y;\n#endif\n#if defined(TANGENT) && defined(NORMAL)\nmat3 TBN=vTBN;\n#else\nmat3 TBN=cotangent_frame(normalW*normalScale,vPositionW,vBumpUV);\n#endif\n#endif\n#ifdef PARALLAX\nmat3 invTBN=transposeMat3(TBN);\n#ifdef PARALLAXOCCLUSION\nuvOffset=parallaxOcclusion(invTBN*-viewDirectionW,invTBN*normalW,vBumpUV,vBumpInfos.z);\n#else\nuvOffset=parallaxOffset(invTBN*viewDirectionW,vBumpInfos.z);\n#endif\n#endif\n#ifdef BUMP\n#ifdef OBJECTSPACE_NORMALMAP\nnormalW=normalize(texture2D(bumpSampler,vBumpUV).xyz*2.0-1.0);\nnormalW=normalize(mat3(normalMatrix)*normalW); \n#else\nnormalW=perturbNormal(TBN,vBumpUV+uvOffset);\n#endif\n#endif";var P9UX="#ifdef CLIPPLANE\nif (fClipDistance>0.0)\n{\ndiscard;\n}\n#endif\n#ifdef CLIPPLANE2\nif (fClipDistance2>0.0)\n{\ndiscard;\n}\n#endif\n#ifdef CLIPPLANE3\nif (fClipDistance3>0.0)\n{\ndiscard;\n}\n#endif\n#ifdef CLIPPLANE4\nif (fClipDistance4>0.0)\n{\ndiscard;\n}\n#endif";var w9UX="#ifdef FOG\n#define FOGMODE_NONE 0.\n#define FOGMODE_EXP 1.\n#define FOGMODE_EXP2 2.\n#define FOGMODE_LINEAR 3.\n#define E 2.71828\nuniform vec4 vFogInfos;\nuniform vec3 vFogColor;\nvarying vec3 vFogDistance;\nfloat CalcFogFactor()\n{\nfloat fogCoeff=1.0;\nfloat fogStart=vFogInfos.y;\nfloat fogEnd=vFogInfos.z;\nfloat fogDensity=vFogInfos.w;\nfloat fogDistance=length(vFogDistance);\nif (FOGMODE_LINEAR == vFogInfos.x)\n{\nfogCoeff=(fogEnd-fogDistance)/(fogEnd-fogStart);\n}\nelse if (FOGMODE_EXP == vFogInfos.x)\n{\nfogCoeff=1.0/pow(E,fogDistance*fogDensity);\n}\nelse if (FOGMODE_EXP2 == vFogInfos.x)\n{\nfogCoeff=1.0/pow(E,fogDistance*fogDistance*fogDensity*fogDensity);\n}\nreturn clamp(fogCoeff,0.0,1.0);\n}\n#endif";var n9UX="#ifdef CLIPPLANE\nvarying float fClipDistance;\n#endif\n#ifdef CLIPPLANE2\nvarying float fClipDistance2;\n#endif\n#ifdef CLIPPLANE3\nvarying float fClipDistance3;\n#endif\n#ifdef CLIPPLANE4\nvarying float fClipDistance4;\n#endif";var I9UX="#ifdef BUMP\n#if BUMPDIRECTUV == 1\n#define vBumpUV vMainUV1\n#elif BUMPDIRECTUV == 2\n#define vBumpUV vMainUV2\n#else\nvarying vec2 vBumpUV;\n#endif\nuniform sampler2D bumpSampler;\n#if defined(TANGENT) && defined(NORMAL) \nvarying mat3 vTBN;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\nuniform mat4 normalMatrix;\n#endif\n\nmat3 cotangent_frame(vec3 normal,vec3 p,vec2 uv)\n{\n\nuv=gl_FrontFacing ? uv : -uv;\n\nvec3 dp1=dFdx(p);\nvec3 dp2=dFdy(p);\nvec2 duv1=dFdx(uv);\nvec2 duv2=dFdy(uv);\n\nvec3 dp2perp=cross(dp2,normal);\nvec3 dp1perp=cross(normal,dp1);\nvec3 tangent=dp2perp*duv1.x+dp1perp*duv2.x;\nvec3 bitangent=dp2perp*duv1.y+dp1perp*duv2.y;\n\ntangent*=vTangentSpaceParams.x;\nbitangent*=vTangentSpaceParams.y;\n\nfloat invmax=inversesqrt(max(dot(tangent,tangent),dot(bitangent,bitangent)));\nreturn mat3(tangent*invmax,bitangent*invmax,normal);\n}\nvec3 perturbNormal(mat3 cotangentFrame,vec2 uv)\n{\nvec3 map=texture2D(bumpSampler,uv).xyz;\nmap=map*2.0-1.0;\n#ifdef NORMALXYSCALE\nmap=normalize(map*vec3(vBumpInfos.y,vBumpInfos.y,1.0));\n#endif\nreturn normalize(cotangentFrame*map);\n}\n#ifdef PARALLAX\nconst float minSamples=4.;\nconst float maxSamples=15.;\nconst int iMaxSamples=15;\n\nvec2 parallaxOcclusion(vec3 vViewDirCoT,vec3 vNormalCoT,vec2 texCoord,float parallaxScale) {\nfloat parallaxLimit=length(vViewDirCoT.xy)/vViewDirCoT.z;\nparallaxLimit*=parallaxScale;\nvec2 vOffsetDir=normalize(vViewDirCoT.xy);\nvec2 vMaxOffset=vOffsetDir*parallaxLimit;\nfloat numSamples=maxSamples+(dot(vViewDirCoT,vNormalCoT)*(minSamples-maxSamples));\nfloat stepSize=1.0/numSamples;\n\nfloat currRayHeight=1.0;\nvec2 vCurrOffset=vec2(0,0);\nvec2 vLastOffset=vec2(0,0);\nfloat lastSampledHeight=1.0;\nfloat currSampledHeight=1.0;\nfor (int i=0; icurrRayHeight)\n{\nfloat delta1=currSampledHeight-currRayHeight;\nfloat delta2=(currRayHeight+stepSize)-lastSampledHeight;\nfloat ratio=delta1/(delta1+delta2);\nvCurrOffset=(ratio)* vLastOffset+(1.0-ratio)*vCurrOffset;\n\nbreak;\n}\nelse\n{\ncurrRayHeight-=stepSize;\nvLastOffset=vCurrOffset;\nvCurrOffset+=stepSize*vMaxOffset;\nlastSampledHeight=currSampledHeight;\n}\n}\nreturn vCurrOffset;\n}\nvec2 parallaxOffset(vec3 viewDir,float heightScale)\n{\n\nfloat height=texture2D(bumpSampler,vBumpUV).w;\nvec2 texCoordOffset=heightScale*viewDir.xy*height;\nreturn -texCoordOffset;\n}\n#endif\n#endif";var F9UX="#if defined(COLORGRADING) && !defined(COLORGRADING3D)\n\nvec3 sampleTexture3D(sampler2D colorTransform,vec3 color,vec2 sampler3dSetting)\n{\nfloat sliceSize=2.0*sampler3dSetting.x; \n#ifdef SAMPLER3DGREENDEPTH\nfloat sliceContinuous=(color.g-sampler3dSetting.x)*sampler3dSetting.y;\n#else\nfloat sliceContinuous=(color.b-sampler3dSetting.x)*sampler3dSetting.y;\n#endif\nfloat sliceInteger=floor(sliceContinuous);\n\n\nfloat sliceFraction=sliceContinuous-sliceInteger;\n#ifdef SAMPLER3DGREENDEPTH\nvec2 sliceUV=color.rb;\n#else\nvec2 sliceUV=color.rg;\n#endif\nsliceUV.x*=sliceSize;\nsliceUV.x+=sliceInteger*sliceSize;\nsliceUV=clamp(sliceUV,0.,1.);\nvec4 slice0Color=texture2D(colorTransform,sliceUV);\nsliceUV.x+=sliceSize;\nsliceUV=clamp(sliceUV,0.,1.);\nvec4 slice1Color=texture2D(colorTransform,sliceUV);\nvec3 result=mix(slice0Color.rgb,slice1Color.rgb,sliceFraction);\n#ifdef SAMPLER3DBGRMAP\ncolor.rgb=result.rgb;\n#else\ncolor.rgb=result.bgr;\n#endif\nreturn color;\n}\n#endif\n#ifdef TONEMAPPING_ACES\n\n\n\n\n\nconst mat3 ACESInputMat=mat3(\nvec3(0.59719,0.07600,0.02840),\nvec3(0.35458,0.90834,0.13383),\nvec3(0.04823,0.01566,0.83777)\n);\n\nconst mat3 ACESOutputMat=mat3(\nvec3( 1.60475,-0.10208,-0.00327),\nvec3(-0.53108,1.10813,-0.07276),\nvec3(-0.07367,-0.00605,1.07602)\n);\nvec3 RRTAndODTFit(vec3 v)\n{\nvec3 a=v*(v+0.0245786)-0.000090537;\nvec3 b=v*(0.983729*v+0.4329510)+0.238081;\nreturn a/b;\n}\nvec3 ACESFitted(vec3 color)\n{\ncolor=ACESInputMat*color;\n\ncolor=RRTAndODTFit(color);\ncolor=ACESOutputMat*color;\n\ncolor=clamp(color,0.0,1.0);\nreturn color;\n}\n#endif\nvec4 applyImageProcessing(vec4 result) {\n#ifdef EXPOSURE\nresult.rgb*=exposureLinear;\n#endif\n#ifdef VIGNETTE\n\nvec2 viewportXY=gl_FragCoord.xy*vInverseScreenSize;\nviewportXY=viewportXY*2.0-1.0;\nvec3 vignetteXY1=vec3(viewportXY*vignetteSettings1.xy+vignetteSettings1.zw,1.0);\nfloat vignetteTerm=dot(vignetteXY1,vignetteXY1);\nfloat vignette=pow(vignetteTerm,vignetteSettings2.w);\n\nvec3 vignetteColor=vignetteSettings2.rgb;\n#ifdef VIGNETTEBLENDMODEMULTIPLY\nvec3 vignetteColorMultiplier=mix(vignetteColor,vec3(1,1,1),vignette);\nresult.rgb*=vignetteColorMultiplier;\n#endif\n#ifdef VIGNETTEBLENDMODEOPAQUE\nresult.rgb=mix(vignetteColor,result.rgb,vignette);\n#endif\n#endif\n#ifdef TONEMAPPING\n#ifdef TONEMAPPING_ACES\nresult.rgb=ACESFitted(result.rgb);\n#else\nconst float tonemappingCalibration=1.590579;\nresult.rgb=1.0-exp2(-tonemappingCalibration*result.rgb);\n#endif\n#endif\n\nresult.rgb=toGammaSpace(result.rgb);\nresult.rgb=clamp(result.rgb,0.0,1.0);\n#ifdef CONTRAST\n\nvec3 resultHighContrast=applyEaseInOut(result.rgb);\nif (contrast<1.0) {\n\nresult.rgb=mix(vec3(0.5,0.5,0.5),result.rgb,contrast);\n} else {\n\nresult.rgb=mix(result.rgb,resultHighContrast,contrast-1.0);\n}\n#endif\n\n#ifdef COLORGRADING\nvec3 colorTransformInput=result.rgb*colorTransformSettings.xxx+colorTransformSettings.yyy;\n#ifdef COLORGRADING3D\nvec3 colorTransformOutput=texture(txColorTransform,colorTransformInput).rgb;\n#else\nvec3 colorTransformOutput=sampleTexture3D(txColorTransform,colorTransformInput,colorTransformSettings.yz).rgb;\n#endif\nresult.rgb=mix(result.rgb,colorTransformOutput,colorTransformSettings.www);\n#endif\n#ifdef COLORCURVES\n\nfloat luma=getLuminance(result.rgb);\nvec2 curveMix=clamp(vec2(luma*3.0-1.5,luma*-3.0+1.5),vec2(0.0),vec2(1.0));\nvec4 colorCurve=vCameraColorCurveNeutral+curveMix.x*vCameraColorCurvePositive-curveMix.y*vCameraColorCurveNegative;\nresult.rgb*=colorCurve.rgb;\nresult.rgb=mix(vec3(luma),result.rgb,colorCurve.a);\n#endif\nreturn result;\n}";var i9UX="#ifdef EXPOSURE\nuniform float exposureLinear;\n#endif\n#ifdef CONTRAST\nuniform float contrast;\n#endif\n#ifdef VIGNETTE\nuniform vec2 vInverseScreenSize;\nuniform vec4 vignetteSettings1;\nuniform vec4 vignetteSettings2;\n#endif\n#ifdef COLORCURVES\nuniform vec4 vCameraColorCurveNegative;\nuniform vec4 vCameraColorCurveNeutral;\nuniform vec4 vCameraColorCurvePositive;\n#endif\n#ifdef COLORGRADING\n#ifdef COLORGRADING3D\nuniform highp sampler3D txColorTransform;\n#else\nuniform sampler2D txColorTransform;\n#endif\nuniform vec4 colorTransformSettings;\n#endif";var r9UX="#ifdef USE_LOCAL_REFLECTIONMAP_CUBIC\nvec3 parallaxCorrectNormal( vec3 vertexPos,vec3 origVec,vec3 cubeSize,vec3 cubePos ) {\n\nvec3 invOrigVec=vec3(1.0,1.0,1.0)/origVec;\nvec3 halfSize=cubeSize*0.5;\nvec3 intersecAtMaxPlane=(cubePos+halfSize-vertexPos)*invOrigVec;\nvec3 intersecAtMinPlane=(cubePos-halfSize-vertexPos)*invOrigVec;\n\nvec3 largestIntersec=max(intersecAtMaxPlane,intersecAtMinPlane);\n\nfloat distance=min(min(largestIntersec.x,largestIntersec.y),largestIntersec.z);\n\nvec3 intersectPositionWS=vertexPos+origVec*distance;\n\nreturn intersectPositionWS-cubePos;\n}\n#endif\nvec3 computeReflectionCoords(vec4 worldPos,vec3 worldNormal)\n{\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvec3 direction=normalize(vDirectionW);\nfloat lon=atan(direction.z,direction.x);\nfloat lat=acos(direction.y);\nvec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;\nfloat s=sphereCoords.x*0.5+0.5;\nfloat t=sphereCoords.y; \n#ifdef REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED\nreturn vec3(1.0-s,t,0);\n#else\nreturn vec3(s,t,0);\n#endif\n#endif\n#ifdef REFLECTIONMAP_EQUIRECTANGULAR\nvec3 cameraToVertex=normalize(worldPos.xyz-vEyePosition.xyz);\nvec3 r=normalize(reflect(cameraToVertex,worldNormal));\nfloat lon=atan(r.z,r.x);\nfloat lat=acos(r.y);\nvec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;\nfloat s=sphereCoords.x*0.5+0.5;\nfloat t=sphereCoords.y; \nreturn vec3(s,t,0);\n#endif\n#ifdef REFLECTIONMAP_SPHERICAL\nvec3 viewDir=normalize(vec3(view*worldPos));\nvec3 viewNormal=normalize(vec3(view*vec4(worldNormal,0.0)));\nvec3 r=reflect(viewDir,viewNormal);\nr.z=r.z-1.0;\nfloat m=2.0*length(r);\nreturn vec3(r.x/m+0.5,1.0-r.y/m-0.5,0);\n#endif\n#ifdef REFLECTIONMAP_PLANAR\nvec3 viewDir=worldPos.xyz-vEyePosition.xyz;\nvec3 coords=normalize(reflect(viewDir,worldNormal));\nreturn vec3(reflectionMatrix*vec4(coords,1));\n#endif\n#ifdef REFLECTIONMAP_CUBIC\nvec3 viewDir=normalize(worldPos.xyz-vEyePosition.xyz);\n\nvec3 coords=reflect(viewDir,worldNormal);\n#ifdef USE_LOCAL_REFLECTIONMAP_CUBIC\ncoords=parallaxCorrectNormal(worldPos.xyz,coords,vReflectionSize,vReflectionPosition);\n#endif\ncoords=vec3(reflectionMatrix*vec4(coords,0));\n#ifdef INVERTCUBICMAP\ncoords.y*=-1.0;\n#endif\nreturn coords;\n#endif\n#ifdef REFLECTIONMAP_PROJECTION\nreturn vec3(reflectionMatrix*(view*worldPos));\n#endif\n#ifdef REFLECTIONMAP_SKYBOX\nreturn vPositionUVW;\n#endif\n#ifdef REFLECTIONMAP_EXPLICIT\nreturn vec3(0,0,0);\n#endif\n}";var z9UX="#ifdef FRESNEL\nfloat computeFresnelTerm(vec3 viewDirection,vec3 worldNormal,float bias,float power)\n{\nfloat fresnelTerm=pow(bias+abs(dot(viewDirection,worldNormal)),power);\nreturn clamp(fresnelTerm,0.,1.);\n}\n#endif";var V9UX="#ifdef SHADOWS\n#ifndef SHADOWFLOAT\nfloat unpack(vec4 color)\n{\nconst vec4 bit_shift=vec4(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);\nreturn dot(color,bit_shift);\n}\n#endif\nfloat computeShadowCube(vec3 lightPosition,samplerCube shadowSampler,float darkness,vec2 depthValues)\n{\nvec3 directionToLight=vPositionW-lightPosition;\nfloat depth=length(directionToLight);\ndepth=(depth+depthValues.x)/(depthValues.y);\ndepth=clamp(depth,0.,1.0);\ndirectionToLight=normalize(directionToLight);\ndirectionToLight.y=-directionToLight.y;\n#ifndef SHADOWFLOAT\nfloat shadow=unpack(textureCube(shadowSampler,directionToLight));\n#else\nfloat shadow=textureCube(shadowSampler,directionToLight).x;\n#endif\nif (depth>shadow)\n{\nreturn darkness;\n}\nreturn 1.0;\n}\nfloat computeShadowWithPoissonSamplingCube(vec3 lightPosition,samplerCube shadowSampler,float mapSize,float darkness,vec2 depthValues)\n{\nvec3 directionToLight=vPositionW-lightPosition;\nfloat depth=length(directionToLight);\ndepth=(depth+depthValues.x)/(depthValues.y);\ndepth=clamp(depth,0.,1.0);\ndirectionToLight=normalize(directionToLight);\ndirectionToLight.y=-directionToLight.y;\nfloat visibility=1.;\nvec3 poissonDisk[4];\npoissonDisk[0]=vec3(-1.0,1.0,-1.0);\npoissonDisk[1]=vec3(1.0,-1.0,-1.0);\npoissonDisk[2]=vec3(-1.0,-1.0,-1.0);\npoissonDisk[3]=vec3(1.0,-1.0,1.0);\n\n#ifndef SHADOWFLOAT\nif (unpack(textureCube(shadowSampler,directionToLight+poissonDisk[0]*mapSize))1.0 || uv.y<0. || uv.y>1.0)\n{\nreturn 1.0;\n}\nfloat shadowPixelDepth=clamp(depthMetric,0.,1.0);\n#ifndef SHADOWFLOAT\nfloat shadow=unpack(texture2D(shadowSampler,uv));\n#else\nfloat shadow=texture2D(shadowSampler,uv).x;\n#endif\nif (shadowPixelDepth>shadow)\n{\nreturn computeFallOff(darkness,clipSpace.xy,frustumEdgeFalloff);\n}\nreturn 1.;\n}\nfloat computeShadowWithPoissonSampling(vec4 vPositionFromLight,float depthMetric,sampler2D shadowSampler,float mapSize,float darkness,float frustumEdgeFalloff)\n{\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec2 uv=0.5*clipSpace.xy+vec2(0.5);\nif (uv.x<0. || uv.x>1.0 || uv.y<0. || uv.y>1.0)\n{\nreturn 1.0;\n}\nfloat shadowPixelDepth=clamp(depthMetric,0.,1.0);\nfloat visibility=1.;\nvec2 poissonDisk[4];\npoissonDisk[0]=vec2(-0.94201624,-0.39906216);\npoissonDisk[1]=vec2(0.94558609,-0.76890725);\npoissonDisk[2]=vec2(-0.094184101,-0.92938870);\npoissonDisk[3]=vec2(0.34495938,0.29387760);\n\n#ifndef SHADOWFLOAT\nif (unpack(texture2D(shadowSampler,uv+poissonDisk[0]*mapSize))1.0 || uv.y<0. || uv.y>1.0)\n{\nreturn 1.0;\n}\nfloat shadowPixelDepth=clamp(depthMetric,0.,1.0);\n#ifndef SHADOWFLOAT\nfloat shadowMapSample=unpack(texture2D(shadowSampler,uv));\n#else\nfloat shadowMapSample=texture2D(shadowSampler,uv).x;\n#endif\nfloat esm=1.0-clamp(exp(min(87.,depthScale*shadowPixelDepth))*shadowMapSample,0.,1.-darkness);\nreturn computeFallOff(esm,clipSpace.xy,frustumEdgeFalloff);\n}\nfloat computeShadowWithCloseESM(vec4 vPositionFromLight,float depthMetric,sampler2D shadowSampler,float darkness,float depthScale,float frustumEdgeFalloff)\n{\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec2 uv=0.5*clipSpace.xy+vec2(0.5);\nif (uv.x<0. || uv.x>1.0 || uv.y<0. || uv.y>1.0)\n{\nreturn 1.0;\n}\nfloat shadowPixelDepth=clamp(depthMetric,0.,1.0); \n#ifndef SHADOWFLOAT\nfloat shadowMapSample=unpack(texture2D(shadowSampler,uv));\n#else\nfloat shadowMapSample=texture2D(shadowSampler,uv).x;\n#endif\nfloat esm=clamp(exp(min(87.,-depthScale*(shadowPixelDepth-shadowMapSample))),darkness,1.);\nreturn computeFallOff(esm,clipSpace.xy,frustumEdgeFalloff);\n}\n#ifdef WEBGL2\n\nfloat computeShadowWithPCF1(vec4 vPositionFromLight,float depthMetric,sampler2DShadow shadowSampler,float darkness,float frustumEdgeFalloff)\n{\nif (depthMetric>1.0 || depthMetric<0.0) {\nreturn 1.0;\n}\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec3 uvDepth=vec3(0.5*clipSpace.xyz+vec3(0.5));\nfloat shadow=texture2D(shadowSampler,uvDepth);\nshadow=mix(darkness,1.,shadow);\nreturn computeFallOff(shadow,clipSpace.xy,frustumEdgeFalloff);\n}\n\n\n\nfloat computeShadowWithPCF3(vec4 vPositionFromLight,float depthMetric,sampler2DShadow shadowSampler,vec2 shadowMapSizeAndInverse,float darkness,float frustumEdgeFalloff)\n{\nif (depthMetric>1.0 || depthMetric<0.0) {\nreturn 1.0;\n}\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec3 uvDepth=vec3(0.5*clipSpace.xyz+vec3(0.5));\nvec2 uv=uvDepth.xy*shadowMapSizeAndInverse.x; \nuv+=0.5; \nvec2 st=fract(uv); \nvec2 base_uv=floor(uv)-0.5; \nbase_uv*=shadowMapSizeAndInverse.y; \n\n\n\n\nvec2 uvw0=3.-2.*st;\nvec2 uvw1=1.+2.*st;\nvec2 u=vec2((2.-st.x)/uvw0.x-1.,st.x/uvw1.x+1.)*shadowMapSizeAndInverse.y;\nvec2 v=vec2((2.-st.y)/uvw0.y-1.,st.y/uvw1.y+1.)*shadowMapSizeAndInverse.y;\nfloat shadow=0.;\nshadow+=uvw0.x*uvw0.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[0],v[0]),uvDepth.z));\nshadow+=uvw1.x*uvw0.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[1],v[0]),uvDepth.z));\nshadow+=uvw0.x*uvw1.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[0],v[1]),uvDepth.z));\nshadow+=uvw1.x*uvw1.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[1],v[1]),uvDepth.z));\nshadow=shadow/16.;\nshadow=mix(darkness,1.,shadow);\nreturn computeFallOff(shadow,clipSpace.xy,frustumEdgeFalloff);\n}\n\n\n\nfloat computeShadowWithPCF5(vec4 vPositionFromLight,float depthMetric,sampler2DShadow shadowSampler,vec2 shadowMapSizeAndInverse,float darkness,float frustumEdgeFalloff)\n{\nif (depthMetric>1.0 || depthMetric<0.0) {\nreturn 1.0;\n}\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec3 uvDepth=vec3(0.5*clipSpace.xyz+vec3(0.5));\nvec2 uv=uvDepth.xy*shadowMapSizeAndInverse.x; \nuv+=0.5; \nvec2 st=fract(uv); \nvec2 base_uv=floor(uv)-0.5; \nbase_uv*=shadowMapSizeAndInverse.y; \n\n\nvec2 uvw0=4.-3.*st;\nvec2 uvw1=vec2(7.);\nvec2 uvw2=1.+3.*st;\nvec3 u=vec3((3.-2.*st.x)/uvw0.x-2.,(3.+st.x)/uvw1.x,st.x/uvw2.x+2.)*shadowMapSizeAndInverse.y;\nvec3 v=vec3((3.-2.*st.y)/uvw0.y-2.,(3.+st.y)/uvw1.y,st.y/uvw2.y+2.)*shadowMapSizeAndInverse.y;\nfloat shadow=0.;\nshadow+=uvw0.x*uvw0.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[0],v[0]),uvDepth.z));\nshadow+=uvw1.x*uvw0.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[1],v[0]),uvDepth.z));\nshadow+=uvw2.x*uvw0.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[2],v[0]),uvDepth.z));\nshadow+=uvw0.x*uvw1.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[0],v[1]),uvDepth.z));\nshadow+=uvw1.x*uvw1.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[1],v[1]),uvDepth.z));\nshadow+=uvw2.x*uvw1.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[2],v[1]),uvDepth.z));\nshadow+=uvw0.x*uvw2.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[0],v[2]),uvDepth.z));\nshadow+=uvw1.x*uvw2.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[1],v[2]),uvDepth.z));\nshadow+=uvw2.x*uvw2.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[2],v[2]),uvDepth.z));\nshadow=shadow/144.;\nshadow=mix(darkness,1.,shadow);\nreturn computeFallOff(shadow,clipSpace.xy,frustumEdgeFalloff);\n}\nconst vec3 PoissonSamplers32[64]=vec3[64](\nvec3(0.06407013,0.05409927,0.),\nvec3(0.7366577,0.5789394,0.),\nvec3(-0.6270542,-0.5320278,0.),\nvec3(-0.4096107,0.8411095,0.),\nvec3(0.6849564,-0.4990818,0.),\nvec3(-0.874181,-0.04579735,0.),\nvec3(0.9989998,0.0009880066,0.),\nvec3(-0.004920578,-0.9151649,0.),\nvec3(0.1805763,0.9747483,0.),\nvec3(-0.2138451,0.2635818,0.),\nvec3(0.109845,0.3884785,0.),\nvec3(0.06876755,-0.3581074,0.),\nvec3(0.374073,-0.7661266,0.),\nvec3(0.3079132,-0.1216763,0.),\nvec3(-0.3794335,-0.8271583,0.),\nvec3(-0.203878,-0.07715034,0.),\nvec3(0.5912697,0.1469799,0.),\nvec3(-0.88069,0.3031784,0.),\nvec3(0.5040108,0.8283722,0.),\nvec3(-0.5844124,0.5494877,0.),\nvec3(0.6017799,-0.1726654,0.),\nvec3(-0.5554981,0.1559997,0.),\nvec3(-0.3016369,-0.3900928,0.),\nvec3(-0.5550632,-0.1723762,0.),\nvec3(0.925029,0.2995041,0.),\nvec3(-0.2473137,0.5538505,0.),\nvec3(0.9183037,-0.2862392,0.),\nvec3(0.2469421,0.6718712,0.),\nvec3(0.3916397,-0.4328209,0.),\nvec3(-0.03576927,-0.6220032,0.),\nvec3(-0.04661255,0.7995201,0.),\nvec3(0.4402924,0.3640312,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.)\n);\nconst vec3 PoissonSamplers64[64]=vec3[64](\nvec3(-0.613392,0.617481,0.),\nvec3(0.170019,-0.040254,0.),\nvec3(-0.299417,0.791925,0.),\nvec3(0.645680,0.493210,0.),\nvec3(-0.651784,0.717887,0.),\nvec3(0.421003,0.027070,0.),\nvec3(-0.817194,-0.271096,0.),\nvec3(-0.705374,-0.668203,0.),\nvec3(0.977050,-0.108615,0.),\nvec3(0.063326,0.142369,0.),\nvec3(0.203528,0.214331,0.),\nvec3(-0.667531,0.326090,0.),\nvec3(-0.098422,-0.295755,0.),\nvec3(-0.885922,0.215369,0.),\nvec3(0.566637,0.605213,0.),\nvec3(0.039766,-0.396100,0.),\nvec3(0.751946,0.453352,0.),\nvec3(0.078707,-0.715323,0.),\nvec3(-0.075838,-0.529344,0.),\nvec3(0.724479,-0.580798,0.),\nvec3(0.222999,-0.215125,0.),\nvec3(-0.467574,-0.405438,0.),\nvec3(-0.248268,-0.814753,0.),\nvec3(0.354411,-0.887570,0.),\nvec3(0.175817,0.382366,0.),\nvec3(0.487472,-0.063082,0.),\nvec3(-0.084078,0.898312,0.),\nvec3(0.488876,-0.783441,0.),\nvec3(0.470016,0.217933,0.),\nvec3(-0.696890,-0.549791,0.),\nvec3(-0.149693,0.605762,0.),\nvec3(0.034211,0.979980,0.),\nvec3(0.503098,-0.308878,0.),\nvec3(-0.016205,-0.872921,0.),\nvec3(0.385784,-0.393902,0.),\nvec3(-0.146886,-0.859249,0.),\nvec3(0.643361,0.164098,0.),\nvec3(0.634388,-0.049471,0.),\nvec3(-0.688894,0.007843,0.),\nvec3(0.464034,-0.188818,0.),\nvec3(-0.440840,0.137486,0.),\nvec3(0.364483,0.511704,0.),\nvec3(0.034028,0.325968,0.),\nvec3(0.099094,-0.308023,0.),\nvec3(0.693960,-0.366253,0.),\nvec3(0.678884,-0.204688,0.),\nvec3(0.001801,0.780328,0.),\nvec3(0.145177,-0.898984,0.),\nvec3(0.062655,-0.611866,0.),\nvec3(0.315226,-0.604297,0.),\nvec3(-0.780145,0.486251,0.),\nvec3(-0.371868,0.882138,0.),\nvec3(0.200476,0.494430,0.),\nvec3(-0.494552,-0.711051,0.),\nvec3(0.612476,0.705252,0.),\nvec3(-0.578845,-0.768792,0.),\nvec3(-0.772454,-0.090976,0.),\nvec3(0.504440,0.372295,0.),\nvec3(0.155736,0.065157,0.),\nvec3(0.391522,0.849605,0.),\nvec3(-0.620106,-0.328104,0.),\nvec3(0.789239,-0.419965,0.),\nvec3(-0.545396,0.538133,0.),\nvec3(-0.178564,-0.596057,0.)\n);\n\n\n\n\n\nfloat computeShadowWithPCSS(vec4 vPositionFromLight,float depthMetric,sampler2D depthSampler,sampler2DShadow shadowSampler,float shadowMapSizeInverse,float lightSizeUV,float darkness,float frustumEdgeFalloff,int searchTapCount,int pcfTapCount,vec3[64] poissonSamplers)\n{\nif (depthMetric>1.0 || depthMetric<0.0) {\nreturn 1.0;\n}\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec3 uvDepth=vec3(0.5*clipSpace.xyz+vec3(0.5));\nfloat blockerDepth=0.0;\nfloat sumBlockerDepth=0.0;\nfloat numBlocker=0.0;\nfor (int i=0; i=j4Z;j4Z++){(W4Z=M4Z[j4Z])||(V4Z=(D4Z>T38X.Y4CX-d4lX.I4XX?W4Z(V4Z):+T38X.t4CX>=D4Z?W4Z(Q4Z,h4Z,V4Z):W4Z(Q4Z,h4Z))&&V4Z);}return+T38X.t4CX>D4Z||V4Z||Object.defineProperty(Q4Z,h4Z,V4Z),V4Z;}else{D4Z=arguments.length;V4Z=D4Z<+T38X.l4CX?Q4Z:T38X.X4CX===X4Z?X4Z=Object.getOwnPropertyDescriptor(Q4Z,h4Z):X4Z;if(T38X.W4CX==typeof Reflect&&T38X.d4CX==typeof Reflect.decorate){V4Z=Reflect.decorate(M4Z,Q4Z,h4Z,X4Z);}else for(var j4Z=M4Z.length-(T38X.j4CX-d4lX.I4XX);+T38X.k4CX<=j4Z;j4Z--){(W4Z=M4Z[j4Z])&&(V4Z=(D4Zthis._maxRank&&(this._maxRank=t4Z),this._defines[t4Z]=new Array());this._defines[t4Z].push(K4Z);}else{this._defines[t4Z]&&(t4Z>this._currentRank||(this._currentRank=t4Z),t4Z<=this._maxRank||(this._maxRank=t4Z),this._defines[t4Z]=new Array());this._defines[t4Z].push(K4Z);}},z4Z.prototype.addCPUSkinningFallback=function(p4Z,i4Z){var H4CX="167932";var F5CX=645707546;var X1RR;X1RR=F5CX;if(d4lX.i0zz(+G3CX.k4CX,+H4CX)!==X1RR&&!H5ZZ.W5RR()){this._mesh=i4Z;p4Z>=this._currentRank||(this._currentRank=p4Z);p4Zthis._maxRank&&(this._maxRank=p4Z);}},Object.defineProperty(z4Z.prototype,A4CX,{get:function(){return this._currentRank<=this._maxRank;},enumerable:!(G3CX.k4CX*d4lX.n4XX),configurable:!+G3CX.k4CX}),z4Z.prototype.reduce=function(f4Z,Z4Z){var q32X=G3CX;var u4Z,e4Z;if(this._mesh&&this._mesh.computeBonesUsingShaders&&d4lX.I4XX=b8Z.indexOf(g8uX)?b8Z:n4Z.Engine.ShadersRepository*b8Z,this._engine._loadFile(C8Z%y8uX,n8Z)):n8Z(window.atob(b8Z.substr(J32X.Y4CX*d4lX.n4XX)));}},o4Z.prototype._dumpShadersSource=function(i8Z,t8Z,u8Z){var K72X=G3CX;var Z8uX="Fragment shader: ";var m8uX="Vertex shader: ";var j8uX="\t";var X8uX="\n1\t";var l8uX="k";var t8uX="7500";var Y8uX="6200";var Q8uX="2502";var j5CX=5995;var m0CX=448;var K8Z,L8Z,p8Z,a8Z,z8Z;d4lX.i4XX(d4lX.R8CX);var V1RR=d4lX.z4XX(d4lX.Y8CX,j5CX,d4lX.l8CX,m0CX,d4lX.j8CX);K8Z=(K72X.j4CX*d4lX.n4XX(\((.*)\))*(\[(.*)\])*/g,y8Z=d2Z.exec(Y2Z),R8Z=new String(Y2Z);B72X.X4CX!=y8Z;){d4lX.F4XX(d4lX.n4XX);F8Z=y8Z[d4lX.r4XX(d4lX.I4XX,B72X.j4CX)];if(-(B72X.j4CX-d4lX.I4XX)!==F8Z.indexOf(o8uX)&&(F8Z=F8Z.replace(u8uX,B72X.e4CX),this._engine.supportsUniformBuffers&&(F8Z=(F8Z=F8Z.replace(L8uX,e8uX)).replace(x8uX,e8uX)),F8Z+=c8uX),!o4Z.IncludesShadersStore[F8Z]){r2Z=n4Z.Engine.ShadersRepository+T8uX+F8Z+M8uX;return void this._engine._loadFile(r2Z,function(w2Z){o4Z.IncludesShadersStore[F8Z]=w2Z;G2Z._processIncludes(R8Z,v2Z);});}o8Z=o4Z.IncludesShadersStore[F8Z];if(y8Z[+B72X.U4CX])for(var P8Z=y8Z[+B72X.l4CX].split(B72X.N8uX),B8Z=B72X.k4CX-d4lX.I4XX;B8ZC7I.x?C7I.x:A7I)C7I.y?C7I.y:b7I)T7I.x?s7I.x:T7I.x,s7I.y>T7I.y?s7I.y:T7I.y);},N3I.Transform=function(U4I,Y4I){var H4I;H4I=N3I.Zero();return N3I.TransformToRef(U4I,Y4I,H4I),H4I;},N3I.TransformToRef=function(S4I,d4I,m4I){var r4I,J4I;d4lX.F4XX(d4lX.G8CX);var a1RR=d4lX.r4XX(d4lX.w4XX,B1CX,F3CX);r4I=S4I.x*d4I.m[x78X.k4CX|d4lX.I4XX]+S4I.y*d4I.m[+x78X.t4CX]+d4I.m[a1RR];J4I=S4I.x*d4I.m[+x78X.j4CX]+S4I.y*d4I.m[+x78X.V8uX]+d4I.m[d4lX.S8CX];m4I.x=r4I;m4I.y=J4I;},N3I.PointInTriangle=function(V4I,G4I,v4I,w4I){var h4I,Q4I,D4I,X4I;h4I=a3uX*(-v4I.y*w4I.x+G4I.y*(-v4I.x+w4I.x)+G4I.x*(v4I.y-w4I.y)+v4I.x*w4I.y);Q4I=h4Ithis.x&&(this.x=z8I),t8I>this.y&&(this.y=t8I),K8I>this.z&&(this.z=K8I),this;},Object.defineProperty(t4I.prototype,A3uX,{get:function(){var p8I,i8I,u8I;p8I=Math.abs(this.x);i8I=Math.abs(this.y);if(p8I!==i8I){d4lX.i4XX(d4lX.w4XX);return!d4lX.r4XX(d4lX.I4XX,x78X.k4CX);}u8I=Math.abs(this.z);return p8I!==u8I||i8I!==u8I;},enumerable:!(x78X.k4CX|d4lX.I4XX),configurable:!(x78X.k4CX|d4lX.I4XX)}),t4I.prototype.floor=function(){return new t4I(Math.floor(this.x),Math.floor(this.y),Math.floor(this.z));},t4I.prototype.fract=function(){return new t4I(this.x-Math.floor(this.x),this.y-Math.floor(this.y),this.z-Math.floor(this.z));},t4I.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z);},t4I.prototype.lengthSquared=function(){return this.x*this.x+this.y*this.y+this.z*this.z;},t4I.prototype.normalize=function(){var k8I,f8I;k8I=this.length();if(x78X.k4CX-d4lX.I4XX===k8I||d4lX.n4XX===k8I){return this;}d4lX.F4XX(d4lX.U8CX);f8I=d4lX.z4XX(k8I,x78X.j4CX);return this.x*=f8I,this.y*=f8I,this.z*=f8I,this;},t4I.prototype.normalizeToNew=function(){var g8I;g8I=new t4I(+x78X.k4CX,+x78X.k4CX,+x78X.k4CX);return this.normalizeToRef(g8I),g8I;},t4I.prototype.normalizeToRef=function(e8I){var Z8I,q8I;Z8I=this.length();if(x78X.k4CX-d4lX.I4XX===Z8I||(x78X.j4CX|d4lX.I4XX)===Z8I){return e8I.set(this.x,this.y,this.z),e8I;}d4lX.F4XX(d4lX.y8CX);q8I=d4lX.r4XX(Z8I,d4lX.n4XX);return this.scaleToRef(q8I,e8I),e8I;},t4I.prototype.clone=function(){return new t4I(this.x,this.y,this.z);},t4I.prototype.copyFrom=function(F8I){return this.x=F8I.x,this.y=F8I.y,this.z=F8I.z,this;},t4I.prototype.copyFromFloats=function(o8I,y8I,B8I){return this.x=o8I,this.y=y8I,this.z=B8I,this;},t4I.prototype.set=function(P8I,O8I,s8I){return this.copyFromFloats(P8I,O8I,s8I);},t4I.GetClipFactor=function(Y2I,d2I,H2I,U2I){var T8I;T8I=t4I.Dot(Y2I,H2I)-U2I;return T8I/(T8I-(t4I.Dot(d2I,H2I)-U2I));},t4I.GetAngleBetweenVectors=function(G2I,v2I,w2I){var S2I,m2I,r2I,J2I;S2I=A6I.Vector3[x78X.j4CX|d4lX.I4XX].copyFrom(G2I).normalize();m2I=A6I.Vector3[x78X.U4CX|d4lX.I4XX].copyFrom(v2I).normalize();r2I=t4I.Dot(S2I,m2I);J2I=A6I.Vector3[+x78X.l4CX];return t4I.CrossToRef(S2I,m2I,J2I),(x78X.k4CX|d4lX.I4XX)W1I.x?W1I.x:h1I)W1I.y?W1I.y:D1I)W1I.z?W1I.z:j1I)this.x&&(this.x=X0W.x),X0W.y>this.y&&(this.y=X0W.y),X0W.z>this.z&&(this.z=X0W.z),X0W.w>this.w&&(this.w=X0W.w),this;},X6W.prototype.floor=function(){return new X6W(Math.floor(this.x),Math.floor(this.y),Math.floor(this.z),Math.floor(this.w));},X6W.prototype.fract=function(){return new X6W(this.x-Math.floor(this.x),this.y-Math.floor(this.y),this.z-Math.floor(this.z),this.w-Math.floor(this.w));},X6W.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);},X6W.prototype.lengthSquared=function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w;},X6W.prototype.normalize=function(){var j0W,W0W;j0W=this.length();if(+x78X.k4CX===j0W){return this;}d4lX.i4XX(d4lX.U8CX);W0W=d4lX.r4XX(j0W,x78X.j4CX);return this.x*=W0W,this.y*=W0W,this.z*=W0W,this.w*=W0W,this;},X6W.prototype.toVector3=function(){return new l6I(this.x,this.y,this.z);},X6W.prototype.clone=function(){return new X6W(this.x,this.y,this.z,this.w);},X6W.prototype.copyFrom=function(M0W){return this.x=M0W.x,this.y=M0W.y,this.z=M0W.z,this.w=M0W.w,this;},X6W.prototype.copyFromFloats=function(I0W,x0W,c0W,N0W){return this.x=I0W,this.y=x0W,this.z=c0W,this.w=N0W,this;},X6W.prototype.set=function(E0W,l0W,A0W,b0W){return this.copyFromFloats(E0W,l0W,A0W,b0W);},X6W.FromArray=function(C0W,n0W){return n0W||(n0W=d4lX.I4XX),new X6W(C0W[n0W],C0W[n0W+d4lX.n4XX],C0W[n0W+ +x78X.U4CX],C0W[n0W+(x78X.l4CX-d4lX.I4XX)]);},X6W.FromArrayToRef=function(L0W,a0W,z0W){z0W.x=L0W[a0W];d4lX.i4XX(d4lX.w8CX);z0W.y=L0W[d4lX.z4XX(d4lX.I4XX,a0W,x78X.j4CX)];d4lX.i4XX(d4lX.m8CX);z0W.z=L0W[d4lX.z4XX(a0W,x78X.U4CX)];d4lX.F4XX(d4lX.w8CX);z0W.w=L0W[d4lX.z4XX(d4lX.I4XX,a0W,x78X.l4CX)];},X6W.FromFloatArrayToRef=function(t0W,K0W,p0W){X6W.FromArrayToRef(t0W,K0W,p0W);},X6W.FromFloatsToRef=function(u0W,k0W,f0W,g0W,i0W){i0W.x=u0W;i0W.y=k0W;i0W.z=f0W;i0W.w=g0W;},X6W.Zero=function(){d4lX.i4XX(d4lX.w4XX);return new X6W(d4lX.z4XX(d4lX.I4XX,x78X.k4CX),+x78X.k4CX,d4lX.r4XX(d4lX.I4XX,x78X.k4CX,d4lX.F4XX(d4lX.n4XX)),d4lX.z4XX(d4lX.I4XX,x78X.k4CX,d4lX.F4XX(d4lX.w4XX)));},X6W.One=function(){d4lX.F4XX(d4lX.n4XX);return new X6W(+x78X.j4CX,+x78X.j4CX,d4lX.n4XX,d4lX.z4XX(d4lX.I4XX,x78X.j4CX));},X6W.Normalize=function(Z0W){var e0W;e0W=X6W.Zero();return X6W.NormalizeToRef(Z0W,e0W),e0W;},X6W.NormalizeToRef=function(F0W,q0W){q0W.copyFrom(F0W);q0W.normalize();},X6W.Minimize=function(y0W,R0W){var o0W;o0W=y0W.clone();return o0W.minimizeInPlace(R0W),o0W;},X6W.Maximize=function(P0W,O0W){var B0W;B0W=P0W.clone();return B0W.maximizeInPlace(O0W),B0W;},X6W.Distance=function(s0W,T0W){return Math.sqrt(X6W.DistanceSquared(s0W,T0W));},X6W.DistanceSquared=function(H9W,U9W){var Y9W,d9W,S9W,m9W;Y9W=H9W.x-U9W.x;d9W=H9W.y-U9W.y;S9W=H9W.z-U9W.z;m9W=H9W.w-U9W.w;d4lX.i4XX(d4lX.P8CX);return d4lX.r4XX(m9W,d9W,S9W,S9W,Y9W,Y9W,d9W,m9W);},X6W.Center=function(J9W,G9W){var r9W;r9W=J9W.add(G9W);return r9W.scaleInPlace(+x78X.s3uX),r9W;},X6W.TransformNormal=function(w9W,V9W){var v9W;v9W=X6W.Zero();return X6W.TransformNormalToRef(w9W,V9W,v9W),v9W;},X6W.TransformNormalToRef=function(Q9W,h9W,D9W){var X9W,W9W,j9W;X9W=Q9W.x*h9W.m[+x78X.k4CX]+Q9W.y*h9W.m[x78X.t4CX-d4lX.I4XX]+Q9W.z*h9W.m[x78X.Y4CX|d4lX.I4XX];d4lX.F4XX(d4lX.u8CX);var T9RR=d4lX.z4XX(d4lX.Y8CX,d4lX.O8CX,d4lX.a8CX);d4lX.i4XX(d4lX.y8CX);var M9RR=d4lX.z4XX(d4lX.P4XX,d4lX.s8CX);W9W=Q9W.x*h9W.m[T9RR]+Q9W.y*h9W.m[+x78X.V8uX]+Q9W.z*h9W.m[M9RR];j9W=Q9W.x*h9W.m[+x78X.U4CX]+Q9W.y*h9W.m[+x78X.O8uX]+Q9W.z*h9W.m[d4lX.y8CX];D9W.x=X9W;D9W.y=W9W;D9W.z=j9W;D9W.w=Q9W.w;},X6W.TransformNormalFromFloatsToRef=function(x9W,c9W,N9W,E9W,M9W,I9W){I9W.x=x9W*M9W.m[x78X.k4CX-d4lX.I4XX]+c9W*M9W.m[+x78X.t4CX]+N9W*M9W.m[+x78X.Y4CX];I9W.y=x9W*M9W.m[x78X.j4CX|d4lX.I4XX]+c9W*M9W.m[x78X.V8uX|d4lX.I4XX]+N9W*M9W.m[+x78X.Q4CX];I9W.z=x9W*M9W.m[+x78X.U4CX]+c9W*M9W.m[+x78X.O8uX]+N9W*M9W.m[+x78X.u3uX];I9W.w=E9W;},X6W;}();E6I.Vector4=z6I;g6I=function(){var z3uX="surface";function l9W(A9W,b9W){this.width=A9W;this.height=b9W;}return l9W.prototype.toString=function(){var h3uX=", H: ";var N3uX="{W: ";return N3uX+this.width+h3uX+this.height+j3uX;},l9W.prototype.getClassName=function(){var V3uX="Size";return V3uX;},l9W.prototype.getHashCode=function(){var n9W;n9W=this.width||+x78X.k4CX;return n9W=+B3uX*n9W^(this.height||x78X.k4CX*d4lX.n4XX);},l9W.prototype.copyFrom=function(C9W){this.width=C9W.width;this.height=C9W.height;},l9W.prototype.copyFromFloats=function(L9W,a9W){return this.width=L9W,this.height=a9W,this;},l9W.prototype.set=function(z9W,t9W){return this.copyFromFloats(z9W,t9W);},l9W.prototype.multiplyByFloats=function(K9W,p9W){return new l9W(this.width*K9W,this.height*p9W);},l9W.prototype.clone=function(){return new l9W(this.width,this.height);},l9W.prototype.equals=function(i9W){return!!i9W&&(this.width===i9W.width&&this.height===i9W.height);},Object.defineProperty(l9W.prototype,z3uX,{get:function(){return this.width*this.height;},enumerable:!d4lX.I4XX,configurable:!+x78X.k4CX}),l9W.Zero=function(){return new l9W(d4lX.I4XX,+x78X.k4CX);},l9W.prototype.add=function(u9W){return new l9W(this.width+u9W.width,this.height+u9W.height);},l9W.prototype.subtract=function(k9W){return new l9W(this.width-k9W.width,this.height-k9W.height);},l9W.Lerp=function(f9W,g9W,e9W){return new l9W(f9W.width+(g9W.width-f9W.width)*e9W,f9W.height+(g9W.height-f9W.height)*e9W);},l9W;}();E6I.Size=g6I;C6I=function(){function Z9W(q9W,F9W,o9W,y9W){void d4lX.I4XX===q9W&&(q9W=d4lX.I4XX);void(x78X.k4CX*d4lX.n4XX)===F9W&&(F9W=d4lX.I4XX);void+x78X.k4CX===o9W&&(o9W=+x78X.k4CX);void d4lX.I4XX===y9W&&(y9W=+x78X.j4CX);this.x=q9W;this.y=F9W;this.z=o9W;this.w=y9W;}return Z9W.prototype.toString=function(){return U3uX+this.x+p3uX+this.y+v3uX+this.z+T3uX+this.w+j3uX;},Z9W.prototype.getClassName=function(){return r3uX;},Z9W.prototype.getHashCode=function(){var T0CX=794;var O0CX=379;var R9W;R9W=this.x||+x78X.k4CX;d4lX.i4XX(d4lX.W8CX);var m9RR=d4lX.z4XX(d4lX.X8CX,O0CX);d4lX.F4XX(d4lX.y8CX);var c9RR=d4lX.z4XX(d4lX.w4XX,T0CX);return R9W=m9RR*(R9W=c9RR*(R9W=(B3uX-d4lX.I4XX)*R9W^(this.y||d4lX.I4XX))^(this.z||x78X.k4CX|d4lX.I4XX))^(this.w||x78X.k4CX|d4lX.I4XX);},Z9W.prototype.asArray=function(){return[this.x,this.y,this.z,this.w];},Z9W.prototype.equals=function(B9W){return B9W&&this.x===B9W.x&&this.y===B9W.y&&this.z===B9W.z&&this.w===B9W.w;},Z9W.prototype.clone=function(){return new Z9W(this.x,this.y,this.z,this.w);},Z9W.prototype.copyFrom=function(P9W){return this.x=P9W.x,this.y=P9W.y,this.z=P9W.z,this.w=P9W.w,this;},Z9W.prototype.copyFromFloats=function(O9W,s9W,T9W,H3W){return this.x=O9W,this.y=s9W,this.z=T9W,this.w=H3W,this;},Z9W.prototype.set=function(U3W,Y3W,d3W,S3W){return this.copyFromFloats(U3W,Y3W,d3W,S3W);},Z9W.prototype.add=function(m3W){return new Z9W(this.x+m3W.x,this.y+m3W.y,this.z+m3W.z,this.w+m3W.w);},Z9W.prototype.addInPlace=function(r3W){return this.x+=r3W.x,this.y+=r3W.y,this.z+=r3W.z,this.w+=r3W.w,this;},Z9W.prototype.subtract=function(J3W){return new Z9W(this.x-J3W.x,this.y-J3W.y,this.z-J3W.z,this.w-J3W.w);},Z9W.prototype.scale=function(G3W){return new Z9W(this.x*G3W,this.y*G3W,this.z*G3W,this.w*G3W);},Z9W.prototype.scaleToRef=function(v3W,w3W){return w3W.x=this.x*v3W,w3W.y=this.y*v3W,w3W.z=this.z*v3W,w3W.w=this.w*v3W,this;},Z9W.prototype.scaleInPlace=function(V3W){return this.x*=V3W,this.y*=V3W,this.z*=V3W,this.w*=V3W,this;},Z9W.prototype.scaleAndAddToRef=function(Q3W,h3W){return h3W.x+=this.x*Q3W,h3W.y+=this.y*Q3W,h3W.z+=this.z*Q3W,h3W.w+=this.w*Q3W,this;},Z9W.prototype.multiply=function(X3W){var D3W;d4lX.i4XX(d4lX.n4XX);D3W=new Z9W(d4lX.z4XX(d4lX.I4XX,x78X.k4CX),d4lX.r4XX(d4lX.I4XX,x78X.k4CX,d4lX.F4XX(d4lX.n4XX)),d4lX.z4XX(d4lX.I4XX,x78X.k4CX,d4lX.F4XX(d4lX.w4XX)),d4lX.n4XX);return this.multiplyToRef(X3W,D3W),D3W;},Z9W.prototype.multiplyToRef=function(W3W,c3W){var j3W,M3W,I3W,x3W;j3W=this.x*W3W.w+this.y*W3W.z-this.z*W3W.y+this.w*W3W.x;M3W=-this.x*W3W.z+this.y*W3W.w+this.z*W3W.x+this.w*W3W.y;I3W=this.x*W3W.y-this.y*W3W.x+this.z*W3W.w+this.w*W3W.z;x3W=-this.x*W3W.x-this.y*W3W.y-this.z*W3W.z+this.w*W3W.w;return c3W.copyFromFloats(j3W,M3W,I3W,x3W),this;},Z9W.prototype.multiplyInPlace=function(N3W){return this.multiplyToRef(N3W,this),this;},Z9W.prototype.conjugateToRef=function(E3W){return E3W.copyFromFloats(-this.x,-this.y,-this.z,this.w),this;},Z9W.prototype.conjugateInPlace=function(){return this.x*=-(x78X.j4CX|d4lX.I4XX),this.y*=-(x78X.j4CX*d4lX.n4XX),this.z*=-d4lX.n4XX,this;},Z9W.prototype.conjugate=function(){return new Z9W(-this.x,-this.y,-this.z,this.w);},Z9W.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);},Z9W.prototype.normalize=function(){var l3W;d4lX.i4XX(d4lX.Y8CX);var G9RR=d4lX.z4XX(d4lX.z8CX,d4lX.z8CX);l3W=x78X.j4CX*G9RR/this.length();return this.x*=l3W,this.y*=l3W,this.z*=l3W,this.w*=l3W,this;},Z9W.prototype.toEulerAngles=function(A3W){var b3W;void(x78X.k4CX*d4lX.n4XX)===A3W&&(A3W=x3uX.i3uX);b3W=l6I.Zero();return this.toEulerAnglesToRef(b3W,A3W),b3W;},Z9W.prototype.toEulerAnglesToRef=function(L3W,k3W){var F3uX=".4999999";var a3W,z3W,C3W,n3W,p3W,i3W,u3W,K3W,t3W;void+x78X.k4CX===k3W&&(k3W=x3uX.i3uX);a3W=this.z;z3W=this.x;C3W=this.y;n3W=this.w;d4lX.F4XX(d4lX.I4XX);p3W=d4lX.r4XX(n3W,n3W);d4lX.F4XX(d4lX.I4XX);i3W=d4lX.z4XX(a3W,a3W);d4lX.i4XX(d4lX.I4XX);u3W=d4lX.r4XX(z3W,z3W);d4lX.F4XX(d4lX.I4XX);K3W=d4lX.r4XX(C3W,C3W);d4lX.F4XX(d4lX.J8CX);t3W=d4lX.r4XX(z3W,C3W,a3W,n3W);return t3W<-(F3uX*d4lX.n4XX)?(L3W.y=x78X.U4CX*d4lX.n4XX*Math.atan2(C3W,n3W),L3W.x=Math.PI/(x78X.U4CX-d4lX.I4XX),L3W.z=x78X.k4CX*d4lX.n4XX):+F3uXthis.data.length&&(this.data.length*=G3CX.U4CX|d4lX.I4XX);},Q9N.prototype.forEach=function(W9N){for(var X9N=+G3CX.k4CX;X9Nthis.data.length&&(this.data.length=+G3CX.U4CX*(this.length+M9N.length));for(var I9N=G3CX.k4CX|d4lX.I4XX;I9N=this.length?-(G3CX.j4CX-d4lX.I4XX):x9N;},Q9N.prototype.contains=function(N9N){return-(G3CX.j4CX-d4lX.I4XX)!==this.indexOf(N9N);},Q9N._GlobalId=d4lX.I4XX,Q9N;}();T7Z=function(l9N){function E9N(){var A9N;A9N=G3CX.X4CX!==l9N&&l9N.apply(this,arguments)||this;return A9N._duplicateId=G3CX.k4CX*d4lX.n4XX,A9N;}return N0(E9N,l9N),E9N.prototype.push=function(b9N){l9N.prototype.push.call(this,b9N);b9N.__smartArrayFlags||(b9N.__smartArrayFlags={});b9N.__smartArrayFlags[this._id]=this._duplicateId;},E9N.prototype.pushNoDuplicate=function(n9N){return(!n9N.__smartArrayFlags||n9N.__smartArrayFlags[this._id]!==this._duplicateId)&&(this.push(n9N),!+G3CX.k4CX);},E9N.prototype.reset=function(){l9N.prototype.reset.call(this);this._duplicateId++;},E9N.prototype.concatWithNoDuplicate=function(C9N){var a9N;if(G3CX.k4CX*d4lX.n4XX!==C9N.length){this.length+C9N.length>this.data.length&&(this.data.length=(G3CX.U4CX-d4lX.I4XX)*(this.length+C9N.length));for(var L9N=+G3CX.k4CX;L9N>G3CX.j4CX*d4lX.n4XX,z3N|=z3N>>d4lX.w4XX,z3N|=z3N>>G3CX.t4CX-d4lX.I4XX,z3N|=z3N>>G3CX.Y4CX*d4lX.n4XX,z3N|=z3N>>+G3CX.S3uX,++z3N;},G3N.FloorPOT=function(t3N){return t3N|=t3N>>(G3CX.j4CX|d4lX.I4XX),t3N|=t3N>>d4lX.w4XX,t3N|=t3N>>d4lX.J4XX,t3N|=t3N>>(G3CX.Y4CX|d4lX.I4XX),(t3N|=t3N>>(G3CX.S3uX|d4lX.I4XX))-(t3N>>G3CX.j4CX-d4lX.I4XX);},G3N.NearestPOT=function(K3N){var p3N,i3N;p3N=G3N.CeilingPOT(K3N);i3N=G3N.FloorPOT(K3N);return K3N-i3N>+h1NX.U4CX,J7N=((h1NX.l4CX|d4lX.I4XX)&G7N)<>+h1NX.t4CX,S7N=(d4lX.Y8CX&Y7N)<>h1NX.O8uX*d4lX.n4XX,U7N=+x3uX.b7uX&d7N,isNaN(Y7N)?S7N=U7N=x3uX.U7uX|d4lX.I4XX:isNaN(d7N)&&(U7N=+x3uX.U7uX),m7N+=H7N.charAt(r7N)+H7N.charAt(J7N)+H7N.charAt(S7N)+H7N.charAt(U7N);}d4lX.i4XX(d4lX.W8CX);return d4lX.z4XX(m7N,p7uX);},G3N.ExtractMinAndMaxIndexed=function(W7N,c7N,I7N,x7N,w7N){var h7N,j7N,X7N,M7N;void d4lX.I4XX===w7N&&(w7N=G3CX.X4CX);for(var V7N=new z9N.Vector3(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),Q7N=new z9N.Vector3(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),D7N=I7N;D7NG8N.x&&(G8N.x=r8N.x);r8N.y>G8N.y&&(G8N.y=r8N.y);r8N.z>G8N.z&&(G8N.z=r8N.z);},G3N.DeepCopy=function(X8N,V8N,W8N,j8N){var a1NX=G3CX;var w8N,h8N,D8N;for(var v8N in X8N)if((x3uX.k7uX!==v8N[+a1NX.k4CX]||j8N&&-+a1NX.j4CX!==j8N.indexOf(v8N))&&(!W8N||-+a1NX.j4CX===W8N.indexOf(v8N))){w8N=X8N[v8N];h8N=typeof w8N;if(a1NX.d4CX!==h8N)try{if(a1NX.W4CX===h8N)if(w8N instanceof Array){if(V8N[v8N]=[],+a1NX.k4CX=T1N.gradient&&U54<=H54.gradient){return void d54(T1N,H54,(U54-T1N.gradient)/(H54.gradient-T1N.gradient));}}Y54=O1N.length-+G3CX.j4CX;d54(O1N[Y54],O1N[Y54],d4lX.n4XX);},G3N.BaseUrl=M0JX.e4CX,G3N.DefaultRetryStrategy=i9N.ExponentialBackoff(),G3N.CorsBehavior=c6uX,G3N.UseFallbackTexture=!(M0JX.k4CX|d4lX.I4XX),G3N.RegisteredExternalClasses={},G3N.fallbackTexture=T6uX,G3N._tmpFloatArray=new Float32Array(M0JX.j4CX|d4lX.I4XX),G3N.PreprocessUrl=function(S54){return S54;},G3N.NoneLogLevel=+M0JX.k4CX,G3N.MessageLogLevel=M0JX.j4CX|d4lX.I4XX,G3N.WarningLogLevel=+M0JX.U4CX,G3N.ErrorLogLevel=+M0JX.t4CX,G3N.AllLogLevel=M0JX.n4CX*d4lX.n4XX,G3N._LogCache=M0JX.e4CX,G3N.errorsCount=M0JX.k4CX*d4lX.n4XX,G3N.Log=G3N._LogEnabled,G3N.Warn=G3N._WarnEnabled,G3N.Error=G3N._ErrorEnabled,G3N.PerformanceNoneLogLevel=M0JX.k4CX|d4lX.I4XX,G3N.PerformanceUserMarkLogLevel=+M0JX.j4CX,G3N.PerformanceConsoleLogLevel=+M0JX.U4CX,G3N.StartPerformanceCounter=G3N._StartPerformanceCounterDisabled,G3N.EndPerformanceCounter=G3N._EndPerformanceCounterDisabled,G3N;}();z9N.Tools=K9N;Z9N=function(){var N0JX=G3CX;var r6uX="total";var z6uX="current";var V6uX="lastSecAverage";var h6uX="average";var N6uX="max";var M6uX="min";function m54(){var V6NX=G3CX;this._startMonitoringTime=+V6NX.k4CX;d4lX.F4XX(d4lX.w4XX);this._min=d4lX.r4XX(d4lX.I4XX,V6NX.k4CX);d4lX.i4XX(d4lX.n4XX);this._max=d4lX.r4XX(d4lX.I4XX,V6NX.k4CX);d4lX.i4XX(d4lX.w4XX);this._average=d4lX.z4XX(d4lX.I4XX,V6NX.k4CX);d4lX.F4XX(d4lX.I4XX);this._lastSecAverage=d4lX.z4XX(d4lX.n4XX,V6NX.k4CX);this._current=d4lX.I4XX;d4lX.i4XX(d4lX.I4XX);this._totalValueCount=d4lX.r4XX(d4lX.n4XX,V6NX.k4CX);this._totalAccumulated=+V6NX.k4CX;this._lastSecAccumulated=d4lX.I4XX;d4lX.i4XX(d4lX.w4XX);this._lastSecTime=d4lX.z4XX(d4lX.I4XX,V6NX.k4CX);d4lX.F4XX(d4lX.n4XX);this._lastSecValueCount=d4lX.z4XX(d4lX.I4XX,V6NX.k4CX);}return Object.defineProperty(m54.prototype,M6uX,{get:function(){return this._min;},enumerable:!+N0JX.k4CX,configurable:!(N0JX.k4CX*d4lX.n4XX)}),Object.defineProperty(m54.prototype,N6uX,{get:function(){return this._max;},enumerable:!+N0JX.k4CX,configurable:!(N0JX.k4CX*d4lX.n4XX)}),Object.defineProperty(m54.prototype,h6uX,{get:function(){return this._average;},enumerable:!+N0JX.k4CX,configurable:!+N0JX.k4CX}),Object.defineProperty(m54.prototype,V6uX,{get:function(){return this._lastSecAverage;},enumerable:!+N0JX.k4CX,configurable:!(N0JX.k4CX|d4lX.I4XX)}),Object.defineProperty(m54.prototype,z6uX,{get:function(){return this._current;},enumerable:!+N0JX.k4CX,configurable:!(N0JX.k4CX-d4lX.I4XX)}),Object.defineProperty(m54.prototype,r6uX,{get:function(){return this._totalAccumulated;},enumerable:!(N0JX.k4CX*d4lX.n4XX),configurable:!(N0JX.k4CX-d4lX.I4XX)}),Object.defineProperty(m54.prototype,i6uX,{get:function(){return this._totalValueCount;},enumerable:!(N0JX.k4CX-d4lX.I4XX),configurable:!(N0JX.k4CX|d4lX.I4XX)}),m54.prototype.fetchNewFrame=function(){this._totalValueCount++;d4lX.i4XX(d4lX.w4XX);this._current=d4lX.r4XX(d4lX.I4XX,G3CX.k4CX);this._lastSecValueCount++;},m54.prototype.addCount=function(r54,J54){m54.Enabled&&(this._current+=r54,J54&&this._fetchResult());},m54.prototype.beginMonitoring=function(){m54.Enabled&&(this._startMonitoringTime=K9N.Now);},m54.prototype.endMonitoring=function(G54){var v54;if(void(G3CX.k4CX|d4lX.I4XX)===G54&&(G54=!(G3CX.k4CX*d4lX.n4XX)),m54.Enabled){G54&&this.fetchNewFrame();v54=K9N.Now;this._current=v54-this._startMonitoringTime;G54&&this._fetchResult();}},m54.prototype._fetchResult=function(){var w54;this._totalAccumulated+=this._current;this._lastSecAccumulated+=this._current;this._min=Math.min(this._min,this._current);this._max=Math.max(this._max,this._current);this._average=this._totalAccumulated/this._totalValueCount;w54=K9N.Now;+F6uXZ67||i67.height>Z67){return s57._prepareWorkingCanvas(),s57._workingCanvas&&s57._workingContext&&(s57._workingCanvas.width=f67,s57._workingCanvas.height=g67,s57._workingContext.drawImage(i67,+D8iX.k4CX,D8iX.k4CX-d4lX.I4XX,i67.width,i67.height,D8iX.k4CX*d4lX.n4XX,D8iX.k4CX|d4lX.I4XX,f67,g67),u67.texImage2D(u67.TEXTURE_2D,d4lX.I4XX,k67,k67,u67.UNSIGNED_BYTE,s57._workingCanvas),O57.width=f67,O57.height=g67),!+D8iX.j4CX;}e67=new f04.InternalTexture(s57,f04.InternalTexture.DATASOURCE_TEMP);return s57._bindTextureDirectly(u67.TEXTURE_2D,e67,!+D8iX.k4CX),u67.texImage2D(u67.TEXTURE_2D,+D8iX.k4CX,k67,k67,u67.UNSIGNED_BYTE,i67),u67.texParameteri(u67.TEXTURE_2D,u67.TEXTURE_MAG_FILTER,u67.LINEAR),u67.texParameteri(u67.TEXTURE_2D,u67.TEXTURE_MIN_FILTER,u67.LINEAR),u67.texParameteri(u67.TEXTURE_2D,u67.TEXTURE_WRAP_S,u67.CLAMP_TO_EDGE),u67.texParameteri(u67.TEXTURE_2D,u67.TEXTURE_WRAP_T,u67.CLAMP_TO_EDGE),s57._rescaleTexture(e67,O57,T57,k67,function(){s57._releaseTexture(e67);s57._bindTextureDirectly(u67.TEXTURE_2D,O57,!d4lX.I4XX);F67();}),!d4lX.I4XX;},d67);};!M67||c67?H67 instanceof HTMLImageElement?r67(H67):f04.Tools.LoadImage(U67,r67,v67,T57?T57.database:Q3NX.X4CX):q4JX.A7uX==typeof H67||H67 instanceof ArrayBuffer||H67 instanceof Blob?f04.Tools.LoadImage(H67,r67,v67,T57?T57.database:Q3NX.X4CX):r67(H67);}return O57;},y04.prototype._rescaleTexture=function(P67,y67,O67,s67,B67){var v9uX="rescale";var o67,R67;o67=this;R67=this.createRenderTargetTexture({width:y67.width,height:y67.height},{generateMipMaps:!d4lX.n4XX,type:y04.TEXTURETYPE_UNSIGNED_INT,samplingMode:y04.TEXTURE_BILINEAR_SAMPLINGMODE,generateDepthBuffer:!+G3CX.j4CX,generateStencilBuffer:!d4lX.n4XX});this._rescalePostProcess||(this._rescalePostProcess=new f04.PassPostProcess(v9uX,G3CX.j4CX*d4lX.n4XX,G3CX.X4CX,y04.TEXTURE_BILINEAR_SAMPLINGMODE,this,!(G3CX.j4CX|d4lX.I4XX),y04.TEXTURETYPE_UNSIGNED_INT));this._rescalePostProcess.getEffect().executeWhenCompiled(function(){var n0NX=G3CX;var T67;o67._rescalePostProcess.onApply=function(H07){H07._bindTexture(H9uX,P67);};T67=O67;T67||(T67=o67.scenes[o67.scenes.length-+n0NX.j4CX]);T67.postProcessManager.directRender([o67._rescalePostProcess],R67,!(n0NX.k4CX*d4lX.n4XX));o67._bindTextureDirectly(o67._gl.TEXTURE_2D,y67,!(n0NX.k4CX|d4lX.I4XX));o67._gl.copyTexImage2D(o67._gl.TEXTURE_2D,n0NX.k4CX-d4lX.I4XX,s67,n0NX.k4CX-d4lX.I4XX,d4lX.I4XX,y67.width,y67.height,+n0NX.k4CX);o67.unBindFramebuffer(R67);o67._releaseTexture(R67);B67&&B67();});},y04.prototype.updateRawTexture=function(U07,S07,m07,r07,Y07,d07){var f3NX=G3CX;var J07,G07,v07;if(void(f3NX.k4CX|d4lX.I4XX)===Y07&&(Y07=f3NX.X4CX),void+f3NX.k4CX===d07&&(d07=y04.TEXTURETYPE_UNSIGNED_INT),U07){J07=this._getRGBABufferInternalSizedFormat(d07,m07);G07=this._getInternalFormat(m07);v07=this._getWebGLTextureType(d07);this._bindTextureDirectly(this._gl.TEXTURE_2D,U07,!+f3NX.k4CX);this._unpackFlipY(void+f3NX.k4CX===r07||!!r07);this._doNotHandleContextLost||(U07._bufferView=S07,U07.format=m07,U07.type=d07,U07.invertY=r07,U07._compression=Y07);U07.width%+f3NX.t4CX!=+f3NX.k4CX&&this._gl.pixelStorei(this._gl.UNPACK_ALIGNMENT,+f3NX.j4CX);Y07&&S07?this._gl.compressedTexImage2D(this._gl.TEXTURE_2D,f3NX.k4CX*d4lX.n4XX,this.getCaps().s3tc[Y07],U07.width,U07.height,d4lX.I4XX,S07):this._gl.texImage2D(this._gl.TEXTURE_2D,f3NX.k4CX*d4lX.n4XX,J07,U07.width,U07.height,f3NX.k4CX-d4lX.I4XX,G07,v07,S07);U07.generateMipMaps&&this._gl.generateMipmap(this._gl.TEXTURE_2D);this._bindTextureDirectly(this._gl.TEXTURE_2D,f3NX.X4CX);d4lX.F4XX(d4lX.n4XX);U07.isReady=!d4lX.r4XX(d4lX.I4XX,f3NX.k4CX);}},y04.prototype.createRawTexture=function(W07,M07,I07,x07,D07,X07,j07,V07,Q07){var y3NX=G3CX;var w07,h07;void(y3NX.k4CX-d4lX.I4XX)===V07&&(V07=y3NX.X4CX);void+y3NX.k4CX===Q07&&(Q07=y04.TEXTURETYPE_UNSIGNED_INT);w07=new f04.InternalTexture(this,f04.InternalTexture.DATASOURCE_RAW);w07.baseWidth=M07;w07.baseHeight=I07;w07.width=M07;w07.height=I07;w07.format=x07;w07.generateMipMaps=D07;w07.samplingMode=j07;w07.invertY=X07;w07._compression=V07;w07.type=Q07;this._doNotHandleContextLost||(w07._bufferView=W07);this.updateRawTexture(w07,W07,x07,X07,V07,Q07);this._bindTextureDirectly(this._gl.TEXTURE_2D,w07,!+y3NX.k4CX);h07=this._getSamplingParameters(j07,D07);return this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_MAG_FILTER,h07.mag),this._gl.texParameteri(this._gl.TEXTURE_2D,this._gl.TEXTURE_MIN_FILTER,h07.min),D07&&this._gl.generateMipmap(this._gl.TEXTURE_2D),this._bindTextureDirectly(this._gl.TEXTURE_2D,y3NX.X4CX),this._internalTexturesCache.push(w07),w07;},y04.prototype._unpackFlipY=function(c07){this._unpackFlipYCached!==c07&&(this._gl.pixelStorei(this._gl.UNPACK_FLIP_Y_WEBGL,c07?G3CX.j4CX-d4lX.I4XX:+G3CX.k4CX),this.enableUnpackFlipYCached&&(this._unpackFlipYCached=c07));},y04.prototype._getUnpackAlignement=function(){return this._gl.getParameter(this._gl.UNPACK_ALIGNMENT);},y04.prototype.createDynamicTexture=function(E07,l07,A07,b07){var N07;N07=new f04.InternalTexture(this,f04.InternalTexture.DATASOURCE_DYNAMIC);return N07.baseWidth=E07,N07.baseHeight=l07,A07&&(E07=this.needPOTTextures?f04.Tools.GetExponentOfTwo(E07,this._caps.maxTextureSize):E07,l07=this.needPOTTextures?f04.Tools.GetExponentOfTwo(l07,this._caps.maxTextureSize):l07),N07.width=E07,N07.height=l07,N07.isReady=!(G3CX.j4CX|d4lX.I4XX),N07.generateMipMaps=A07,N07.samplingMode=b07,this.updateTextureSamplingMode(b07,N07),this._internalTexturesCache.push(N07),N07;},y04.prototype.updateTextureSamplingMode=function(L07,n07){var C07;C07=this._getSamplingParameters(L07,n07.generateMipMaps);n07.isCube?(this._setTextureParameterInteger(this._gl.TEXTURE_CUBE_MAP,this._gl.TEXTURE_MAG_FILTER,C07.mag,n07),this._setTextureParameterInteger(this._gl.TEXTURE_CUBE_MAP,this._gl.TEXTURE_MIN_FILTER,C07.min),this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,G3CX.X4CX)):n07.is3D?(this._setTextureParameterInteger(this._gl.TEXTURE_3D,this._gl.TEXTURE_MAG_FILTER,C07.mag,n07),this._setTextureParameterInteger(this._gl.TEXTURE_3D,this._gl.TEXTURE_MIN_FILTER,C07.min),this._bindTextureDirectly(this._gl.TEXTURE_3D,G3CX.X4CX)):(this._setTextureParameterInteger(this._gl.TEXTURE_2D,this._gl.TEXTURE_MAG_FILTER,C07.mag,n07),this._setTextureParameterInteger(this._gl.TEXTURE_2D,this._gl.TEXTURE_MIN_FILTER,C07.min),this._bindTextureDirectly(this._gl.TEXTURE_2D,G3CX.X4CX));n07.samplingMode=L07;},y04.prototype.updateDynamicTexture=function(a07,p07,i07,z07,K07){var R3NX=G3CX;var t07;if(void+R3NX.k4CX===z07&&(z07=!+R3NX.j4CX),a07){this._bindTextureDirectly(this._gl.TEXTURE_2D,a07,!(R3NX.k4CX*d4lX.n4XX));this._unpackFlipY(i07);z07&&this._gl.pixelStorei(this._gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,+R3NX.j4CX);t07=K07?this._getInternalFormat(K07):this._gl.RGBA;this._gl.texImage2D(this._gl.TEXTURE_2D,R3NX.k4CX*d4lX.n4XX,t07,t07,this._gl.UNSIGNED_BYTE,p07);a07.generateMipMaps&&this._gl.generateMipmap(this._gl.TEXTURE_2D);this._bindTextureDirectly(this._gl.TEXTURE_2D,R3NX.X4CX);z07&&this._gl.pixelStorei(this._gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,d4lX.I4XX);d4lX.i4XX(d4lX.w4XX);a07.isReady=!d4lX.z4XX(d4lX.I4XX,R3NX.k4CX);}},y04.prototype.updateVideoTexture=function(u07,k07,e07){var K3NX=G3CX;var A9uX="Unable to get 2d context";var g07,f07;if(u07&&!u07._isDisabled){g07=this._bindTextureDirectly(this._gl.TEXTURE_2D,u07,!d4lX.I4XX);this._unpackFlipY(!e07);try{if(void(K3NX.k4CX-d4lX.I4XX)===this._videoTextureSupported&&(this._gl.texImage2D(this._gl.TEXTURE_2D,K3NX.k4CX-d4lX.I4XX,this._gl.RGBA,this._gl.RGBA,this._gl.UNSIGNED_BYTE,k07),d4lX.I4XX!==this._gl.getError()?this._videoTextureSupported=!d4lX.n4XX:this._videoTextureSupported=!+K3NX.k4CX),this._videoTextureSupported){this._gl.texImage2D(this._gl.TEXTURE_2D,+K3NX.k4CX,this._gl.RGBA,this._gl.RGBA,this._gl.UNSIGNED_BYTE,k07);}else{if(!u07._workingCanvas){u07._workingCanvas=document.createElement(q4JX.R6uX);f07=u07._workingCanvas.getContext(q4JX.W6uX);if(!f07){throw new Error(A9uX);}u07._workingContext=f07;u07._workingCanvas.width=u07.width;u07._workingCanvas.height=u07.height;}d4lX.F4XX(d4lX.I4XX);u07._workingContext.drawImage(k07,d4lX.r4XX(d4lX.n4XX,K3NX.k4CX),d4lX.r4XX(d4lX.I4XX,K3NX.k4CX,d4lX.i4XX(d4lX.n4XX)),k07.videoWidth,k07.videoHeight,+K3NX.k4CX,+K3NX.k4CX,u07.width,u07.height);this._gl.texImage2D(this._gl.TEXTURE_2D,d4lX.I4XX,this._gl.RGBA,this._gl.RGBA,this._gl.UNSIGNED_BYTE,u07._workingCanvas);}u07.generateMipMaps&&this._gl.generateMipmap(this._gl.TEXTURE_2D);g07||this._bindTextureDirectly(this._gl.TEXTURE_2D,K3NX.X4CX);u07.isReady=!+K3NX.k4CX;}catch(Z07){u07._isDisabled=!+G3CX.k4CX;}}},y04.prototype.updateTextureComparisonFunction=function(o07,F07){var J8NX=G3CX;var o9uX="WebGL 1 does not support texture comparison.";var q07;if(J8NX.j4CX*d4lX.n4XX!==this.webGLVersion){q07=this._gl;o07.isCube?(this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,o07,!d4lX.I4XX),+J8NX.k4CX===F07?(q07.texParameteri(q07.TEXTURE_CUBE_MAP,q07.TEXTURE_COMPARE_FUNC,y04.LEQUAL),q07.texParameteri(q07.TEXTURE_CUBE_MAP,q07.TEXTURE_COMPARE_MODE,q07.NONE)):(q07.texParameteri(q07.TEXTURE_CUBE_MAP,q07.TEXTURE_COMPARE_FUNC,F07),q07.texParameteri(q07.TEXTURE_CUBE_MAP,q07.TEXTURE_COMPARE_MODE,q07.COMPARE_REF_TO_TEXTURE)),this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP,J8NX.X4CX)):(this._bindTextureDirectly(this._gl.TEXTURE_2D,o07,!(J8NX.k4CX*d4lX.n4XX)),+J8NX.k4CX===F07?(q07.texParameteri(q07.TEXTURE_2D,q07.TEXTURE_COMPARE_FUNC,y04.LEQUAL),q07.texParameteri(q07.TEXTURE_2D,q07.TEXTURE_COMPARE_MODE,q07.NONE)):(q07.texParameteri(q07.TEXTURE_2D,q07.TEXTURE_COMPARE_FUNC,F07),q07.texParameteri(q07.TEXTURE_2D,q07.TEXTURE_COMPARE_MODE,q07.COMPARE_REF_TO_TEXTURE)),this._bindTextureDirectly(this._gl.TEXTURE_2D,J8NX.X4CX));o07._comparisonFunction=F07;}else{f04.Tools.Error(o9uX);}},y04.prototype._setupDepthStencilTexture=function(R07,P07,Y97,U97,O07){var P8NX=G3CX;var T07,H97,y07,B07,s07;T07=P07.width||P07;H97=P07.height||P07;R07.baseWidth=T07;R07.baseHeight=H97;R07.width=T07;R07.height=H97;R07.isReady=!+P8NX.k4CX;d4lX.i4XX(d4lX.n4XX);R07.samples=d4lX.z4XX(d4lX.I4XX,P8NX.j4CX);R07.generateMipMaps=!+P8NX.j4CX;R07._generateDepthBuffer=!+P8NX.k4CX;R07._generateStencilBuffer=Y97;R07.samplingMode=U97?y04.TEXTURE_BILINEAR_SAMPLINGMODE:y04.TEXTURE_NEAREST_SAMPLINGMODE;R07.type=y04.TEXTURETYPE_UNSIGNED_INT;R07._comparisonFunction=O07;y07=this._gl;B07=R07.isCube?y07.TEXTURE_CUBE_MAP:y07.TEXTURE_2D;s07=this._getSamplingParameters(R07.samplingMode,!+P8NX.j4CX);y07.texParameteri(B07,y07.TEXTURE_MAG_FILTER,s07.mag);y07.texParameteri(B07,y07.TEXTURE_MIN_FILTER,s07.min);y07.texParameteri(B07,y07.TEXTURE_WRAP_S,y07.CLAMP_TO_EDGE);y07.texParameteri(B07,y07.TEXTURE_WRAP_T,y07.CLAMP_TO_EDGE);+P8NX.k4CX===O07?(y07.texParameteri(B07,y07.TEXTURE_COMPARE_FUNC,y04.LEQUAL),y07.texParameteri(B07,y07.TEXTURE_COMPARE_MODE,y07.NONE)):(y07.texParameteri(B07,y07.TEXTURE_COMPARE_FUNC,O07),y07.texParameteri(B07,y07.TEXTURE_COMPARE_MODE,y07.COMPARE_REF_TO_TEXTURE));},y04.prototype.createDepthStencilTexture=function(d97,S97){var m97;if(S97.isCube){m97=d97.width||d97;return this._createDepthStencilCubeTexture(m97,S97);}return this._createDepthStencilTexture(d97,S97);},y04.prototype._createDepthStencilTexture=function(v97,w97){var w8NX=G3CX;var u9uX="Depth texture is not supported by your browser or hardware.";var J97,G97,r97;J97=new f04.InternalTexture(this,f04.InternalTexture.DATASOURCE_DEPTHTEXTURE);if(!this._caps.depthTextureExtension){return f04.Tools.Error(u9uX),J97;}G97=e3({bilinearFiltering:!+w8NX.j4CX,comparisonFunction:d4lX.I4XX,generateStencil:!d4lX.n4XX},w97);r97=this._gl;return this._bindTextureDirectly(r97.TEXTURE_2D,J97,!+w8NX.k4CX),this._setupDepthStencilTexture(J97,v97,G97.generateStencil,G97.bilinearFiltering,G97.comparisonFunction),d4lX.n4XX>x87,c87=m8iX.k4CX|d4lX.I4XX;c87<+m8iX.O8uX;c87++){E87=n87[x87][c87];b87&&(E87=m87._convertRGBtoRGBATextureData(E87,N87,N87,J87));r87.texImage2D(c87,x87,L87,N87,N87,+m8iX.k4CX,A87,a87,E87);}m87._bindTextureDirectly(r87.TEXTURE_CUBE_MAP,m8iX.X4CX);}else{m87.updateRawCubeTexture(S87,l87,Q87,J87,v87);}S87.isReady=!d4lX.I4XX;G87._removePendingData(S87);w87&&w87();}}(I87);},void d4lX.I4XX,G87.database,!+H8NX.k4CX,function(t87,K87){G87._removePendingData(S87);V87&&t87&&V87(t87.status+G3CX.W3uX+t87.statusText,K87);}),S87;},y04.prototype.updateRawTexture3D=function(p87,u87,f87,g87,i87,k87){var v8NX=G3CX;var e87,Z87,q87;void(v8NX.k4CX-d4lX.I4XX)===i87&&(i87=v8NX.X4CX);void(v8NX.k4CX*d4lX.n4XX)===k87&&(k87=y04.TEXTURETYPE_UNSIGNED_INT);e87=this._getWebGLTextureType(k87);Z87=this._getInternalFormat(f87);q87=this._getRGBABufferInternalSizedFormat(k87,f87);this._bindTextureDirectly(this._gl.TEXTURE_3D,p87,!(v8NX.k4CX-d4lX.I4XX));this._unpackFlipY(void+v8NX.k4CX===g87||!!g87);this._doNotHandleContextLost||(p87._bufferView=u87,p87.format=f87,p87.invertY=g87,p87._compression=i87);p87.width%+v8NX.t4CX!=+v8NX.k4CX&&this._gl.pixelStorei(this._gl.UNPACK_ALIGNMENT,v8NX.j4CX|d4lX.I4XX);i87&&u87?this._gl.compressedTexImage3D(this._gl.TEXTURE_3D,+v8NX.k4CX,this.getCaps().s3tc[i87],p87.width,p87.height,p87.depth,+v8NX.k4CX,u87):this._gl.texImage3D(this._gl.TEXTURE_3D,v8NX.k4CX-d4lX.I4XX,q87,p87.width,p87.height,p87.depth,+v8NX.k4CX,Z87,e87,u87);p87.generateMipMaps&&this._gl.generateMipmap(this._gl.TEXTURE_3D);this._bindTextureDirectly(this._gl.TEXTURE_3D,v8NX.X4CX);p87.isReady=!+v8NX.k4CX;},y04.prototype.createRawTexture3D=function(O87,U27,H27,T87,P87,y87,Y27,s87,B87,o87){var C8NX=G3CX;var F87,R87;void(C8NX.k4CX*d4lX.n4XX)===B87&&(B87=C8NX.X4CX);void+C8NX.k4CX===o87&&(o87=y04.TEXTURETYPE_UNSIGNED_INT);F87=new f04.InternalTexture(this,f04.InternalTexture.DATASOURCE_RAW3D);F87.baseWidth=U27;F87.baseHeight=H27;F87.baseDepth=T87;F87.width=U27;F87.height=H27;F87.depth=T87;F87.format=P87;F87.type=o87;F87.generateMipMaps=y87;F87.samplingMode=s87;F87.is3D=!+C8NX.k4CX;this._doNotHandleContextLost||(F87._bufferView=O87);this.updateRawTexture3D(F87,O87,P87,Y27,B87,o87);this._bindTextureDirectly(this._gl.TEXTURE_3D,F87,!(C8NX.k4CX-d4lX.I4XX));R87=this._getSamplingParameters(s87,y87);return this._gl.texParameteri(this._gl.TEXTURE_3D,this._gl.TEXTURE_MAG_FILTER,R87.mag),this._gl.texParameteri(this._gl.TEXTURE_3D,this._gl.TEXTURE_MIN_FILTER,R87.min),y87&&this._gl.generateMipmap(this._gl.TEXTURE_3D),this._bindTextureDirectly(this._gl.TEXTURE_3D,C8NX.X4CX),this._internalTexturesCache.push(F87),F87;},y04.prototype._prepareWebGLTextureContinuation=function(S27,r27,J27,G27,v27){var d27,m27;d27=this._gl;if(d27){m27=this._getSamplingParameters(v27,!J27);d27.texParameteri(d27.TEXTURE_2D,d27.TEXTURE_MAG_FILTER,m27.mag);d27.texParameteri(d27.TEXTURE_2D,d27.TEXTURE_MIN_FILTER,m27.min);J27||G27||d27.generateMipmap(d27.TEXTURE_2D);this._bindTextureDirectly(d27.TEXTURE_2D,G3CX.X4CX);r27&&r27._removePendingData(S27);S27.onLoadedObservable.notifyObservers(S27);S27.onLoadedObservable.clear();}},y04.prototype._prepareWebGLTexture=function(w27,Q27,X27,W27,N27,I27,c27,E27,h27){var x27,V27,M27,j27,D27;x27=this;void d4lX.I4XX===h27&&(h27=y04.TEXTURE_TRILINEAR_SAMPLINGMODE);V27=this.getCaps().maxTextureSize;M27=Math.min(V27,this.needPOTTextures?f04.Tools.GetExponentOfTwo(X27,V27):X27);j27=Math.min(V27,this.needPOTTextures?f04.Tools.GetExponentOfTwo(W27,V27):W27);D27=this._gl;D27&&(w27._webGLTexture?(this._bindTextureDirectly(D27.TEXTURE_2D,w27,!+G3CX.k4CX),this._unpackFlipY(void+G3CX.k4CX===N27||!!N27),w27.baseWidth=X27,w27.baseHeight=W27,w27.width=M27,w27.height=j27,w27.isReady=!+G3CX.k4CX,E27(M27,j27,function(){x27._prepareWebGLTextureContinuation(w27,Q27,I27,c27,h27);})||this._prepareWebGLTextureContinuation(w27,Q27,I27,c27,h27)):Q27&&Q27._removePendingData(w27));},y04.prototype._convertRGBtoRGBATextureData=function(a27,A27,z27,t27){var b8NX=G3CX;var l27,L27,C27;l27=t27===y04.TEXTURETYPE_FLOAT?new Float32Array(A27*z27*(b8NX.t4CX*d4lX.n4XX)):new Uint32Array(A27*z27*(b8NX.t4CX|d4lX.I4XX));for(var b27=b8NX.k4CX|d4lX.I4XX;b27=this._caps.maxVertexAttribs||!this._vertexAttribArraysEnabled[V51]||(this._gl.disableVertexAttribArray(V51),this._vertexAttribArraysEnabled[V51]=!d4lX.n4XX,this._currentBufferPointers[V51].active=!(G3CX.j4CX|d4lX.I4XX));}}},y04.prototype.releaseEffects=function(){for(var h51 in this._compiledEffects){this._deleteProgram(this._compiledEffects[h51]._program);}this._compiledEffects={};},y04.prototype.dispose=function(){var f8NX=G3CX;var X51;for(this.hideLoadingUI(),this.stopRenderLoop();this.postProcesses.length;){this.postProcesses[f8NX.k4CX-d4lX.I4XX].dispose();}for(this._emptyTexture&&(this._releaseTexture(this._emptyTexture),this._emptyTexture=f8NX.X4CX),this._emptyCubeTexture&&(this._releaseTexture(this._emptyCubeTexture),this._emptyCubeTexture=f8NX.X4CX),this._rescalePostProcess&&this._rescalePostProcess.dispose();this.scenes.length;){this.scenes[+f8NX.k4CX].dispose();}+f8NX.j4CX===y04.Instances.length&&y04.audioEngine&&y04.audioEngine.dispose();this.releaseEffects();this.unbindAllAttributes();this._boundUniforms=[];this._dummyFramebuffer&&this._gl.deleteFramebuffer(this._dummyFramebuffer);this.disableVR();f04.Tools.IsWindowObjectExist()&&(window.removeEventListener(p1uX,this._onBlur),window.removeEventListener(U1uX,this._onFocus),window.removeEventListener(h1uX,this._onVRDisplayPointerRestricted),window.removeEventListener(V1uX,this._onVRDisplayPointerUnrestricted),this._renderingCanvas&&(this._renderingCanvas.removeEventListener(U1uX,this._onCanvasFocus),this._renderingCanvas.removeEventListener(p1uX,this._onCanvasBlur),this._renderingCanvas.removeEventListener(q4JX.C1uX,this._onCanvasPointerOut),this._doNotHandleContextLost||(this._renderingCanvas.removeEventListener(A1uX,this._onContextLost),this._renderingCanvas.removeEventListener(o1uX,this._onContextRestored))),document.removeEventListener(u1uX,this._onFullscreenChange),document.removeEventListener(L1uX,this._onFullscreenChange),document.removeEventListener(e1uX,this._onFullscreenChange),document.removeEventListener(x1uX,this._onFullscreenChange),document.removeEventListener(c1uX,this._onPointerLockChange),document.removeEventListener(T1uX,this._onPointerLockChange),document.removeEventListener(M1uX,this._onPointerLockChange),document.removeEventListener(N1uX,this._onPointerLockChange),this._onVrDisplayConnect&&(window.removeEventListener(S9uX,this._onVrDisplayConnect),this._onVrDisplayDisconnect&&window.removeEventListener(Q9uX,this._onVrDisplayDisconnect),this._onVrDisplayPresentChange&&window.removeEventListener(Y9uX,this._onVrDisplayPresentChange),this._onVrDisplayConnect=f8NX.X4CX,this._onVrDisplayDisconnect=f8NX.X4CX));X51=y04.Instances.indexOf(this);f8NX.k4CX-d4lX.I4XX<=X51&&y04.Instances.splice(X51,f8NX.j4CX|d4lX.I4XX);this._workingCanvas=f8NX.X4CX;this._workingContext=f8NX.X4CX;this._currentBufferPointers=[];this._renderingCanvas=f8NX.X4CX;this._currentProgram=f8NX.X4CX;this._bindedRenderFunction=f8NX.X4CX;this.onResizeObservable.clear();this.onCanvasBlurObservable.clear();this.onCanvasFocusObservable.clear();this.onCanvasPointerOutObservable.clear();this.onBeginFrameObservable.clear();this.onEndFrameObservable.clear();f04.Effect.ResetCache();for(var D51=+f8NX.k4CX,W51=this._activeRequests;D51Q31.x-this.minimumWorld.x)&&(!(this.maximumWorld.y-Q31.yQ31.y-this.minimumWorld.y)&&!(this.maximumWorld.z-Q31.zQ31.z-this.minimumWorld.z));},y91.prototype.intersectsSphere=function(h31){return y91.IntersectsSphere(this.minimumWorld,this.maximumWorld,h31.centerWorld,h31.radiusWorld);},y91.prototype.intersectsMinMax=function(D31,X31){return!(this.maximumWorld.xX31.x)&&(!(this.maximumWorld.yX31.y)&&!(this.maximumWorld.zX31.z));},y91.Intersects=function(W31,j31){return!(W31.maximumWorld.xj31.maximumWorld.x)&&(!(W31.maximumWorld.yj31.maximumWorld.y)&&!(W31.maximumWorld.zj31.maximumWorld.z));},y91.IntersectsSphere=function(c31,N31,M31,I31){var x31;x31=J3.Vector3.Clamp(M31,c31,N31);return J3.Vector3.DistanceSquared(M31,x31)<=I31*I31;},y91.IsCompletelyInFrustum=function(A31,b31){var y8PX=G3CX;for(var E31=+y8PX.k4CX;E31I9.Engine.CollisionsEpsilon&&J81.position.addInPlace(J81._diffPositionForCollisions);w81&&J81.onCollideObservable.notifyObservers(w81);J81.onCollisionPositionChangeObservable.notifyObservers(J81.position);},J81.getScene().addMesh(J81),J81._resyncLightSources(),J81;}return N0(m81,r81),Object.defineProperty(m81,d5uX,{get:function(){return I9.TransformNode.BILLBOARDMODE_NONE;},enumerable:!(z5RX.k4CX|d4lX.I4XX),configurable:!d4lX.I4XX}),Object.defineProperty(m81,g5uX,{get:function(){return I9.TransformNode.BILLBOARDMODE_X;},enumerable:!+z5RX.k4CX,configurable:!(z5RX.k4CX-d4lX.I4XX)}),Object.defineProperty(m81,y5uX,{get:function(){return I9.TransformNode.BILLBOARDMODE_Y;},enumerable:!d4lX.I4XX,configurable:!d4lX.I4XX}),Object.defineProperty(m81,f5uX,{get:function(){return I9.TransformNode.BILLBOARDMODE_Z;},enumerable:!d4lX.I4XX,configurable:!(z5RX.k4CX*d4lX.n4XX)}),Object.defineProperty(m81,O5uX,{get:function(){return I9.TransformNode.BILLBOARDMODE_ALL;},enumerable:!(z5RX.k4CX-d4lX.I4XX),configurable:!+z5RX.k4CX}),Object.defineProperty(m81.prototype,S5uX,{get:function(){return this._facetData.facetNb;},enumerable:!+z5RX.k4CX,configurable:!(z5RX.k4CX*d4lX.n4XX)}),Object.defineProperty(m81.prototype,Q5uX,{get:function(){return this._facetData.partitioningSubdivisions;},set:function(h81){this._facetData.partitioningSubdivisions=h81;},enumerable:!+z5RX.k4CX,configurable:!(z5RX.k4CX*d4lX.n4XX)}),Object.defineProperty(m81.prototype,Y5uX,{get:function(){return this._facetData.partitioningBBoxRatio;},set:function(D81){this._facetData.partitioningBBoxRatio=D81;},enumerable:!(z5RX.k4CX-d4lX.I4XX),configurable:!(z5RX.k4CX|d4lX.I4XX)}),Object.defineProperty(m81.prototype,t5uX,{get:function(){return this._facetData.facetDepthSort;},set:function(X81){this._facetData.facetDepthSort=X81;},enumerable:!(z5RX.k4CX|d4lX.I4XX),configurable:!(z5RX.k4CX*d4lX.n4XX)}),Object.defineProperty(m81.prototype,l5uX,{get:function(){return this._facetData.facetDepthSortFrom;},set:function(W81){this._facetData.facetDepthSortFrom=W81;},enumerable:!+z5RX.k4CX,configurable:!d4lX.I4XX}),Object.defineProperty(m81.prototype,X5uX,{get:function(){return this._facetData.facetDataEnabled;},enumerable:!+z5RX.k4CX,configurable:!d4lX.I4XX}),m81.prototype._updateNonUniformScalingState=function(j81){return!!r81.prototype._updateNonUniformScalingState.call(this,j81)&&(this._markSubMeshesAsMiscDirty(),!(G3CX.k4CX|d4lX.I4XX));},Object.defineProperty(m81.prototype,j5uX,{set:function(M81){this._onCollideObserver&&this.onCollideObservable.remove(this._onCollideObserver);this._onCollideObserver=this.onCollideObservable.add(M81);},enumerable:!d4lX.I4XX,configurable:!d4lX.I4XX}),Object.defineProperty(m81.prototype,k5uX,{set:function(I81){this._onCollisionPositionChangeObserver&&this.onCollisionPositionChangeObservable.remove(this._onCollisionPositionChangeObserver);this._onCollisionPositionChangeObserver=this.onCollisionPositionChangeObservable.add(I81);},enumerable:!+z5RX.k4CX,configurable:!d4lX.I4XX}),Object.defineProperty(m81.prototype,x3uX.B5uX,{get:function(){return this._visibility;},set:function(x81){this._visibility!==x81&&(this._visibility=x81,this._markSubMeshesAsMiscDirty());},enumerable:!d4lX.I4XX,configurable:!+z5RX.k4CX}),Object.defineProperty(m81.prototype,m5uX,{get:function(){return this._material;},set:function(c81){this._material!==c81&&(this._material=c81,this.onMaterialChangedObservable.hasObservers&&this.onMaterialChangedObservable.notifyObservers(this),this.subMeshes&&this._unBindEffect());},enumerable:!(z5RX.k4CX*d4lX.n4XX),configurable:!d4lX.I4XX}),Object.defineProperty(m81.prototype,Z5uX,{get:function(){return this._receiveShadows;},set:function(N81){this._receiveShadows!==N81&&(this._receiveShadows=N81,this._markSubMeshesAsLightDirty());},enumerable:!d4lX.I4XX,configurable:!(z5RX.k4CX*d4lX.n4XX)}),Object.defineProperty(m81.prototype,D5uX,{get:function(){return this._hasVertexAlpha;},set:function(E81){this._hasVertexAlpha!==E81&&(this._hasVertexAlpha=E81,this._markSubMeshesAsAttributesDirty(),this._markSubMeshesAsMiscDirty());},enumerable:!(z5RX.k4CX-d4lX.I4XX),configurable:!+z5RX.k4CX}),Object.defineProperty(m81.prototype,E5uX,{get:function(){return this._useVertexColors;},set:function(l81){this._useVertexColors!==l81&&(this._useVertexColors=l81,this._markSubMeshesAsAttributesDirty());},enumerable:!+z5RX.k4CX,configurable:!(z5RX.k4CX-d4lX.I4XX)}),Object.defineProperty(m81.prototype,q5uX,{get:function(){return this._computeBonesUsingShaders;},set:function(A81){this._computeBonesUsingShaders!==A81&&(this._computeBonesUsingShaders=A81,this._markSubMeshesAsAttributesDirty());},enumerable:!+z5RX.k4CX,configurable:!(z5RX.k4CX*d4lX.n4XX)}),Object.defineProperty(m81.prototype,s5uX,{get:function(){return this._numBoneInfluencers;},set:function(b81){this._numBoneInfluencers!==b81&&(this._numBoneInfluencers=b81,this._markSubMeshesAsAttributesDirty());},enumerable:!+z5RX.k4CX,configurable:!+z5RX.k4CX}),Object.defineProperty(m81.prototype,a5uX,{get:function(){return this._applyFog;},set:function(n81){this._applyFog!==n81&&(this._applyFog=n81,this._markSubMeshesAsMiscDirty());},enumerable:!(z5RX.k4CX*d4lX.n4XX),configurable:!d4lX.I4XX}),Object.defineProperty(m81.prototype,G5uX,{get:function(){return this._layerMask;},set:function(C81){C81!==this._layerMask&&(this._layerMask=C81,this._resyncLightSources());},enumerable:!+z5RX.k4CX,configurable:!(z5RX.k4CX-d4lX.I4XX)}),Object.defineProperty(m81.prototype,b5uX,{get:function(){return this._collisionMask;},set:function(L81){this._collisionMask=isNaN(L81)?-(G3CX.j4CX-d4lX.I4XX):L81;},enumerable:!d4lX.I4XX,configurable:!(z5RX.k4CX-d4lX.I4XX)}),Object.defineProperty(m81.prototype,U5uX,{get:function(){return this._collisionGroup;},set:function(a81){this._collisionGroup=isNaN(a81)?-(G3CX.j4CX|d4lX.I4XX):a81;},enumerable:!+z5RX.k4CX,configurable:!+z5RX.k4CX}),Object.defineProperty(m81.prototype,p5uX,{get:function(){return G3CX.X4CX;},enumerable:!+z5RX.k4CX,configurable:!+z5RX.k4CX}),Object.defineProperty(m81.prototype,C5uX,{get:function(){return this._skeleton;},set:function(z81){this._skeleton&&this._skeleton.needInitialSkinMatrix&&this._skeleton._unregisterMeshWithPoseMatrix(this);z81&&z81.needInitialSkinMatrix&&z81._registerMeshWithPoseMatrix(this);this._skeleton=z81;this._skeleton||(this._bonesTransformMatrices=G3CX.X4CX);this._markSubMeshesAsAttributesDirty();},enumerable:!+z5RX.k4CX,configurable:!+z5RX.k4CX}),m81.prototype.getClassName=function(){var v5uX="AbstractMesh";return v5uX;},m81.prototype.toString=function(K81){var V5uX=", freeze wrld mat: ";var h5uX="ALL";var x5uX=", billboard mode: ";var e5uX=", skeleton: ";var L5uX=", # of submeshes: ";var A5uX=", isInstance: ";var t81;t81=H5uX+this.name+A5uX+(this instanceof I9.InstancedMesh?o5uX:u5uX);return t81+=L5uX+(this.subMeshes?this.subMeshes.length:+G3CX.k4CX),this._skeleton&&(t81+=e5uX+this._skeleton.name),K81&&(t81+=x5uX+[c5uX,x3uX.T5uX,x3uX.M5uX,G3CX.X4CX,x3uX.N5uX,G3CX.X4CX,G3CX.X4CX,h5uX][this.billboardMode],t81+=V5uX+(this._isWorldMatrixFrozen||this._waitingFreezeWorldMatrix?o5uX:u5uX)),t81;},m81.prototype._rebuild=function(){if(this.onRebuildObservable.notifyObservers(this),this._occlusionQuery&&(this._occlusionQuery=G3CX.X4CX),this.subMeshes)for(var p81=G3CX.k4CX-d4lX.I4XX,i81=this.subMeshes;p81I9.Epsilon?X5r.maximum.x-X5r.minimum.x:I9.Epsilon;D5r.bbSize.y=X5r.maximum.y-X5r.minimum.y>I9.Epsilon?X5r.maximum.y-X5r.minimum.y:I9.Epsilon;D5r.bbSize.z=X5r.maximum.z-X5r.minimum.z>I9.Epsilon?X5r.maximum.z-X5r.minimum.z:I9.Epsilon;M5r=D5r.bbSize.x>D5r.bbSize.y?D5r.bbSize.x:D5r.bbSize.y;if(M5r=M5r>D5r.bbSize.z?M5r:D5r.bbSize.z,D5r.subDiv.max=D5r.partitioningSubdivisions,D5r.subDiv.X=Math.floor(D5r.subDiv.max*D5r.bbSize.x/M5r),D5r.subDiv.Y=Math.floor(D5r.subDiv.max*D5r.bbSize.y/M5r),D5r.subDiv.Z=Math.floor(D5r.subDiv.max*D5r.bbSize.z/M5r),D5r.subDiv.X=D5r.subDiv.Xe5r.subDiv.max||F5re5r.subDiv.max||o5re5r.subDiv.max?G3CX.X4CX:e5r.facetPartitioning[q5r+e5r.subDiv.max*F5r+e5r.subDiv.max*e5r.subDiv.max*o5r];},m81.prototype.getClosestFacetAtCoordinates=function(d6r,m6r,S6r,P5r,s5r,U6r){var w3PX=G3CX;var H6r,T5r,O5r,Y6r;void+w3PX.k4CX===s5r&&(s5r=!+w3PX.j4CX);void+w3PX.k4CX===U6r&&(U6r=!(w3PX.k4CX|d4lX.I4XX));H6r=this.getWorldMatrix();d4lX.F4XX(d4lX.w4XX);T5r=I9.Tmp.Matrix[d4lX.r4XX(d4lX.I4XX,w3PX.V8uX)];H6r.invertToRef(T5r);d4lX.i4XX(d4lX.n4XX);O5r=I9.Tmp.Vector3[d4lX.z4XX(d4lX.I4XX,w3PX.Y4CX)];I9.Vector3.TransformCoordinatesFromFloatsToRef(d6r,m6r,S6r,T5r,O5r);Y6r=this.getClosestFacetAtLocalCoordinates(O5r.x,O5r.y,O5r.z,P5r,s5r,U6r);return P5r&&I9.Vector3.TransformCoordinatesFromFloatsToRef(P5r.x,P5r.y,P5r.z,H6r,P5r),Y6r;},m81.prototype.getClosestFacetAtLocalCoordinates=function(h6r,w6r,V6r,D6r,Q6r,j6r){var P3PX=G3CX;var E6r,n6r,b6r,l6r,G6r,v6r,x6r,A6r,c6r,L6r,C6r,W6r;void d4lX.I4XX===Q6r&&(Q6r=!+P3PX.j4CX);void+P3PX.k4CX===j6r&&(j6r=!(P3PX.k4CX*d4lX.n4XX));E6r=P3PX.X4CX;d4lX.i4XX(d4lX.w4XX);n6r=d4lX.z4XX(d4lX.I4XX,P3PX.k4CX);d4lX.F4XX(d4lX.I4XX);b6r=d4lX.z4XX(d4lX.n4XX,P3PX.k4CX);l6r=+P3PX.k4CX;G6r=+P3PX.k4CX;v6r=d4lX.I4XX;d4lX.i4XX(d4lX.n4XX);x6r=d4lX.r4XX(d4lX.I4XX,P3PX.k4CX);d4lX.i4XX(d4lX.n4XX);A6r=d4lX.z4XX(d4lX.I4XX,P3PX.k4CX);c6r=+P3PX.k4CX;L6r=this.getFacetLocalPositions();C6r=this.getFacetLocalNormals();W6r=this.getFacetsAtLocalCoordinates(h6r,w6r,V6r);if(!W6r){return P3PX.X4CX;}for(var I6r,r6r,J6r,M6r=Number.MAX_VALUE,N6r=M6r,X6r=d4lX.I4XX;X6rD4r._alphaIndex?G3CX.j4CX|d4lX.I4XX:h4r._alphaIndexW4r._distanceToCamera?-(G3CX.j4CX*d4lX.n4XX):+G3CX.k4CX;},p7r.frontToBackSortCompare=function(j4r,M4r){return j4r._distanceToCameraM4r._distanceToCamera?+G3CX.j4CX:+G3CX.k4CX;},p7r.prototype.prepare=function(){this._opaqueSubMeshes.reset();this._transparentSubMeshes.reset();this._alphaTestSubMeshes.reset();this._depthOnlySubMeshes.reset();this._particleSystems.reset();this._spriteManagers.reset();this._edgesRenderers.reset();},p7r.prototype.dispose=function(){this._opaqueSubMeshes.dispose();this._transparentSubMeshes.dispose();this._alphaTestSubMeshes.dispose();this._depthOnlySubMeshes.dispose();this._particleSystems.dispose();this._spriteManagers.dispose();this._edgesRenderers.dispose();},p7r.prototype.dispatch=function(I4r,c4r,x4r){void(G3CX.k4CX|d4lX.I4XX)===c4r&&(c4r=I4r.getMesh());void+G3CX.k4CX===x4r&&(x4r=I4r.getMaterial());G3CX.X4CX!=x4r&&(x4r.needAlphaBlendingForMesh(c4r)?this._transparentSubMeshes.push(I4r):x4r.needAlphaTesting()?(x4r.needDepthPrePass&&this._depthOnlySubMeshes.push(I4r),this._alphaTestSubMeshes.push(I4r)):(x4r.needDepthPrePass&&this._depthOnlySubMeshes.push(I4r),this._opaqueSubMeshes.push(I4r)),c4r._edgesRenderer&&c4r._edgesRenderer.isEnabled&&this._edgesRenderers.push(c4r._edgesRenderer));},p7r.prototype.dispatchSprites=function(N4r){this._spriteManagers.push(N4r);},p7r.prototype.dispatchParticles=function(E4r){this._particleSystems.push(E4r);},p7r.prototype._renderParticles=function(C4r){var X2PX=G3CX;var b4r,A4r,n4r;if(+X2PX.k4CX!==this._particleSystems.length){b4r=this._scene.activeCamera;this._scene.onBeforeParticlesRenderingObservable.notifyObservers(this._scene);for(var l4r=+X2PX.k4CX;l4rQ8r.LongPressDelay&&!j2r._isPointerSwiping()&&(j2r._startingPointerTime=d4lX.I4XX,M2r.processTrigger(d8r.ActionManager.OnLongPressTrigger,d8r.ActionEvent.CreateNew(l2r.pickedMesh,I2r)));},Q8r.LongPressDelay);}}else for(var x2r=d4lX.I4XX,N2r=this._pointerDownStage;x2rQ8r.DragMovementThreshold||Math.abs(this._startingPointerPosition.y-this._pointerY)>Q8r.DragMovementThreshold;},Q8r.prototype.attachControl=function(o2r,y2r,R2r){var G94X=G3CX;var Z2r,B2r,F2r,q2r;Z2r=this;void+G94X.k4CX===o2r&&(o2r=!(G94X.k4CX|d4lX.I4XX));void+G94X.k4CX===y2r&&(y2r=!(G94X.k4CX*d4lX.n4XX));void+G94X.k4CX===R2r&&(R2r=!(G94X.k4CX|d4lX.I4XX));this._initActionManager=function(O2r,s2r){var P2r;if(!Z2r._meshPickProceed){P2r=Z2r.pick(Z2r._unTranslatedPointerX,Z2r._unTranslatedPointerY,Z2r.pointerDownPredicate,!d4lX.n4XX,Z2r.cameraToUseForPointers);(Z2r._currentPickResult=P2r)&&(O2r=P2r.hit&&P2r.pickedMesh?P2r.pickedMesh.actionManager:G3CX.X4CX);Z2r._meshPickProceed=!+G3CX.k4CX;}return O2r;};this._delayedSimpleClick=function(H1r,T2r,U1r){(Date.now()-Z2r._previousStartingPointerTime>Q8r.DoubleClickDelay&&!Z2r._doubleClickOccured||H1r!==Z2r._previousButtonPressed)&&(Z2r._doubleClickOccured=!d4lX.n4XX,T2r.singleClick=!+G3CX.k4CX,T2r.ignore=!+G3CX.j4CX,U1r(T2r,Z2r._currentPickResult));};this._initClickEvent=function(G1r,r1r,V1r,S1r){var I5NX=G3CX;var Y1r,d1r,v1r,m1r,J1r,w1r;Y1r=new S8r();d1r=Z2r._currentPickResult=I5NX.X4CX;v1r=G1r.hasSpecificMask(d8r.PointerEventTypes.POINTERPICK)||r1r.hasSpecificMask(d8r.PointerEventTypes.POINTERPICK)||G1r.hasSpecificMask(d8r.PointerEventTypes.POINTERTAP)||r1r.hasSpecificMask(d8r.PointerEventTypes.POINTERTAP)||G1r.hasSpecificMask(d8r.PointerEventTypes.POINTERDOUBLETAP)||r1r.hasSpecificMask(d8r.PointerEventTypes.POINTERDOUBLETAP);if(!v1r&&d8r.ActionManager&&d8r.ActionManager.HasPickTriggers&&(d1r=Z2r._initActionManager(d1r,Y1r))&&(v1r=d1r.hasPickTriggers),v1r){m1r=V1r.button;if(Y1r.hasSwiped=Z2r._isPointerSwiping(),!Y1r.hasSwiped){J1r=!Q8r.ExclusiveDoubleClickMode;J1r||(J1r=!G1r.hasSpecificMask(d8r.PointerEventTypes.POINTERDOUBLETAP)&&!r1r.hasSpecificMask(d8r.PointerEventTypes.POINTERDOUBLETAP))&&!d8r.ActionManager.HasSpecificTrigger(d8r.ActionManager.OnDoublePickTrigger)&&(d1r=Z2r._initActionManager(d1r,Y1r))&&(J1r=!d1r.hasSpecificTrigger(d8r.ActionManager.OnDoublePickTrigger));J1r?(Date.now()-Z2r._previousStartingPointerTime>Q8r.DoubleClickDelay||m1r!==Z2r._previousButtonPressed)&&(Y1r.singleClick=!(I5NX.k4CX*d4lX.n4XX),S1r(Y1r,Z2r._currentPickResult)):(Z2r._previousDelayedSimpleClickTimeout=Z2r._delayedSimpleClickTimeout,Z2r._delayedSimpleClickTimeout=window.setTimeout(Z2r._delayedSimpleClick.bind(Z2r,m1r,Y1r,S1r),Q8r.DoubleClickDelay));w1r=G1r.hasSpecificMask(d8r.PointerEventTypes.POINTERDOUBLETAP)||r1r.hasSpecificMask(d8r.PointerEventTypes.POINTERDOUBLETAP);!w1r&&d8r.ActionManager.HasSpecificTrigger(d8r.ActionManager.OnDoublePickTrigger)&&(d1r=Z2r._initActionManager(d1r,Y1r))&&(w1r=d1r.hasSpecificTrigger(d8r.ActionManager.OnDoublePickTrigger));w1r&&(m1r===Z2r._previousButtonPressed&&Date.now()-Z2r._previousStartingPointerTime=D8K.distance))&&(D8K=X8K,j8K)))break;}return D8K||new d8r.PickingInfo();},Q8r.prototype._internalMultiPick=function(n8K,A8K){var c8K,b8K,E8K;if(!d8r.PickingInfo){return G3CX.X4CX;}for(var l8K=new Array(),N8K=d4lX.I4XX;N8KD3E.distance?-+G3CX.j4CX:d4lX.I4XX;});},f9E.prototype.addLODLevel=function(j3E,X3E){var V6rX="You cannot use a mesh as LOD level twice";var W3E;if(X3E&&X3E._masterMesh){return K9E.Tools.Warn(V6rX),this;}W3E=new K9E.MeshLODLevel(j3E,X3E);return this._LODLevels.push(W3E),X3E&&(X3E._masterMesh=this),this._sortLODLevels(),this;},f9E.prototype.getLODLevelAtDistance=function(x3E){var I3E;for(var M3E=d4lX.I4XX;M3El3E){return this.onLODLevelSelection&&this.onLODLevelSelection(l3E,this,this._LODLevels[this._LODLevels.length-(G3CX.j4CX-d4lX.I4XX)].mesh),this;}for(var A3E=+G3CX.k4CX;A3E=f7E){t7E=!d4lX.I4XX;break;}if(K7E.verticesStart+K7E.verticesCount>=p7E){t7E=!+O64X.k4CX;break;}}if(!t7E){return this.subMeshes[+O64X.k4CX];}}return this.releaseSubMeshes(),new K9E.SubMesh(+O64X.k4CX,+O64X.k4CX,p7E,O64X.k4CX-d4lX.I4XX,this.getTotalIndices(),this);},f9E.prototype.subdivide=function(F7E){var f64X=G3CX;if(!(F7E<+f64X.j4CX)){for(var q7E=this.getTotalIndices(),e7E=q7E/F7E|f64X.k4CX*d4lX.n4XX,Z7E=+f64X.k4CX;e7E%d4lX.P4XX!=+f64X.k4CX;){e7E++;}this.releaseSubMeshes();for(var o7E=+f64X.k4CX;o7E=z80.minHeight;d4lX.F4XX(F7CX);var s8RR=d4lX.r4XX(d4lX.j8CX,d4lX.P4XX,I6kX.E7CX,d4lX.d8CX);U20=i80[I6kX.l4CX*d4lX.n4XX*o80+s8RR]>=z80.minHeight;d4lX.i4XX(d4lX.y8CX);var w8RR=d4lX.z4XX(d4lX.l8CX,d4lX.l8CX);d4lX.F4XX(I7CX);var n8RR=d4lX.r4XX(d4lX.y8CX,d4lX.g8CX,d4lX.W8CX,d4lX.n4XX,d4lX.Q8CX,q2rX);B80=i80[I6kX.l4CX*w8RR*q80+I6kX.j4CX*n8RR]>=z80.minHeight;R80&&U20&&B80&&(p80.push(Z80),p80.push(o80),p80.push(q80));i80[I6kX.l4CX*d4lX.n4XX*y80+ +I6kX.j4CX]>=z80.minHeight&&R80&&B80&&(p80.push(y80),p80.push(Z80),p80.push(q80));}N60.ComputeNormals(i80,p80,e80);k80=new N60();return k80.indices=p80,k80.positions=i80,k80.normals=e80,k80.uvs=F80,k80;},N60.CreatePlane=function(S20){var P6kX=G3CX;var d20,m20,r20,J20,Q20,h20,V20,v20,w20,G20;d20=[];m20=[];r20=[];J20=[];Q20=S20.width||S20.size||+P6kX.j4CX;h20=S20.height||S20.size||d4lX.n4XX;V20=+P6kX.k4CX===S20.sideOrientation?+P6kX.k4CX:S20.sideOrientation||b0.Mesh.DEFAULTSIDE;d4lX.F4XX(d4lX.X8CX);v20=d4lX.z4XX(P6kX.U4CX,d4lX.n4XX,Q20);d4lX.F4XX(d4lX.j8CX);w20=d4lX.r4XX(h20,P6kX.U4CX);m20.push(-v20,-w20,+P6kX.k4CX);d4lX.i4XX(d4lX.w4XX);r20.push(d4lX.r4XX(d4lX.I4XX,P6kX.k4CX),+P6kX.k4CX,-d4lX.r4XX(d4lX.n4XX,P6kX.j4CX,d4lX.F4XX(d4lX.I4XX)));d4lX.i4XX(d4lX.I4XX);J20.push(d4lX.z4XX(d4lX.n4XX,P6kX.k4CX),d4lX.I4XX);d4lX.i4XX(d4lX.n4XX);m20.push(v20,-w20,d4lX.r4XX(d4lX.I4XX,P6kX.k4CX));d4lX.F4XX(d4lX.I4XX);r20.push(d4lX.r4XX(d4lX.n4XX,P6kX.k4CX),d4lX.I4XX,-d4lX.n4XX);d4lX.i4XX(d4lX.w4XX);J20.push(+P6kX.j4CX,d4lX.z4XX(d4lX.I4XX,P6kX.k4CX));m20.push(v20,w20,+P6kX.k4CX);r20.push(+P6kX.k4CX,d4lX.I4XX,-d4lX.n4XX);d4lX.F4XX(d4lX.I4XX);J20.push(d4lX.z4XX(d4lX.n4XX,P6kX.j4CX),d4lX.n4XX);m20.push(-v20,w20,d4lX.I4XX);d4lX.F4XX(d4lX.n4XX);r20.push(+P6kX.k4CX,+P6kX.k4CX,-d4lX.r4XX(d4lX.I4XX,P6kX.j4CX));d4lX.i4XX(d4lX.n4XX);J20.push(d4lX.z4XX(d4lX.I4XX,P6kX.k4CX),d4lX.z4XX(d4lX.n4XX,P6kX.j4CX,d4lX.i4XX(d4lX.I4XX)));d4lX.i4XX(d4lX.n4XX);d20.push(d4lX.z4XX(d4lX.I4XX,P6kX.k4CX));d4lX.F4XX(d4lX.w4XX);d20.push(d4lX.z4XX(d4lX.I4XX,P6kX.j4CX));d20.push(d4lX.w4XX);d20.push(d4lX.I4XX);d4lX.i4XX(d4lX.n4XX);d20.push(d4lX.z4XX(d4lX.I4XX,P6kX.U4CX));d20.push(+P6kX.l4CX);N60._ComputeSides(V20,m20,d20,r20,J20,S20.frontUVs,S20.backUVs);G20=new N60();return G20.indices=d20,G20.positions=m20,G20.normals=r20,G20.uvs=J20,G20;},N60.CreateDisc=function(X20){var J6kX=G3CX;var w7CX=157;var n7CX=156;var D20,M20,c20,W20,A20,K20,N20,L20,b20,E20,a20,z20,j20;D20=new Array();M20=new Array();c20=new Array();W20=new Array();A20=X20.radius||+J6kX.s3uX;K20=X20.tessellation||d4lX.O3CX;N20=X20.arc&&(X20.arc<=+J6kX.k4CX||+J6kX.j4CX=R10.length)?+g1kX.k4CX:B10.type||d4lX.I4XX;w5L=B10.size;j5L=B10.sizeX||w5L||+g1kX.j4CX;W5L=B10.sizeY||w5L||g1kX.j4CX|d4lX.I4XX;h5L=B10.sizeZ||w5L||g1kX.j4CX*d4lX.n4XX;P10=B10.custom||R10[M5L];r5L=P10.face.length;O10=B10.faceUV||new Array(r5L);s10=B10.faceColors;Q5L=void+g1kX.k4CX===B10.flat||B10.flat;N5L=g1kX.k4CX-d4lX.I4XX===B10.sideOrientation?d4lX.I4XX:B10.sideOrientation||b0.Mesh.DEFAULTSIDE;H5L=new Array();Y5L=new Array();V5L=new Array();S5L=new Array();D5L=new Array();d4lX.i4XX(d4lX.I4XX);X5L=d4lX.z4XX(d4lX.n4XX,g1kX.k4CX);d5L=+g1kX.k4CX;v5L=new Array();d4lX.F4XX(d4lX.I4XX);y10=d4lX.r4XX(d4lX.n4XX,g1kX.k4CX);o10=+g1kX.k4CX;if(Q5L)for(o10=+g1kX.k4CX;o10v6L.bbSize.y?v6L.bbSize.x:v6L.bbSize.y;k6L=k6L>v6L.bbSize.z?k6L:v6L.bbSize.z;z6L=v6L.subDiv.X*Q6L/v6L.bbSize.x;t6L=v6L.subDiv.Y*Q6L/v6L.bbSize.y;K6L=v6L.subDiv.Z*Q6L/v6L.bbSize.z;p6L=v6L.subDiv.max*v6L.subDiv.max;d4lX.F4XX(d4lX.n4XX);v6L.facetPartitioning.length=d4lX.z4XX(d4lX.I4XX,C1kX.k4CX);}for(w6L=+C1kX.k4CX;w6L=this._sampleCount||Y5G>=this._samples.length){return+G3CX.k4CX;}d5G=this._wrapPosition(this._pos-+G3CX.j4CX);return this._samples[this._wrapPosition(d4lX.z4XX(Y5G,d5G,d4lX.i4XX(d4lX.w4XX)))];},O1L.prototype.isSaturated=function(){return this._sampleCount>=this._samples.length;},O1L.prototype.reset=function(){d4lX.F4XX(d4lX.w4XX);this.average=d4lX.z4XX(d4lX.I4XX,G3CX.k4CX);this.variance=+G3CX.k4CX;this._sampleCount=d4lX.I4XX;this._pos=d4lX.I4XX;this._m2=+G3CX.k4CX;},O1L.prototype._wrapPosition=function(m5G){var D6CX=179;var S5G;S5G=this._samples.length;d4lX.F4XX(D6CX);return d4lX.r4XX(S5G,m5G,S5G,S5G);},O1L;}();Z1L.RollingAverage=q1L;}(Q0||(Q0={})));N3=Q0||(Q0={});F3Z=function(){var K3LX="LIGHT";function r5G(){}return r5G.BindEyePosition=function(G5G,J5G){J5G._forcedViewPosition?G5G.setVector3(P8LX,J5G._forcedViewPosition):G5G.setVector3(P8LX,J5G._mirroredCameraPosition?J5G._mirroredCameraPosition:J5G.activeCamera.globalPosition);},r5G.PrepareDefinesForMergedUV=function(w5G,v5G,V5G){var N1kX=G3CX;var J8LX="DIRECTUV";d4lX.F4XX(d4lX.w4XX);v5G._needUVs=!d4lX.r4XX(d4lX.I4XX,N1kX.k4CX);d4lX.i4XX(d4lX.n4XX);v5G[V5G]=!d4lX.r4XX(d4lX.I4XX,N1kX.k4CX);w5G.getTextureMatrix().isIdentity(!+N1kX.k4CX)?(v5G[V5G+J8LX]=w5G.coordinatesIndex+ +N1kX.j4CX,+N1kX.k4CX===w5G.coordinatesIndex?v5G.MAINUV1=!(N1kX.k4CX-d4lX.I4XX):v5G.MAINUV2=!+N1kX.k4CX):v5G[V5G+J8LX]=N1kX.k4CX*d4lX.n4XX;},r5G.BindTextureMatrix=function(h5G,D5G,X5G){var Q5G;Q5G=h5G.getTextureMatrix();Q5G.isIdentity(!+G3CX.k4CX)||D5G.updateMatrix(X5G+K7uX,Q5G);},r5G.PrepareDefinesForMisc=function(j5G,M5G,I5G,x5G,c5G,N5G,W5G){W5G._areMiscDirty&&(W5G.LOGARITHMICDEPTH=I5G,W5G.POINTSIZE=x5G,W5G.FOG=M5G.fogEnabled&&j5G.applyFog&&M5G.fogMode!==N3.Scene.FOGMODE_NONE&&c5G,W5G.NONUNIFORMSCALING=j5G.nonUniformScaling,W5G.ALPHATEST=N5G);},r5G.PrepareDefinesForFrameBoundValues=function(A5G,t5G,E5G,z5G,l5G){var V1kX=G3CX;var n5G,C5G,L5G,a5G,b5G;void(V1kX.k4CX-d4lX.I4XX)===l5G&&(l5G=V1kX.X4CX);b5G=!d4lX.n4XX;n5G=V1kX.X4CX==l5G?void+V1kX.k4CX!==A5G.clipPlane&&V1kX.X4CX!==A5G.clipPlane:l5G;C5G=V1kX.X4CX==l5G?void+V1kX.k4CX!==A5G.clipPlane2&&V1kX.X4CX!==A5G.clipPlane2:l5G;L5G=V1kX.X4CX==l5G?void d4lX.I4XX!==A5G.clipPlane3&&V1kX.X4CX!==A5G.clipPlane3:l5G;a5G=V1kX.X4CX==l5G?void d4lX.I4XX!==A5G.clipPlane4&&V1kX.X4CX!==A5G.clipPlane4:l5G;E5G.CLIPPLANE!==n5G&&(E5G.CLIPPLANE=n5G,b5G=!d4lX.I4XX);E5G.CLIPPLANE2!==C5G&&(E5G.CLIPPLANE2=C5G,b5G=!(V1kX.k4CX*d4lX.n4XX));E5G.CLIPPLANE3!==L5G&&(E5G.CLIPPLANE3=L5G,b5G=!+V1kX.k4CX);E5G.CLIPPLANE4!==a5G&&(E5G.CLIPPLANE4=a5G,b5G=!+V1kX.k4CX);E5G.DEPTHPREPASS!==!t5G.getColorWrite()&&(E5G.DEPTHPREPASS=!E5G.DEPTHPREPASS,b5G=!+V1kX.k4CX);E5G.INSTANCES!==z5G&&(E5G.INSTANCES=z5G,b5G=!+V1kX.k4CX);b5G&&E5G.markAsUnprocessed();},r5G.PrepareDefinesForAttributes=function(p5G,K5G,g5G,e5G,u5G,k5G){var z1kX=G3CX;var f5G,i5G;if(void+z1kX.k4CX===u5G&&(u5G=!+z1kX.j4CX),void+z1kX.k4CX===k5G&&(k5G=!(z1kX.k4CX|d4lX.I4XX)),!K5G._areAttributesDirty&&K5G._needNormals===K5G._normals&&K5G._needUVs===K5G._uvs){return!d4lX.n4XX;}if(K5G._normals=K5G._needNormals,K5G._uvs=K5G._needUVs,K5G.NORMAL=K5G._needNormals&&p5G.isVerticesDataPresent(N3.VertexBuffer.NormalKind),K5G._needNormals&&p5G.isVerticesDataPresent(N3.VertexBuffer.TangentKind)&&(K5G.TANGENT=!+z1kX.k4CX),K5G._needUVs?(K5G.UV1=p5G.isVerticesDataPresent(N3.VertexBuffer.UVKind),K5G.UV2=p5G.isVerticesDataPresent(N3.VertexBuffer.UV2Kind)):(K5G.UV1=!(z1kX.j4CX*d4lX.n4XX),K5G.UV2=!+z1kX.j4CX),g5G){f5G=p5G.useVertexColors&&p5G.isVerticesDataPresent(N3.VertexBuffer.ColorKind);K5G.VERTEXCOLOR=f5G;K5G.VERTEXALPHA=p5G.hasVertexAlpha&&f5G&&k5G;}if(e5G&&(p5G.useBones&&p5G.computeBonesUsingShaders&&p5G.skeleton?(K5G.NUM_BONE_INFLUENCERS=p5G.numBoneInfluencers,K5G.BonesPerMesh=p5G.skeleton.bones.length+(z1kX.j4CX|d4lX.I4XX)):(K5G.NUM_BONE_INFLUENCERS=d4lX.I4XX,K5G.BonesPerMesh=+z1kX.k4CX)),u5G){i5G=p5G.morphTargetManager;i5G?(K5G.MORPHTARGETS_TANGENT=i5G.supportsTangents&&K5G.TANGENT,K5G.MORPHTARGETS_NORMAL=i5G.supportsNormals&&K5G.NORMAL,K5G.MORPHTARGETS=d4lX.I4XXC6G&&N3.Tools.Error(u3LX+n6G.name);}},r5G.PrepareAttributesForBones=function(z6G,K6G,t6G,p6G){+G3CX.k4CXp2G&&(this.rotation.x=p2G);this.rotation.x<-p2G&&(this.rotation.x=-p2G);}}i2G&&(Math.abs(this.cameraDirection.x)p1G.Engine.CollisionsEpsilon&&(e1G.position.addInPlace(e1G._diffPosition),e1G.onCollide&&y1G&&e1G.onCollide(y1G));},e1G.inputs=new p1G.FreeCameraInputsManager(e1G),e1G.inputs.addKeyboard().addMouse(),e1G;}return N0(f1G,g1G),Object.defineProperty(f1G.prototype,m5LX,{get:function(){var O1G;O1G=this.inputs.attached.mouse;return O1G?O1G.angularSensibility:+l4kX.k4CX;},set:function(T1G){var s1G;s1G=this.inputs.attached.mouse;s1G&&(s1G.angularSensibility=T1G);},enumerable:!d4lX.I4XX,configurable:!+l4kX.k4CX}),Object.defineProperty(f1G.prototype,s5LX,{get:function(){var H53;H53=this.inputs.attached.keyboard;return H53?H53.keysUp:[];},set:function(Y53){var U53;U53=this.inputs.attached.keyboard;U53&&(U53.keysUp=Y53);},enumerable:!+l4kX.k4CX,configurable:!(l4kX.k4CX*d4lX.n4XX)}),Object.defineProperty(f1G.prototype,a5LX,{get:function(){var d53;d53=this.inputs.attached.keyboard;return d53?d53.keysDown:[];},set:function(m53){var S53;S53=this.inputs.attached.keyboard;S53&&(S53.keysDown=m53);},enumerable:!d4lX.I4XX,configurable:!+l4kX.k4CX}),Object.defineProperty(f1G.prototype,G5LX,{get:function(){var r53;r53=this.inputs.attached.keyboard;return r53?r53.keysLeft:[];},set:function(G53){var J53;J53=this.inputs.attached.keyboard;J53&&(J53.keysLeft=G53);},enumerable:!d4lX.I4XX,configurable:!+l4kX.k4CX}),Object.defineProperty(f1G.prototype,b5LX,{get:function(){var v53;v53=this.inputs.attached.keyboard;return v53?v53.keysRight:[];},set:function(V53){var w53;w53=this.inputs.attached.keyboard;w53&&(w53.keysRight=V53);},enumerable:!+l4kX.k4CX,configurable:!d4lX.I4XX}),f1G.prototype.attachControl=function(Q53,h53){this.inputs.attachElement(Q53,h53);},f1G.prototype.detachControl=function(D53){this.inputs.detachElement(D53);this.cameraDirection=new p1G.Vector3(+l4kX.k4CX,d4lX.I4XX,+l4kX.k4CX);this.cameraRotation=new p1G.Vector2(+l4kX.k4CX,d4lX.I4XX);},Object.defineProperty(f1G.prototype,b5uX,{get:function(){return this._collisionMask;},set:function(X53){this._collisionMask=isNaN(X53)?-(l4kX.j4CX*d4lX.n4XX):X53;},enumerable:!(l4kX.k4CX|d4lX.I4XX),configurable:!(l4kX.k4CX-d4lX.I4XX)}),f1G.prototype._collideWithWorld=function(j53){var W53;(this.parent?p1G.Vector3.TransformCoordinates(this.position,this.parent.getWorldMatrix()):this.position).subtractFromFloatsToRef(d4lX.I4XX,this.ellipsoid.y,l4kX.k4CX*d4lX.n4XX,this._oldPosition);this._oldPosition.addInPlace(this.ellipsoidOffset);this._collider||(this._collider=new p1G.Collider());this._collider._radius=this.ellipsoid;this._collider.collisionMask=this._collisionMask;W53=j53;this.applyGravity&&(W53=j53.add(this.getScene().gravity));this.getScene().collisionCoordinator.getNewPosition(this._oldPosition,W53,this._collider,+l4kX.l4CX,l4kX.X4CX,this._onCollisionPositionChange,this.uniqueId);},f1G.prototype._checkInputs=function(){this._localDirection||(this._localDirection=p1G.Vector3.Zero(),this._transformedDirection=p1G.Vector3.Zero());this.inputs.checkInputs();g1G.prototype._checkInputs.call(this);},f1G.prototype._decideIfNeedsToMove=function(){return this._needMoveForGravity||l4kX.k4CX*d4lX.n4XXe53.camera.pinchToPanMaxDistance){e53.pinchDeltaPercentage?e53.camera.inertialRadiusOffset+=+Y3uX*(U63-y53)*e53.camera.radius*e53.pinchDeltaPercentage:e53.camera.inertialRadiusOffset+=(U63-y53)/(e53.pinchPrecision*((e53.angularSensibilityX+e53.angularSensibilityY)/+c2RX.U4CX)*r63),q53.isPaning=!d4lX.n4XX,q53.isPinching=!+c2RX.k4CX;}else if(o53&&o53.pointerId===H63.pointerId&&c2RX.k4CX-d4lX.I4XX!==e53.panningSensibility&&e53.multiTouchPanning){if(!q53.isPaning){return q53.isPaning=!+c2RX.k4CX,q53.isPinching=!d4lX.n4XX,q53.x=H63.x,void(q53.y=H63.y);}e53.camera.inertialPanningX+=-(H63.x-q53.x)/e53.panningSensibility;e53.camera.inertialPanningY+=(H63.y-q53.y)/e53.panningSensibility;}o53&&o53.pointerId===T53.pointerId&&(q53.x=H63.x,q53.y=H63.y);}y53=U63;}}};this._observer=this.camera.getScene().onPointerObservable.add(this._pointerInput,K7.PointerEventTypes.POINTERDOWN|K7.PointerEventTypes.POINTERUP|K7.PointerEventTypes.POINTERMOVE|K7.PointerEventTypes.POINTERDOUBLETAP);this._onContextMenu=function(M63){M63.preventDefault();};this.camera._useCtrlForPanning||R53.addEventListener(x3uX.h5LX,this._onContextMenu,!d4lX.n4XX);this._onLostFocus=function(){Z53=F53=c2RX.X4CX;y53=+c2RX.k4CX;d4lX.i4XX(d4lX.w4XX);q53.isPaning=!d4lX.z4XX(d4lX.I4XX,c2RX.j4CX);d4lX.i4XX(d4lX.I4XX);q53.isPinching=!d4lX.r4XX(d4lX.n4XX,c2RX.j4CX);o53=c2RX.X4CX;d4lX.F4XX(d4lX.n4XX);P53=O53=d4lX.r4XX(d4lX.I4XX,c2RX.k4CX);};this._onMouseMove=function(I63){var x63,c63;if(s53.isPointerLock){x63=I63.movementX||I63.mozMovementX||I63.webkitMovementX||I63.msMovementX||c2RX.k4CX|d4lX.I4XX;c63=I63.movementY||I63.mozMovementY||I63.webkitMovementY||I63.msMovementY||c2RX.k4CX*d4lX.n4XX;e53.camera.inertialAlphaOffset-=x63/e53.angularSensibilityX;e53.camera.inertialBetaOffset-=c63/e53.angularSensibilityY;B53||I63.preventDefault();}};this._onGestureStart=function(N63){void(c2RX.k4CX|d4lX.I4XX)!==window.MSGesture&&(e53._MSGestureHandler||(e53._MSGestureHandler=new MSGesture(),e53._MSGestureHandler.target=R53),e53._MSGestureHandler.addPointer(N63.pointerId));};this._onGesture=function(E63){e53.camera.radius*=E63.scale;E63.preventDefault&&(B53||(E63.stopPropagation(),E63.preventDefault()));};R53.addEventListener(x3uX.j5LX,this._onMouseMove,!d4lX.n4XX);R53.addEventListener(x3uX.V5LX,this._onGestureStart,!(c2RX.j4CX-d4lX.I4XX));R53.addEventListener(z5LX,this._onGesture,!(c2RX.j4CX*d4lX.n4XX));K7.Tools.RegisterTopRootEvents([{name:p1uX,handler:this._onLostFocus}]);},g53.prototype.detachControl=function(l63){this._onLostFocus&&K7.Tools.UnregisterTopRootEvents([{name:p1uX,handler:this._onLostFocus}]);l63&&this._observer&&(this.camera.getScene().onPointerObservable.remove(this._observer),this._observer=c2RX.X4CX,this._onContextMenu&&l63.removeEventListener(x3uX.h5LX,this._onContextMenu),this._onMouseMove&&l63.removeEventListener(x3uX.j5LX,this._onMouseMove),this._onGestureStart&&l63.removeEventListener(x3uX.V5LX,this._onGestureStart),this._onGesture&&l63.removeEventListener(z5LX,this._onGesture),this._isPanClick=!+c2RX.j4CX,this.pinchInwards=!(c2RX.k4CX-d4lX.I4XX),this._onMouseMove=c2RX.X4CX,this._onGestureStart=c2RX.X4CX,this._onGesture=c2RX.X4CX,this._MSGestureHandler=c2RX.X4CX,this._onLostFocus=c2RX.X4CX,this._onContextMenu=c2RX.X4CX);},g53.prototype.getClassName=function(){var r5LX="ArcRotateCameraPointersInput";return r5LX;},g53.prototype.getSimpleName=function(){var i5LX="pointers";return i5LX;},W0([K7.serialize()],g53.prototype,B5LX,void d4lX.I4XX),W0([K7.serialize()],g53.prototype,F5LX,void+c2RX.k4CX),W0([K7.serialize()],g53.prototype,I5LX,void+c2RX.k4CX),W0([K7.serialize()],g53.prototype,n5LX,void(c2RX.k4CX*d4lX.n4XX)),W0([K7.serialize()],g53.prototype,w5LX,void+c2RX.k4CX),W0([K7.serialize()],g53.prototype,L5LX,void(c2RX.k4CX*d4lX.n4XX)),W0([K7.serialize()],g53.prototype,P5LX,void+c2RX.k4CX),W0([K7.serialize()],g53.prototype,J5LX,void+c2RX.k4CX),g53;}();K7.ArcRotateCameraPointersInput=T5Z;K7.CameraInputTypes.ArcRotateCameraPointersInput=T5Z;z1=Q0||(Q0={});E3Z=function(b63){function A63(n63){return b63.call(this,n63)||this;}return N0(A63,b63),A63.prototype.addMouseWheel=function(){return this.add(new z1.ArcRotateCameraMouseWheelInput()),this;},A63.prototype.addPointers=function(){return this.add(new z1.ArcRotateCameraPointersInput()),this;},A63.prototype.addKeyboard=function(){return this.add(new z1.ArcRotateCameraKeyboardMoveInput()),this;},A63.prototype.addVRDeviceOrientation=function(){return this.add(new z1.ArcRotateCameraVRDeviceOrientationInput()),this;},A63;}(z1.CameraInputsManager);z1.ArcRotateCameraInputsManager=E3Z;(function(C63){var K4LX="ArcRotateCamera";var L63;C63.Node.AddNodeConstructor(K4LX,function(a63,z63){return function(){d4lX.i4XX(d4lX.I4XX);return new L63(a63,+G3CX.k4CX,+G3CX.k4CX,d4lX.z4XX(d4lX.n4XX,G3CX.j4CX),C63.Vector3.Zero(),z63);};});L63=function(K63){var R8qX=G3CX;var H4LX="useInputToRestoreState";var v4LX="allowUpsideDown";var C4LX="targetScreenOffset";var p4LX="zoomOnFactor";var U4LX="panningInertia";var b4LX="panningOriginTarget";var G4LX="panningDistanceLimit";var a4LX="pinchToPanMaxDistance";var s4LX="inertialPanningY";var q4LX="inertialPanningX";var E4LX="upperRadiusLimit";var D4LX="lowerRadiusLimit";var Z4LX="upperBetaLimit";var m4LX="lowerBetaLimit";var B4LX="upperAlphaLimit";var k4LX="lowerAlphaLimit";var j4LX="inertialRadiusOffset";var X4LX="inertialBetaOffset";var l4LX="inertialAlphaOffset";var t4LX="_target";var Q4LX="useAutoRotationBehavior";var S4LX="autoRotationBehavior";var O4LX="useFramingBehavior";var f4LX="framingBehavior";var y4LX="useBouncingBehavior";var g4LX="bouncingBehavior";function t63(k63,f63,g63,e63,u63,Z63,i63){var c92X=G3CX;var R4LX=.01;var p63;void d4lX.I4XX===i63&&(i63=!(c92X.k4CX*d4lX.n4XX));p63=K63.call(this,k63,C63.Vector3.Zero(),Z63,i63)||this;return p63.inertialAlphaOffset=+c92X.k4CX,p63.inertialBetaOffset=c92X.k4CX*d4lX.n4XX,p63.inertialRadiusOffset=c92X.k4CX-d4lX.I4XX,p63.lowerAlphaLimit=c92X.X4CX,p63.upperAlphaLimit=c92X.X4CX,p63.lowerBetaLimit=R4LX,p63.upperBetaLimit=Math.PI,p63.lowerRadiusLimit=c92X.X4CX,p63.upperRadiusLimit=c92X.X4CX,p63.inertialPanningX=+c92X.k4CX,p63.inertialPanningY=+c92X.k4CX,p63.pinchToPanMaxDistance=x3uX.b2rX-d4lX.I4XX,p63.panningDistanceLimit=c92X.X4CX,p63.panningOriginTarget=C63.Vector3.Zero(),p63.panningInertia=+v4uX,p63.zoomOnFactor=c92X.j4CX-d4lX.I4XX,p63.targetScreenOffset=C63.Vector2.Zero(),p63.allowUpsideDown=!+c92X.k4CX,p63.useInputToRestoreState=!(c92X.k4CX*d4lX.n4XX),p63._viewMatrix=new C63.Matrix(),p63.panningAxis=new C63.Vector3(c92X.j4CX|d4lX.I4XX,c92X.j4CX*d4lX.n4XX,c92X.k4CX-d4lX.I4XX),p63.onMeshTargetChangedObservable=new C63.Observable(),p63.checkCollisions=!+c92X.j4CX,p63.collisionRadius=new C63.Vector3(c92X.s3uX-d4lX.I4XX,c92X.s3uX-d4lX.I4XX,+c92X.s3uX),p63._previousPosition=C63.Vector3.Zero(),p63._collisionVelocity=C63.Vector3.Zero(),p63._newPosition=C63.Vector3.Zero(),p63._computationVector=C63.Vector3.Zero(),p63._onCollisionPositionChange=function(s63,R63,o63){var B63,P63,O63,q63,y63,F63;void(c92X.k4CX-d4lX.I4XX)===o63&&(o63=c92X.X4CX);p63.getScene().workerCollisions&&p63.checkCollisions&&R63.multiplyInPlace(p63._collider._radius);o63?(p63.setPosition(R63),p63.onCollide&&p63.onCollide(o63)):p63._previousPosition.copyFrom(p63.position);B63=Math.cos(p63.alpha);P63=Math.sin(p63.alpha);O63=Math.cos(p63.beta);q63=Math.sin(p63.beta);+c92X.k4CX===q63&&(q63=+W4LX);y63=p63._getTargetPosition();p63._computationVector.copyFromFloats(p63.radius*B63*q63,p63.radius*O63,p63.radius*P63*q63);y63.addToRef(p63._computationVector,p63._newPosition);p63.position.copyFrom(p63._newPosition);F63=p63.upVector;p63.allowUpsideDown&&p63.beta<+c92X.k4CX&&(F63=(F63=F63.clone()).negate());p63._computeViewMatrix(p63.position,y63,F63);d4lX.F4XX(d4lX.w4XX);p63._viewMatrix.m[d4lX.z4XX(d4lX.I4XX,x3uX.I3uX)]+=p63.targetScreenOffset.x;p63._viewMatrix.m[+c92X.o3uX]+=p63.targetScreenOffset.y;p63._collisionTriggered=!d4lX.n4XX;},p63._target=C63.Vector3.Zero(),u63&&p63.setTarget(u63),p63.alpha=f63,p63.beta=g63,p63.radius=e63,p63.getViewMatrix(),p63.inputs=new C63.ArcRotateCameraInputsManager(p63),p63.inputs.addKeyboard().addMouseWheel().addPointers(),p63;}return N0(t63,K63),Object.defineProperty(t63.prototype,x3uX.d4LX,{get:function(){return this._target;},set:function(T63){this.setTarget(T63);},enumerable:!(R8qX.k4CX-d4lX.I4XX),configurable:!d4lX.I4XX}),Object.defineProperty(t63.prototype,F5LX,{get:function(){var H03;H03=this.inputs.attached.pointers;return H03?H03.angularSensibilityX:+G3CX.k4CX;},set:function(Y03){var U03;U03=this.inputs.attached.pointers;U03&&(U03.angularSensibilityX=Y03);},enumerable:!(R8qX.k4CX-d4lX.I4XX),configurable:!+R8qX.k4CX}),Object.defineProperty(t63.prototype,I5LX,{get:function(){var d03;d03=this.inputs.attached.pointers;return d03?d03.angularSensibilityY:+G3CX.k4CX;},set:function(m03){var S03;S03=this.inputs.attached.pointers;S03&&(S03.angularSensibilityY=m03);},enumerable:!+R8qX.k4CX,configurable:!d4lX.I4XX}),Object.defineProperty(t63.prototype,n5LX,{get:function(){var r03;r03=this.inputs.attached.pointers;return r03?r03.pinchPrecision:+G3CX.k4CX;},set:function(G03){var J03;J03=this.inputs.attached.pointers;J03&&(J03.pinchPrecision=G03);},enumerable:!+R8qX.k4CX,configurable:!d4lX.I4XX}),Object.defineProperty(t63.prototype,w5LX,{get:function(){var v03;v03=this.inputs.attached.pointers;return v03?v03.pinchDeltaPercentage:+G3CX.k4CX;},set:function(V03){var w03;w03=this.inputs.attached.pointers;w03&&(w03.pinchDeltaPercentage=V03);},enumerable:!(R8qX.k4CX*d4lX.n4XX),configurable:!+R8qX.k4CX}),Object.defineProperty(t63.prototype,L5LX,{get:function(){var Q03;Q03=this.inputs.attached.pointers;return Q03?Q03.panningSensibility:G3CX.k4CX-d4lX.I4XX;},set:function(D03){var h03;h03=this.inputs.attached.pointers;h03&&(h03.panningSensibility=D03);},enumerable:!(R8qX.k4CX|d4lX.I4XX),configurable:!+R8qX.k4CX}),Object.defineProperty(t63.prototype,s5LX,{get:function(){var X03;X03=this.inputs.attached.keyboard;return X03?X03.keysUp:[];},set:function(j03){var W03;W03=this.inputs.attached.keyboard;W03&&(W03.keysUp=j03);},enumerable:!+R8qX.k4CX,configurable:!(R8qX.k4CX|d4lX.I4XX)}),Object.defineProperty(t63.prototype,a5LX,{get:function(){var M03;M03=this.inputs.attached.keyboard;return M03?M03.keysDown:[];},set:function(x03){var I03;I03=this.inputs.attached.keyboard;I03&&(I03.keysDown=x03);},enumerable:!+R8qX.k4CX,configurable:!+R8qX.k4CX}),Object.defineProperty(t63.prototype,G5LX,{get:function(){var c03;c03=this.inputs.attached.keyboard;return c03?c03.keysLeft:[];},set:function(E03){var N03;N03=this.inputs.attached.keyboard;N03&&(N03.keysLeft=E03);},enumerable:!+R8qX.k4CX,configurable:!(R8qX.k4CX*d4lX.n4XX)}),Object.defineProperty(t63.prototype,b5LX,{get:function(){var l03;l03=this.inputs.attached.keyboard;return l03?l03.keysRight:[];},set:function(b03){var A03;A03=this.inputs.attached.keyboard;A03&&(A03.keysRight=b03);},enumerable:!+R8qX.k4CX,configurable:!+R8qX.k4CX}),Object.defineProperty(t63.prototype,M5LX,{get:function(){var n03;n03=this.inputs.attached.mousewheel;return n03?n03.wheelPrecision:d4lX.I4XX;},set:function(L03){var C03;C03=this.inputs.attached.mousewheel;C03&&(C03.wheelPrecision=L03);},enumerable:!+R8qX.k4CX,configurable:!+R8qX.k4CX}),Object.defineProperty(t63.prototype,N5LX,{get:function(){var a03;a03=this.inputs.attached.mousewheel;return a03?a03.wheelDeltaPercentage:G3CX.k4CX-d4lX.I4XX;},set:function(t03){var z03;z03=this.inputs.attached.mousewheel;z03&&(z03.wheelDeltaPercentage=t03);},enumerable:!(R8qX.k4CX*d4lX.n4XX),configurable:!+R8qX.k4CX}),Object.defineProperty(t63.prototype,g4LX,{get:function(){return this._bouncingBehavior;},enumerable:!d4lX.I4XX,configurable:!(R8qX.k4CX|d4lX.I4XX)}),Object.defineProperty(t63.prototype,y4LX,{get:function(){return G3CX.X4CX!=this._bouncingBehavior;},set:function(K03){K03!==this.useBouncingBehavior&&(K03?(this._bouncingBehavior=new C63.BouncingBehavior(),this.addBehavior(this._bouncingBehavior)):this._bouncingBehavior&&(this.removeBehavior(this._bouncingBehavior),this._bouncingBehavior=G3CX.X4CX));},enumerable:!(R8qX.k4CX*d4lX.n4XX),configurable:!(R8qX.k4CX|d4lX.I4XX)}),Object.defineProperty(t63.prototype,f4LX,{get:function(){return this._framingBehavior;},enumerable:!+R8qX.k4CX,configurable:!+R8qX.k4CX}),Object.defineProperty(t63.prototype,O4LX,{get:function(){return G3CX.X4CX!=this._framingBehavior;},set:function(p03){p03!==this.useFramingBehavior&&(p03?(this._framingBehavior=new C63.FramingBehavior(),this.addBehavior(this._framingBehavior)):this._framingBehavior&&(this.removeBehavior(this._framingBehavior),this._framingBehavior=G3CX.X4CX));},enumerable:!d4lX.I4XX,configurable:!(R8qX.k4CX-d4lX.I4XX)}),Object.defineProperty(t63.prototype,S4LX,{get:function(){return this._autoRotationBehavior;},enumerable:!+R8qX.k4CX,configurable:!+R8qX.k4CX}),Object.defineProperty(t63.prototype,Q4LX,{get:function(){return G3CX.X4CX!=this._autoRotationBehavior;},set:function(i03){i03!==this.useAutoRotationBehavior&&(i03?(this._autoRotationBehavior=new C63.AutoRotationBehavior(),this.addBehavior(this._autoRotationBehavior)):this._autoRotationBehavior&&(this.removeBehavior(this._autoRotationBehavior),this._autoRotationBehavior=G3CX.X4CX));},enumerable:!d4lX.I4XX,configurable:!(R8qX.k4CX|d4lX.I4XX)}),t63.prototype._initCache=function(){K63.prototype._initCache.call(this);this._cache._target=new C63.Vector3(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE);this._cache.alpha=void+G3CX.k4CX;d4lX.F4XX(d4lX.w4XX);this._cache.beta=void d4lX.z4XX(d4lX.I4XX,G3CX.k4CX);d4lX.F4XX(d4lX.w4XX);this._cache.radius=void d4lX.r4XX(d4lX.I4XX,G3CX.k4CX);this._cache.targetScreenOffset=C63.Vector2.Zero();},t63.prototype._updateCache=function(u03){u03||K63.prototype._updateCache.call(this);this._cache._target.copyFrom(this._getTargetPosition());this._cache.alpha=this.alpha;this._cache.beta=this.beta;this._cache.radius=this.radius;this._cache.targetScreenOffset.copyFrom(this.targetScreenOffset);},t63.prototype._getTargetPosition=function(){var k03,f03;if(this._targetHost&&this._targetHost.getAbsolutePosition){k03=this._targetHost.getAbsolutePosition();this._targetBoundingCenter?k03.addToRef(this._targetBoundingCenter,this._target):this._target.copyFrom(k03);}f03=this._getLockedTargetPosition();return f03||this._target;},t63.prototype.storeState=function(){return this._storedAlpha=this.alpha,this._storedBeta=this.beta,this._storedRadius=this.radius,this._storedTarget=this._getTargetPosition().clone(),K63.prototype.storeState.call(this);},t63.prototype._restoreStateValues=function(){var q92X=G3CX;return!!K63.prototype._restoreStateValues.call(this)&&(this.alpha=this._storedAlpha,this.beta=this._storedBeta,this.radius=this._storedRadius,this.setTarget(this._storedTarget.clone()),this.inertialAlphaOffset=q92X.k4CX|d4lX.I4XX,this.inertialBetaOffset=q92X.k4CX-d4lX.I4XX,this.inertialRadiusOffset=q92X.k4CX|d4lX.I4XX,this.inertialPanningX=q92X.k4CX-d4lX.I4XX,!(this.inertialPanningY=q92X.k4CX|d4lX.I4XX));},t63.prototype._isSynchronizedViewMatrix=function(){return!!K63.prototype._isSynchronizedViewMatrix.call(this)&&(this._cache._target.equals(this._getTargetPosition())&&this._cache.alpha===this.alpha&&this._cache.beta===this.beta&&this._cache.radius===this.radius&&this._cache.targetScreenOffset.equals(this.targetScreenOffset));},t63.prototype.attachControl=function(q03,F03,e03,Z03){var g03;g03=this;void d4lX.I4XX===e03&&(e03=!(G3CX.k4CX|d4lX.I4XX));void d4lX.I4XX===Z03&&(Z03=d4lX.w4XX);this._useCtrlForPanning=e03;this._panningMouseButton=Z03;this.inputs.attachElement(q03,F03);this._reset=function(){g03.inertialAlphaOffset=d4lX.I4XX;d4lX.F4XX(d4lX.I4XX);g03.inertialBetaOffset=d4lX.r4XX(d4lX.n4XX,G3CX.k4CX);d4lX.i4XX(d4lX.I4XX);g03.inertialRadiusOffset=d4lX.z4XX(d4lX.n4XX,G3CX.k4CX);g03.inertialPanningX=+G3CX.k4CX;d4lX.i4XX(d4lX.I4XX);g03.inertialPanningY=d4lX.r4XX(d4lX.n4XX,G3CX.k4CX);};},t63.prototype.detachControl=function(o03){this.inputs.detachElement(o03);this._reset&&this._reset();},t63.prototype._checkInputs=function(){var Z92X=G3CX;var y03;if(!this._collisionTriggered){if(this.inputs.checkInputs(),(Z92X.k4CX|d4lX.I4XX)!==this.inertialAlphaOffset||+Z92X.k4CX!==this.inertialBetaOffset||+Z92X.k4CX!==this.inertialRadiusOffset){y03=this.inertialAlphaOffset;this.beta<=(Z92X.k4CX|d4lX.I4XX)&&(y03*=-+Z92X.j4CX);this.getScene().useRightHandedSystem&&(y03*=-+Z92X.j4CX);this.parent&&this.parent._getWorldMatrixDeterminant()<(Z92X.k4CX|d4lX.I4XX)&&(y03*=-(Z92X.j4CX*d4lX.n4XX));this.alpha+=y03;this.beta+=this.inertialBetaOffset;this.radius-=this.inertialRadiusOffset;this.inertialAlphaOffset*=this.inertia;this.inertialBetaOffset*=this.inertia;this.inertialRadiusOffset*=this.inertia;Math.abs(this.inertialAlphaOffset)Math.PI&&(this.beta=this.beta-(m92X.U4CX-d4lX.I4XX)*Math.PI):this.betathis.upperBetaLimit&&(this.beta=this.upperBetaLimit);m92X.X4CX!==this.lowerAlphaLimit&&this.alphathis.upperAlphaLimit&&(this.alpha=this.upperAlphaLimit);m92X.X4CX!==this.lowerRadiusLimit&&this.radiusthis.upperRadiusLimit&&(this.radius=this.upperRadiusLimit);},t63.prototype.rebuildAnglesAndRadius=function(){this.position.subtractToRef(this._getTargetPosition(),this._computationVector);this.radius=this._computationVector.length();+G3CX.k4CX===this.radius&&(this.radius=+W4LX);this.alpha=Math.acos(this._computationVector.x/Math.sqrt(Math.pow(this._computationVector.x,G3CX.U4CX-d4lX.I4XX)+Math.pow(this._computationVector.z,G3CX.U4CX-d4lX.I4XX)));this._computationVector.zthis._orthoRight&&(this._orthoRight=B33.x),B33.y>this._orthoTop&&(this._orthoTop=B33.y);}}}T33=this._orthoRight-this._orthoLeft;H73=this._orthoTop-this._orthoBottom;L33.Matrix.OrthoOffCenterLHToRef(this._orthoLeft-T33*this.shadowOrthoScale,this._orthoRight+T33*this.shadowOrthoScale,this._orthoBottom-H73*this.shadowOrthoScale,this._orthoTop+H73*this.shadowOrthoScale,void+G3CX.k4CX!==this.shadowMinZ?this.shadowMinZ:s33.minZ,void+G3CX.k4CX!==this.shadowMaxZ?this.shadowMaxZ:s33.maxZ,S73);}},K33.prototype._buildUniformLayout=function(){this._uniformBuffer.addUniform(Z3LX,+G3CX.t4CX);d4lX.i4XX(d4lX.n4XX);this._uniformBuffer.addUniform(D3LX,d4lX.z4XX(d4lX.I4XX,G3CX.t4CX));this._uniformBuffer.addUniform(E3LX,d4lX.P4XX);this._uniformBuffer.addUniform(b3LX,d4lX.P4XX);d4lX.F4XX(d4lX.n4XX);this._uniformBuffer.addUniform(U3LX,d4lX.r4XX(d4lX.I4XX,G3CX.U4CX));this._uniformBuffer.create();},K33.prototype.transferToEffect=function(J73,r73){return this.computeTransformedInformation()?this._uniformBuffer.updateFloat4(Z3LX,this.transformedDirection.x,this.transformedDirection.y,this.transformedDirection.z,G3CX.j4CX*d4lX.n4XX,r73):this._uniformBuffer.updateFloat4(Z3LX,this.direction.x,this.direction.y,this.direction.z,+G3CX.j4CX,r73),this;},K33.prototype.getDepthMinZ=function(G73){return d4lX.n4XX;},K33.prototype.getDepthMaxZ=function(v73){return d4lX.n4XX;},K33.prototype.prepareLightSpecificDefines=function(w73,V73){d4lX.i4XX(d4lX.W8CX);w73[d4lX.r4XX(V73,g3LX)]=!d4lX.z4XX(d4lX.I4XX,G3CX.k4CX,d4lX.i4XX(d4lX.w4XX));},W0([L33.serialize()],K33.prototype,V4LX,u8qX.X4CX),W0([L33.serialize()],K33.prototype,z4LX,u8qX.X4CX),W0([L33.serialize()],K33.prototype,i4LX,void d4lX.I4XX),K33;}(L33.ShadowLight);L33.DirectionalLight=a33;}(Q0||(Q0={})));(function(Q73){var F4LX="Light_Type_2";var h73;Q73.Node.AddNodeConstructor(F4LX,function(D73,X73){return function(){d4lX.i4XX(d4lX.I4XX);return new h73(D73,Q73.Vector3.Zero(),Q73.Vector3.Zero(),d4lX.r4XX(d4lX.n4XX,G3CX.k4CX),+G3CX.k4CX,X73);};});h73=function(j73){var L8qX=G3CX;var O8dX="_projectionTexture";var f8dX="projectedLightTexture";var y8dX="exponent";var d8dX="projectionTexture";var W8dX="projectionTextureUpDirection";var R8dX="projectionTextureLightFar";var K8dX="projectionTextureLightNear";var J4LX="projectionTextureMatrix";var P4LX="shadowAngleScale";var w4LX="innerAngle";function W73(I73,x73,c73,N73,E73,l73){var o22X=G3CX;var M73;M73=j73.call(this,I73,l73)||this;return M73._innerAngle=o22X.k4CX|d4lX.I4XX,M73._projectionTextureMatrix=Q73.Matrix.Zero(),M73._projectionTextureLightNear=+I4LX,M73._projectionTextureLightFar=F6uX-d4lX.I4XX,M73._projectionTextureUpDirection=Q73.Vector3.Up(),M73._projectionTextureViewLightDirty=!+o22X.k4CX,M73._projectionTextureProjectionLightDirty=!(o22X.k4CX-d4lX.I4XX),M73._projectionTextureDirty=!d4lX.I4XX,M73._projectionTextureViewTargetVector=Q73.Vector3.Zero(),M73._projectionTextureViewLightMatrix=Q73.Matrix.Zero(),M73._projectionTextureProjectionLightMatrix=Q73.Matrix.Zero(),M73._projectionTextureScalingMatrix=Q73.Matrix.FromValues(o22X.s3uX-d4lX.I4XX,+o22X.k4CX,+o22X.k4CX,o22X.k4CX*d4lX.n4XX,d4lX.I4XX,o22X.s3uX-d4lX.I4XX,+o22X.k4CX,o22X.k4CX-d4lX.I4XX,d4lX.I4XX,o22X.k4CX|d4lX.I4XX,+o22X.s3uX,d4lX.I4XX,o22X.s3uX*d4lX.n4XX,a3uX,a3uX,d4lX.n4XX),M73.position=x73,M73.direction=c73,M73.angle=N73,M73.exponent=E73,M73;}return N0(W73,j73),Object.defineProperty(W73.prototype,n4LX,{get:function(){return this._angle;},set:function(A73){this._angle=A73;d4lX.i4XX(d4lX.I4XX);this._cosHalfAngle=Math.cos(d4lX.z4XX(A73,a3uX));this._projectionTextureProjectionLightDirty=!+G3CX.k4CX;this.forceProjectionMatrixCompute();this._computeAngleValues();},enumerable:!(L8qX.k4CX*d4lX.n4XX),configurable:!+L8qX.k4CX}),Object.defineProperty(W73.prototype,w4LX,{get:function(){return this._innerAngle;},set:function(b73){this._innerAngle=b73;this._computeAngleValues();},enumerable:!+L8qX.k4CX,configurable:!(L8qX.k4CX|d4lX.I4XX)}),Object.defineProperty(W73.prototype,P4LX,{get:function(){return this._shadowAngleScale;},set:function(n73){this._shadowAngleScale=n73;this.forceProjectionMatrixCompute();},enumerable:!+L8qX.k4CX,configurable:!(L8qX.k4CX|d4lX.I4XX)}),Object.defineProperty(W73.prototype,J4LX,{get:function(){return this._projectionTextureMatrix;},enumerable:!+L8qX.k4CX,configurable:!+L8qX.k4CX}),Object.defineProperty(W73.prototype,K8dX,{get:function(){return this._projectionTextureLightNear;},set:function(C73){this._projectionTextureLightNear=C73;this._projectionTextureProjectionLightDirty=!d4lX.I4XX;},enumerable:!(L8qX.k4CX*d4lX.n4XX),configurable:!+L8qX.k4CX}),Object.defineProperty(W73.prototype,R8dX,{get:function(){return this._projectionTextureLightFar;},set:function(L73){this._projectionTextureLightFar=L73;this._projectionTextureProjectionLightDirty=!+G3CX.k4CX;},enumerable:!d4lX.I4XX,configurable:!+L8qX.k4CX}),Object.defineProperty(W73.prototype,W8dX,{get:function(){return this._projectionTextureUpDirection;},set:function(a73){this._projectionTextureUpDirection=a73;this._projectionTextureProjectionLightDirty=!+G3CX.k4CX;},enumerable:!d4lX.I4XX,configurable:!(L8qX.k4CX-d4lX.I4XX)}),Object.defineProperty(W73.prototype,d8dX,{get:function(){return this._projectionTexture;},set:function(z73){this._projectionTexture=z73;d4lX.i4XX(d4lX.w4XX);this._projectionTextureDirty=!d4lX.z4XX(d4lX.I4XX,G3CX.k4CX);},enumerable:!d4lX.I4XX,configurable:!(L8qX.k4CX|d4lX.I4XX)}),W73.prototype.getClassName=function(){var g8dX="SpotLight";return g8dX;},W73.prototype.getTypeID=function(){return Q73.Light.LIGHTTYPEID_SPOTLIGHT;},W73.prototype._setDirection=function(t73){j73.prototype._setDirection.call(this,t73);d4lX.i4XX(d4lX.n4XX);this._projectionTextureViewLightDirty=!d4lX.r4XX(d4lX.I4XX,G3CX.k4CX);},W73.prototype._setPosition=function(K73){j73.prototype._setPosition.call(this,K73);this._projectionTextureViewLightDirty=!+G3CX.k4CX;},W73.prototype._setDefaultShadowProjectionMatrix=function(u73,k73,f73){var p73,i73;p73=this.getScene().activeCamera;if(p73){this._shadowAngleScale=this._shadowAngleScale||+G3CX.j4CX;i73=this._shadowAngleScale*this._angle;Q73.Matrix.PerspectiveFovLHToRef(i73,+G3CX.j4CX,this.getDepthMinZ(p73),this.getDepthMaxZ(p73),u73);}},W73.prototype._computeProjectionTextureViewLightMatrix=function(){this._projectionTextureViewLightDirty=!d4lX.n4XX;d4lX.i4XX(d4lX.n4XX);this._projectionTextureDirty=!d4lX.r4XX(d4lX.I4XX,G3CX.k4CX);this.position.addToRef(this.direction,this._projectionTextureViewTargetVector);Q73.Matrix.LookAtLHToRef(this.position,this._projectionTextureViewTargetVector,this._projectionTextureUpDirection,this._projectionTextureViewLightMatrix);},W73.prototype._computeProjectionTextureProjectionLightMatrix=function(){var s22X=G3CX;var g73,e73,Z73,F73,q73;this._projectionTextureProjectionLightDirty=!+s22X.j4CX;this._projectionTextureDirty=!d4lX.I4XX;g73=this.projectionTextureLightFar;e73=this.projectionTextureLightNear;d4lX.i4XX(d4lX.l8CX);Z73=d4lX.r4XX(g73,g73,e73);d4lX.i4XX(s22X.G6CX);F73=d4lX.r4XX(e73,Z73);q73=+s22X.j4CX/Math.tan(this._angle/(s22X.U4CX*d4lX.n4XX));d4lX.F4XX(d4lX.j8CX);Q73.Matrix.FromValuesToRef(d4lX.r4XX(q73,s22X.j4CX),+s22X.k4CX,+s22X.k4CX,d4lX.z4XX(d4lX.I4XX,s22X.k4CX,d4lX.i4XX(d4lX.n4XX)),+s22X.k4CX,q73,+s22X.k4CX,d4lX.r4XX(d4lX.I4XX,s22X.k4CX,d4lX.F4XX(d4lX.n4XX)),d4lX.I4XX,d4lX.r4XX(d4lX.I4XX,s22X.k4CX,d4lX.F4XX(d4lX.w4XX)),Z73,d4lX.z4XX(d4lX.n4XX,s22X.j4CX,d4lX.i4XX(d4lX.I4XX)),+s22X.k4CX,+s22X.k4CX,F73,d4lX.r4XX(d4lX.I4XX,s22X.k4CX,d4lX.i4XX(d4lX.w4XX)),this._projectionTextureProjectionLightMatrix);},W73.prototype._computeProjectionTextureMatrix=function(){this._projectionTextureDirty=!+G3CX.j4CX;this._projectionTextureViewLightMatrix.multiplyToRef(this._projectionTextureProjectionLightMatrix,this._projectionTextureMatrix);this._projectionTextureMatrix.multiplyToRef(this._projectionTextureScalingMatrix,this._projectionTextureMatrix);},W73.prototype._buildUniformLayout=function(){var E22X=G3CX;this._uniformBuffer.addUniform(Z3LX,+E22X.t4CX);this._uniformBuffer.addUniform(D3LX,+E22X.t4CX);this._uniformBuffer.addUniform(E3LX,+E22X.l4CX);this._uniformBuffer.addUniform(q3LX,+E22X.l4CX);this._uniformBuffer.addUniform(s3LX,+E22X.t4CX);this._uniformBuffer.addUniform(b3LX,+E22X.l4CX);this._uniformBuffer.addUniform(U3LX,+E22X.U4CX);this._uniformBuffer.create();},W73.prototype._computeAngleValues=function(){this._lightAngleScale=+G3CX.j4CX/Math.max(Y3uX*d4lX.n4XX,Math.cos((G3CX.s3uX-d4lX.I4XX)*this._innerAngle)-this._cosHalfAngle);this._lightAngleOffset=-this._cosHalfAngle*this._lightAngleScale;},W73.prototype.transferToEffect=function(R73,o73){var y73;return this.computeTransformedInformation()?(this._uniformBuffer.updateFloat4(Z3LX,this.transformedPosition.x,this.transformedPosition.y,this.transformedPosition.z,this.exponent,o73),y73=Q73.Vector3.Normalize(this.transformedDirection)):(this._uniformBuffer.updateFloat4(Z3LX,this.position.x,this.position.y,this.position.z,this.exponent,o73),y73=Q73.Vector3.Normalize(this.direction)),this._uniformBuffer.updateFloat4(q3LX,y73.x,y73.y,y73.z,this._cosHalfAngle,o73),this._uniformBuffer.updateFloat4(s3LX,this.range,this._inverseSquaredRange,this._lightAngleScale,this._lightAngleOffset,o73),this.projectionTexture&&this.projectionTexture.isReady()&&(this._projectionTextureViewLightDirty&&this._computeProjectionTextureViewLightMatrix(),this._projectionTextureProjectionLightDirty&&this._computeProjectionTextureProjectionLightMatrix(),this._projectionTextureDirty&&this._computeProjectionTextureMatrix(),R73.setMatrix(A3LX+o73,this._projectionTextureMatrix),R73.setTexture(H3LX+o73,this.projectionTexture)),this;},W73.prototype.dispose=function(){j73.prototype.dispose.call(this);this._projectionTexture&&this._projectionTexture.dispose();},W73.prototype.prepareLightSpecificDefines=function(B73,P73){d4lX.i4XX(d4lX.W8CX);B73[d4lX.z4XX(P73,R3LX)]=!d4lX.I4XX;d4lX.i4XX(d4lX.W8CX);B73[d4lX.r4XX(P73,v3LX)]=!!this.projectionTexture;},W0([Q73.serialize()],W73.prototype,n4LX,L8qX.X4CX),W0([Q73.serialize()],W73.prototype,w4LX,L8qX.X4CX),W0([Q73.serialize()],W73.prototype,P4LX,L8qX.X4CX),W0([Q73.serialize()],W73.prototype,y8dX,void(L8qX.k4CX*d4lX.n4XX)),W0([Q73.serialize()],W73.prototype,K8dX,L8qX.X4CX),W0([Q73.serialize()],W73.prototype,R8dX,L8qX.X4CX),W0([Q73.serialize()],W73.prototype,W8dX,L8qX.X4CX),W0([Q73.serializeAsTexture(f8dX)],W73.prototype,O8dX,void+L8qX.k4CX),W73;}(Q73.ShadowLight);Q73.SpotLight=h73;}(Q0||(Q0={})));w6Z=Q0||(Q0={});I3Z=function(){d4lX.i4XX(d4lX.w4XX);this.enableBlending=!d4lX.r4XX(d4lX.I4XX,G3CX.j4CX);d4lX.F4XX(d4lX.I4XX);this.blendingSpeed=d4lX.z4XX(d4lX.n4XX,u8LX);this.loopMode=w6Z.Animation.ANIMATIONLOOPMODE_CYCLE;};w6Z.AnimationPropertiesOverride=I3Z;(function(O73){var Y8dX="STEP";var s73,T73,H43,U43,Y43,d43;s73=function(){function S43(m43,r43,J43){this.name=m43;this.from=r43;this.to=J43;}return S43.prototype.clone=function(){return new S43(this.name,this.from,this.to);},S43;}();O73.AnimationRange=s73;T73=function(){function G43(v43,w43,V43){this.frame=v43;this.action=w43;this.onlyOnce=V43;this.isDone=!+G3CX.j4CX;}return G43.prototype._clone=function(){return new G43(this.frame,this.action,this.onlyOnce);},G43;}();O73.AnimationEvent=T73;Y43=function(){function Q43(h43){this.path=h43;this._onchange=new Array();d4lX.F4XX(d4lX.n4XX);this.value=d4lX.z4XX(d4lX.I4XX,G3CX.k4CX);this.animations=new Array();}return Q43.prototype.getPoint=function(){var D43;D43=this.path.getPointAtLengthPosition(this.value);return new O73.Vector3(D43.x,d4lX.I4XX,D43.y);},Q43.prototype.moveAhead=function(X43){return void(G3CX.k4CX|d4lX.I4XX)===X43&&(X43=+S8dX),this.move(X43),this;},Q43.prototype.moveBack=function(W43){return void+G3CX.k4CX===W43&&(W43=S8dX-d4lX.I4XX),this.move(-W43),this;},Q43.prototype.move=function(j43){var Q8dX="step size should be less than 1.";if(+G3CX.j4CX=H23&&this._keys[P83].frame<=U23&&this._keys.splice(P83,M8qX.j4CX-d4lX.I4XX);}this._ranges[T83]=M8qX.X4CX;}},c43.prototype.getRange=function(Y23){return this._ranges[Y23];},c43.prototype.getKeys=function(){return this._keys;},c43.prototype.getHighestFrame=function(){for(var S23=+M8qX.k4CX,d23=+M8qX.k4CX,m23=this._keys.length;d23=m13)for(;+M8qX.k4CX<=d13-M8qX.j4CX*d4lX.n4XX&&P23[d13].frame>=m13;){d13--;}for(var r13=d13;r13=m13){s23=P23[r13];B23=this._getKeyValue(s23.value);if(s23.interpolation===H43.STEP){return B23;}O23=this._getKeyValue(H13.value);J13=void d4lX.I4XX!==s23.outTangent&&void+M8qX.k4CX!==H13.inTangent;T23=H13.frame-s23.frame;R23=(m13-s23.frame)/T23;V13=this.getEasingFunction();switch(M8qX.X4CX!=V13&&(R23=V13.ease(R23)),this.dataType){case c43.ANIMATIONTYPE_FLOAT:Q13=J13?this.floatInterpolateFunctionWithTangents(B23,s23.outTangent*T23,O23,H13.inTangent*T23,R23):this.floatInterpolateFunction(B23,O23,R23);switch(U13){case c43.ANIMATIONLOOPMODE_CYCLE:case c43.ANIMATIONLOOPMODE_CONSTANT:return Q13;case c43.ANIMATIONLOOPMODE_RELATIVE:d4lX.i4XX(M8qX.A3CX);return d4lX.z4XX(Y13,S13,Q13);}break;case c43.ANIMATIONTYPE_QUATERNION:G13=J13?this.quaternionInterpolateFunctionWithTangents(B23,s23.outTangent.scale(T23),O23,H13.inTangent.scale(T23),R23):this.quaternionInterpolateFunction(B23,O23,R23);switch(U13){case c43.ANIMATIONLOOPMODE_CYCLE:case c43.ANIMATIONLOOPMODE_CONSTANT:return G13;case c43.ANIMATIONLOOPMODE_RELATIVE:return G13.addInPlace(S13.scale(Y13));}return G13;case c43.ANIMATIONTYPE_VECTOR3:h13=J13?this.vector3InterpolateFunctionWithTangents(B23,s23.outTangent.scale(T23),O23,H13.inTangent.scale(T23),R23):this.vector3InterpolateFunction(B23,O23,R23);switch(U13){case c43.ANIMATIONLOOPMODE_CYCLE:case c43.ANIMATIONLOOPMODE_CONSTANT:return h13;case c43.ANIMATIONLOOPMODE_RELATIVE:return h13.add(S13.scale(Y13));}case c43.ANIMATIONTYPE_VECTOR2:w13=J13?this.vector2InterpolateFunctionWithTangents(B23,s23.outTangent.scale(T23),O23,H13.inTangent.scale(T23),R23):this.vector2InterpolateFunction(B23,O23,R23);switch(U13){case c43.ANIMATIONLOOPMODE_CYCLE:case c43.ANIMATIONLOOPMODE_CONSTANT:return w13;case c43.ANIMATIONLOOPMODE_RELATIVE:return w13.add(S13.scale(Y13));}case c43.ANIMATIONTYPE_SIZE:switch(U13){case c43.ANIMATIONLOOPMODE_CYCLE:case c43.ANIMATIONLOOPMODE_CONSTANT:return this.sizeInterpolateFunction(B23,O23,R23);case c43.ANIMATIONLOOPMODE_RELATIVE:return this.sizeInterpolateFunction(B23,O23,R23).add(S13.scale(Y13));}case c43.ANIMATIONTYPE_COLOR3:switch(U13){case c43.ANIMATIONLOOPMODE_CYCLE:case c43.ANIMATIONLOOPMODE_CONSTANT:return this.color3InterpolateFunction(B23,O23,R23);case c43.ANIMATIONLOOPMODE_RELATIVE:return this.color3InterpolateFunction(B23,O23,R23).add(S13.scale(Y13));}case c43.ANIMATIONTYPE_MATRIX:switch(U13){case c43.ANIMATIONLOOPMODE_CYCLE:case c43.ANIMATIONLOOPMODE_CONSTANT:if(c43.AllowMatricesInterpolation){return this.matrixInterpolateFunction(B23,O23,R23,D13);}case c43.ANIMATIONLOOPMODE_RELATIVE:return B23;}}break;}}return this._getKeyValue(P23[P23.length-M8qX.j4CX*d4lX.n4XX].value);},c43.prototype.matrixInterpolateFunction=function(W13,j13,M13,X13){return c43.AllowMatrixDecomposeForInterpolation?X13?(O73.Matrix.DecomposeLerpToRef(W13,j13,M13,X13),X13):O73.Matrix.DecomposeLerp(W13,j13,M13):X13?(O73.Matrix.LerpToRef(W13,j13,M13,X13),X13):O73.Matrix.Lerp(W13,j13,M13);},c43.prototype.clone=function(){var I13,c13;I13=new c43(this.name,this.targetPropertyPath.join(M8qX.P4CX),this.framePerSecond,this.dataType,this.loopMode);if(I13.enableBlending=this.enableBlending,I13.blendingSpeed=this.blendingSpeed,this._keys&&I13.setKeys(this._keys),this._ranges)for(var x13 in I13._ranges={},this._ranges){c13=this._ranges[x13];c13&&(I13._ranges[x13]=c13.clone());}return I13;},c43.prototype.setKeys=function(N13){this._keys=N13.slice(+M8qX.k4CX);},c43.prototype.serialize=function(){var E13,z13,n13,l13,C13,A13;E13={};E13.name=this.name;E13.property=this.targetProperty;E13.framePerSecond=this.framePerSecond;E13.dataType=this.dataType;E13.loopBehavior=this.loopMode;E13.enableBlending=this.enableBlending;E13.blendingSpeed=this.blendingSpeed;z13=this.dataType;E13.keys=[];for(var L13=this.getKeys(),b13=M8qX.k4CX|d4lX.I4XX;b13G5c[G3CX.k4CX|d4lX.I4XX].frame&&(this._from=G5c[d4lX.I4XX].frame),this._toQ5c){M5c={frame:Q5c,value:X5c.value,inTangent:X5c.inTangent,outTangent:X5c.outTangent,interpolation:X5c.interpolation};d4lX.i4XX(d4lX.I4XX);D5c.splice(d4lX.I4XX,d4lX.z4XX(d4lX.n4XX,d22X.k4CX),M5c);}if(W5c.framee6c[e6c.length-d4lX.n4XX].frame&&(Z6c=e6c[e6c.length-d4lX.n4XX].frame);d4lX.i4XX(d4lX.w4XX);q6c=this._interpolate(Z6c,d4lX.z4XX(d4lX.I4XX,b0RX.k4CX),this._getCorrectLoopMode());this.setValue(q6c,-+b0RX.j4CX);},S6c.prototype._prepareForSpeedRatioChange=function(o6c){var F6c;F6c=this._previousDelay*(this._animation.framePerSecond*o6c)/+F6uX;this._ratioOffset=this._previousRatio-F6c;},S6c.prototype.animate=function(Q0c,R6c,P6c,W0c,X0c,V0c){var U6CX=186;var w0c,J0c,y6c,v0c,T6c,H0c,S0c,G0c,s6c,d0c,Y0c,h0c,U0c,m0c,O6c,D0c,r0c;void+b0RX.k4CX===V0c&&(V0c=-+b0RX.j4CX);w0c=this._animation.targetPropertyPath;if(!w0c||w0c.length<(b0RX.j4CX|d4lX.I4XX)){d4lX.F4XX(d4lX.I4XX);return!(this._stopped=!d4lX.z4XX(d4lX.n4XX,b0RX.k4CX));}d4lX.F4XX(d4lX.I4XX);J0c=!d4lX.r4XX(d4lX.n4XX,b0RX.k4CX);y6c=this._animation.getKeys();if(+b0RX.k4CX!==y6c[b0RX.k4CX|d4lX.I4XX].frame){v0c={frame:+b0RX.k4CX,value:y6c[b0RX.k4CX*d4lX.n4XX].value};d4lX.F4XX(d4lX.n4XX);y6c.splice(+b0RX.k4CX,d4lX.z4XX(d4lX.I4XX,b0RX.k4CX),v0c);}else if(+b0RX.j4CX===y6c.length){v0c={frame:+Y3uX,value:y6c[+b0RX.k4CX].value};y6c.push(v0c);}(R6cy6c[y6c.length-+b0RX.j4CX].frame)&&(R6c=y6c[+b0RX.k4CX].frame);(P6cy6c[y6c.length-b0RX.j4CX*d4lX.n4XX].frame)&&(P6c=y6c[y6c.length-+b0RX.j4CX].frame);R6c===P6c&&(R6c>y6c[+b0RX.k4CX].frame?R6c--:P6cU0c||H0c=O6c[B6c].frame&&O6c[B6c].frame>=R6c||H0cthis.value;case V7c.IsLesser:return this._effectiveTarget[this._property]=N4c.OnPickTrigger&&g4c.trigger<=N4c.OnPointerOutTrigger){return!d4lX.I4XX;}}return!+G3CX.j4CX;},enumerable:!+F3qX.k4CX,configurable:!(F3qX.k4CX-d4lX.I4XX)}),Object.defineProperty(N4c.prototype,a3dX,{get:function(){var Z4c;for(var e4c=+G3CX.k4CX;e4c=N4c.OnPickTrigger&&Z4c.trigger<=N4c.OnPickUpTrigger){return!+G3CX.k4CX;}}return!+G3CX.j4CX;},enumerable:!+F3qX.k4CX,configurable:!(F3qX.k4CX*d4lX.n4XX)}),Object.defineProperty(N4c,G3dX,{get:function(){for(var q4c in N4c.Triggers)if(N4c.Triggers.hasOwnProperty(q4c)){d4lX.i4XX(d4lX.n4XX);return!d4lX.z4XX(d4lX.I4XX,G3CX.k4CX);}return!d4lX.n4XX;},enumerable:!d4lX.I4XX,configurable:!+F3qX.k4CX}),Object.defineProperty(N4c,b3dX,{get:function(){var o4c;for(var F4c in N4c.Triggers)if(N4c.Triggers.hasOwnProperty(F4c)){o4c=parseInt(F4c);if(N4c.OnPickTrigger<=o4c&&o4c<=N4c.OnPickUpTrigger){d4lX.F4XX(d4lX.I4XX);return!d4lX.z4XX(d4lX.n4XX,G3CX.k4CX);}}return!d4lX.n4XX;},enumerable:!+F3qX.k4CX,configurable:!(F3qX.k4CX*d4lX.n4XX)}),N4c.HasSpecificTrigger=function(R4c){for(var y4c in N4c.Triggers){if(N4c.Triggers.hasOwnProperty(y4c))if(parseInt(y4c)===R4c){return!d4lX.I4XX;}}return!d4lX.n4XX;},N4c.prototype.registerAction=function(B4c){var U3dX="OnEveryFrameTrigger can only be used with scene.actionManager";return B4c.trigger===N4c.OnEveryFrameTrigger&&this.getScene().actionManager!==this?(s7c.Tools.Warn(U3dX),G3CX.X4CX):(this.actions.push(B4c),N4c.Triggers[B4c.trigger]?N4c.Triggers[B4c.trigger]++:N4c.Triggers[B4c.trigger]=+G3CX.j4CX,B4c._actionManager=this,B4c._prepare(),B4c);},N4c.prototype.unregisterAction=function(P4c){var O4c;O4c=this.actions.indexOf(P4c);return-(G3CX.j4CX-d4lX.I4XX)!==O4c&&(this.actions.splice(O4c,+G3CX.j4CX),N4c.Triggers[P4c.trigger]-=+G3CX.j4CX,d4lX.I4XX===N4c.Triggers[P4c.trigger]&&delete N4c.Triggers[P4c.trigger],delete P4c._actionManager,!+G3CX.k4CX);},N4c.prototype.processTrigger=function(Y8c,s4c){var U8c,T4c,d8c,S8c;for(var H8c=+G3CX.k4CX;H8c>g7qX.k4CX*G3RR;d4lX.i4XX(d4lX.W8CX);this._vertexData[d4lX.r4XX(d4lX.y8CX,K5f)]=p5f.cellIndex-k5f*f5f;d4lX.F4XX(d4lX.m8CX);this._vertexData[d4lX.r4XX(K5f,x3uX.c3uX)]=k5f;d4lX.F4XX(d4lX.W8CX);this._vertexData[d4lX.r4XX(d4lX.O8CX,K5f)]=p5f.color.r;d4lX.i4XX(d4lX.f8CX);this._vertexData[d4lX.r4XX(K5f,d4lX.n4XX,g7qX.o3uX)]=p5f.color.g;d4lX.i4XX(d4lX.w8CX);this._vertexData[d4lX.r4XX(d4lX.I4XX,K5f,g7qX.L3uX)]=p5f.color.b;d4lX.F4XX(d4lX.B8CX);this._vertexData[d4lX.z4XX(g7qX.e3uX,K5f,d4lX.I4XX)]=p5f.color.a;},W5f.prototype.intersects=function(O5f,Y6f,H6f,U6f){var f7qX=G3CX;var e5f,P5f,q5f;for(var s5f=Math.min(this._capacity,this.sprites.length),R5f=x3.Vector3.Zero(),B5f=x3.Vector3.Zero(),o5f=Number.MAX_VALUE,y5f=f7qX.X4CX,Z5f=x3.Vector3.Zero(),T5f=Y6f.getViewMatrix(),F5f=f7qX.k4CX*d4lX.n4XX;F5fthis._delay&&(this._time=this._time%this._delay,this.cellIndex+=this._direction,this.cellIndex>this._toIndex&&(this._loopAnimation?this.cellIndex=this._fromIndex:(this.cellIndex=this._toIndex,this._animationStarted=!(G3CX.j4CX-d4lX.I4XX),this._onAnimationEnd&&this._onAnimationEnd(),this.disposeWhenFinishedAnimating&&this.dispose()))));},D6f.prototype.dispose=function(){for(var l6f=+G3CX.k4CX;l6f=n6f.distance))&&(n6f=C6f,a6f))break;}}return n6f||new A6f.PickingInfo();};A6f.Scene.prototype.pickSprite=function(u6f,k6f,f6f,g6f,i6f){return this.createPickingRayInCameraSpaceToRef(u6f,k6f,this._tempSpritePickingRay,i6f),this._internalPickSprites(this._tempSpritePickingRay,f6f,g6f,i6f);};A6f.Scene.prototype.pickSpriteWithRay=function(Z6f,q6f,F6f,e6f){if(!this._tempSpritePickingRay){return G3CX.X4CX;}if(!e6f){if(!this.activeCamera){return G3CX.X4CX;}e6f=this.activeCamera;}return A6f.Ray.TransformToRef(Z6f,e6f.getViewMatrix(),this._tempSpritePickingRay),this._internalPickSprites(this._tempSpritePickingRay,q6f,F6f,e6f);};A6f.Scene.prototype.setPointerOverSprite=function(o6f){this._pointerOverSprite!==o6f&&(this._pointerOverSprite&&this._pointerOverSprite.actionManager&&this._pointerOverSprite.actionManager.processTrigger(A6f.ActionManager.OnPointerOutTrigger,A6f.ActionEvent.CreateNewFromSprite(this._pointerOverSprite,this)),this._pointerOverSprite=o6f,this._pointerOverSprite&&this._pointerOverSprite.actionManager&&this._pointerOverSprite.actionManager.processTrigger(A6f.ActionManager.OnPointerOverTrigger,A6f.ActionEvent.CreateNewFromSprite(this._pointerOverSprite,this)));};A6f.Scene.prototype.getPointerOverSprite=function(){return this._pointerOverSprite;};b6f=function(){function y6f(R6f){this.name=A6f.SceneComponentConstants.NAME_SPRITE;this.scene=R6f;this.scene.spriteManagers=new Array();this.scene._tempSpritePickingRay=A6f.Ray?A6f.Ray.Zero():G3CX.X4CX;this.scene.onBeforeSpritesRenderingObservable=new A6f.Observable();this.scene.onAfterSpritesRenderingObservable=new A6f.Observable();this._spritePredicate=function(B6f){return!!B6f.actionManager&&(B6f.isPickable&&B6f.actionManager.hasPointerTriggers);};}return y6f.prototype.register=function(){this.scene._pointerMoveStage.registerStep(A6f.SceneComponentConstants.STEP_POINTERMOVE_SPRITE,this,this._pointerMove);this.scene._pointerDownStage.registerStep(A6f.SceneComponentConstants.STEP_POINTERDOWN_SPRITE,this,this._pointerDown);this.scene._pointerUpStage.registerStep(A6f.SceneComponentConstants.STEP_POINTERUP_SPRITE,this,this._pointerUp);},y6f.prototype.rebuild=function(){},y6f.prototype.dispose=function(){this.scene.onBeforeSpritesRenderingObservable.clear();this.scene.onAfterSpritesRenderingObservable.clear();for(var P6f=this.scene.spriteManagers;P6f.length;){P6f[+G3CX.k4CX].dispose();}},y6f.prototype._pickSpriteButKeepRay=function(s6f,T6f,H0f,U0f,Y0f){var O6f;O6f=this.scene.pickSprite(T6f,H0f,this._spritePredicate,U0f,Y0f);return O6f&&(O6f.ray=s6f?s6f.ray:G3CX.X4CX),O6f;},y6f.prototype._pointerMove=function(r0f,J0f,S0f,G0f,m0f){var d0f;d0f=this.scene;return G0f?d0f.setPointerOverSprite(G3CX.X4CX):(S0f=this._pickSpriteButKeepRay(S0f,r0f,J0f,!(G3CX.j4CX|d4lX.I4XX),d0f.cameraToUseForPointers||void(G3CX.k4CX*d4lX.n4XX)))&&S0f.hit&&S0f.pickedSprite?(d0f.setPointerOverSprite(S0f.pickedSprite),d0f._pointerOverSprite&&d0f._pointerOverSprite.actionManager&&d0f._pointerOverSprite.actionManager.hoverCursor?m0f.style.cursor=d0f._pointerOverSprite.actionManager.hoverCursor:m0f.style.cursor=d0f.hoverCursor):d0f.setPointerOverSprite(G3CX.X4CX),S0f;},y6f.prototype._pointerDown=function(Q0f,h0f,v0f,V0f){var U72X=G3CX;var w0f;w0f=this.scene;if(w0f._pickedDownSprite=U72X.X4CX,U72X.k4CX*d4lX.n4XXm9f.x){d4lX.F4XX(d4lX.I4XX);return!d4lX.z4XX(d4lX.n4XX,b6qX.j4CX);}}else if(Y9f=b6qX.j4CX*d4lX.n4XX/this.direction.x,H9f=(S9f.x-this.origin.x)*Y9f,(T0f=(m9f.x-this.origin.x)*Y9f)===-(b6qX.j4CX|d4lX.I4XX)/+b6qX.k4CX&&(T0f=+b6qX.j4CX/(b6qX.k4CX|d4lX.I4XX)),T0fm9f.y){return!+b6qX.j4CX;}}else if(Y9f=(b6qX.j4CX|d4lX.I4XX)/this.direction.y,H9f=(S9f.y-this.origin.y)*Y9f,(T0f=(m9f.y-this.origin.y)*Y9f)===-d4lX.n4XX/+b6qX.k4CX&&(T0f=d4lX.n4XX/(b6qX.k4CX-d4lX.I4XX)),T0fm9f.z){d4lX.i4XX(d4lX.w4XX);return!d4lX.z4XX(d4lX.I4XX,b6qX.j4CX);}}else if(Y9f=+b6qX.j4CX/this.direction.z,H9f=(S9f.z-this.origin.z)*Y9f,(T0f=(m9f.z-this.origin.z)*Y9f)===-d4lX.n4XX/d4lX.I4XX&&(T0f=(b6qX.j4CX|d4lX.I4XX)/(b6qX.k4CX*d4lX.n4XX)),T0fthis.length?T6qX.X4CX:new D3.IntersectionInfo(X9f,j9f,x9f);},B0f.prototype.intersectsPlane=function(E9f){var E7dX="9.99999997475243e-7";var l9f,A9f,b9f;A9f=D3.Vector3.Dot(E9f.normal,this.direction);if(Math.abs(A9f)<+E7dX){return G3CX.X4CX;}b9f=D3.Vector3.Dot(E9f.normal,this.origin);return(l9f=(-E9f.d-b9f)/A9f)<+G3CX.k4CX?l9f<-(E7dX*d4lX.n4XX)?G3CX.X4CX:d4lX.I4XX:l9f;},B0f.prototype.intersectsMesh=function(C9f,L9f){var n9f;d4lX.i4XX(d4lX.w4XX);n9f=D3.Tmp.Matrix[d4lX.z4XX(d4lX.I4XX,G3CX.k4CX)];return C9f.getWorldMatrix().invertToRef(n9f),this._tmpRay?B0f.TransformToRef(this,n9f,this._tmpRay):this._tmpRay=B0f.Transform(this,n9f),C9f.intersects(this._tmpRay,L9f);},B0f.prototype.intersectsMeshes=function(K9f,p9f,a9f){var t9f;a9f?a9f.length=G3CX.k4CX|d4lX.I4XX:a9f=[];for(var z9f=G3CX.k4CX|d4lX.I4XX;z9fu9f.distance?+G3CX.j4CX:G3CX.k4CX|d4lX.I4XX;},B0f.prototype.intersectionSegment=function(S3f,m3f,d3f){var d1qX=G3CX;var s9f,k9f,B9f,f9f,U3f,y9f,o9f,T9f,q9f,Z9f,R9f,e9f,P9f,O9f,g9f,F9f,H3f,Y3f;U3f=this.origin.add(this.direction.multiplyByFloats(B0f.rayl,B0f.rayl,B0f.rayl));y9f=m3f.subtract(S3f);o9f=U3f.subtract(this.origin);T9f=S3f.subtract(this.origin);q9f=D3.Vector3.Dot(y9f,y9f);Z9f=D3.Vector3.Dot(y9f,o9f);R9f=D3.Vector3.Dot(o9f,o9f);e9f=D3.Vector3.Dot(y9f,T9f);P9f=D3.Vector3.Dot(o9f,T9f);d4lX.i4XX(d4lX.J8CX);O9f=d4lX.z4XX(Z9f,q9f,R9f,Z9f);g9f=O9f;F9f=O9f;O9fthis._velocityWorldLength+r7f+V7f)&&(S7f=w7f,m7f=v7f,d7f=this._basePointWorld,Y7f=this._velocityWorldLength+r7f,!(S7f.x>d7f.x+Y7f||d7f.x-Y7f>m7f.x||S7f.y>d7f.y+Y7f||d7f.y-Y7f>m7f.y||S7f.z>d7f.z+Y7f||d7f.z-Y7f>m7f.z));},F3f.prototype._testTriangle=function(a7f,n7f,E7f,A7f,l7f,u7f){var e1qX=G3CX;var x6CX=196;var I7f,K7f,b7f,t7f,z7f,C7f,i7f,c7f,D7f,L7f,N7f,j7f,M7f,Q7f,h7f,W7f,X7f,x7f,p7f;K7f=!+e1qX.j4CX;n7f||(n7f=[]);n7f[a7f]||(n7f[a7f]=new G3.Plane(+e1qX.k4CX,+e1qX.k4CX,d4lX.I4XX,d4lX.I4XX),n7f[a7f].copyFromPoints(E7f,A7f,l7f));b7f=n7f[a7f];if(u7f||b7f.isFrontFacingTo(this._normalizedVelocity,e1qX.k4CX-d4lX.I4XX)){t7f=b7f.signedDistanceTo(this._basePoint);z7f=G3.Vector3.Dot(b7f.normal,this._velocity);if(+e1qX.k4CX==z7f){if(e1qX.j4CX-d4lX.I4XX<=Math.abs(t7f)){return;}d4lX.i4XX(d4lX.n4XX);K7f=!d4lX.z4XX(d4lX.I4XX,e1qX.k4CX);d4lX.i4XX(d4lX.n4XX);I7f=d4lX.z4XX(d4lX.I4XX,e1qX.k4CX);}else{d4lX.i4XX(x6CX);C7f=d4lX.z4XX(t7f,z7f,d4lX.I4XX,e1qX.j4CX);if(C7f<(I7f=(-(e1qX.j4CX*d4lX.n4XX)-t7f)/z7f)){i7f=C7f;C7f=I7f;I7f=i7f;}if(e1qX.j4CX*d4lX.n4XX=W8f){Q8f.copyFrom(w8f);}else{X8f=V8f?V8f.collisionMask:G8f.collisionMask;G8f._initialize(w8f,J8f,D8f);for(var h8f=d4lX.I4XX;h8fF2f.lifeTime){r1f=F2f.age-Y1f;s2f=(F2f.lifeTime-Y1f)*s2f/r1f;F2f.age=F2f.lifeTime;}O2f=F2f.age/F2f.lifeTime;b2f._colorGradients&&+u0NX.k4CX=F2f.lifeTime)return b2f._emitFromParticle(F2f),F2f._attachedSubEmitters&&(F2f._attachedSubEmitters.forEach(function(u1f){u1f.particleSystem.disposeOnStop=!+G3CX.k4CX;u1f.particleSystem.stop();}),F2f._attachedSubEmitters=u0NX.X4CX),b2f.recycleParticle(F2f),R2f--,M7dX;},R2f=+G3CX.k4CX;R2fy1f.gradient?d4lX.n4XX:G3CX.k4CX|d4lX.I4XX;});},l2f.prototype._removeFactorGradient=function(B1f,s1f){if(B1f)for(var P1f=+G3CX.k4CX,R1f=+G3CX.k4CX,O1f=B1f;R1fs55.gradient?+G3CX.j4CX:G3CX.k4CX|d4lX.I4XX;}),this._rampGradientsTexture&&(this._rampGradientsTexture.dispose(),this._rampGradientsTexture=G3CX.X4CX),this._createRampGradientTexture(),this;},l2f.prototype.removeRampGradient=function(T55){return this._removeGradientAndTexture(T55,this._rampGradients,this._rampGradientsTexture),this._rampGradientsTexture=G3CX.X4CX,this._rampGradients&&+G3CX.k4CXm65.gradient?d4lX.n4XX:G3CX.k4CX*d4lX.n4XX;}),this;},l2f.prototype.removeColorGradient=function(v65){if(!this._colorGradients){return this;}for(var J65=G3CX.k4CX|d4lX.I4XX,r65=G3CX.k4CX*d4lX.n4XX,G65=this._colorGradients;r65>(p9qX.k4CX|d4lX.I4XX);this._newPartsExcess+=z05*this._scaledUpdateSpeed-L05;}if((p9qX.j4CX|d4lX.I4XX)>+p9qX.k4CX,this._newPartsExcess-=this._newPartsExcess>>d4lX.I4XX),this._alive=!+p9qX.j4CX,this._stopped?L05=p9qX.k4CX*d4lX.n4XX:(this._actualFrame+=this._scaledUpdateSpeed,this.targetStopDuration&&this._actualFrame>=this.targetStopDuration&&this.stop()),this._update(L05),this._stopped&&(this._alive||(this._started=!d4lX.n4XX,this.onAnimationEnd&&this.onAnimationEnd(),this.disposeOnStop&&this._scene._toBeDisposed.push(this))),!a05){for(var K05=+p9qX.k4CX,t05=p9qX.k4CX-d4lX.I4XX;t05this._maxX||K6wthis._maxZ){return this.position.y;}this._heightQuads&&+o4qX.k4CX!=this._heightQuads.length||(this._initHeightQuads(),this._computeHeightQuads());i6w=this._getFacetAt(t6w,K6w);f6w=-(i6w.x*t6w+i6w.z*K6w+i6w.w)/ i6w.y;return k3.Vector3.TransformCoordinatesFromFloatsToRef(o4qX.k4CX-d4lX.I4XX,f6w,+o4qX.k4CX,u6w,p6w),p6w.y;},A6w.prototype.getNormalAtCoordinates=function(e6w,Z6w){var g6w;g6w=new k3.Vector3(+G3CX.k4CX,+G3CX.j4CX,+G3CX.k4CX);return this.getNormalAtCoordinatesToRef(e6w,Z6w,g6w),g6w;},A6w.prototype.getNormalAtCoordinatesToRef=function(q6w,F6w,P6w){var R6w,B6w,o6w,y6w;R6w=this.getWorldMatrix();d4lX.i4XX(d4lX.I4XX);B6w=k3.Tmp.Matrix[d4lX.r4XX(d4lX.n4XX,G3CX.V8uX)];R6w.invertToRef(B6w);o6w=k3.Tmp.Vector3[+G3CX.Y4CX];if(k3.Vector3.TransformCoordinatesFromFloatsToRef(q6w,d4lX.I4XX,F6w,B6w,o6w),q6w=o6w.x,F6w=o6w.z,q6wthis._maxX||F6wthis._maxZ){return this;}this._heightQuads&&d4lX.I4XX!=this._heightQuads.length||(this._initHeightQuads(),this._computeHeightQuads());y6w=this._getFacetAt(q6w,F6w);return k3.Vector3.TransformNormalFromFloatsToRef(y6w.x,y6w.y,y6w.z,R6w,P6w),this;},A6w.prototype.updateCoordinateHeights=function(){return this._heightQuads&&+G3CX.k4CX!=this._heightQuads.length||this._initHeightQuads(),this._computeHeightQuads(),this;},A6w.prototype._getFacetAt=function(s6w,T6w){var H0w,U0w,O6w;H0w=Math.floor((s6w+this._maxX)*this._subdivisionsX/this._width);U0w=Math.floor(-(T6w+this._maxZ)*this._subdivisionsY/this._height+this._subdivisionsY);O6w=this._heightQuads[U0w*this._subdivisionsX+H0w];return T6wj8w.gradient?G3CX.j4CX|d4lX.I4XX:+G3CX.k4CX;}),this._colorGradientsTexture&&(this._colorGradientsTexture.dispose(),this._colorGradientsTexture=G3CX.X4CX),this._releaseBuffers(),this;},R4w.prototype.removeColorGradient=function(M8w){return this._removeGradientAndTexture(M8w,this._colorGradients,this._colorGradientsTexture),this._colorGradientsTexture=G3CX.X4CX,this;},R4w.prototype._addFactorGradient=function(x8w,c8w,N8w){var I8w;I8w=new e9.FactorGradient();I8w.gradient=c8w;I8w.factor1=N8w;x8w.push(I8w);x8w.sort(function(E8w,l8w){return E8w.gradientl8w.gradient?+G3CX.j4CX:+G3CX.k4CX;});this._releaseBuffers();},R4w.prototype.addSizeGradient=function(A8w,b8w){return this._sizeGradients||(this._sizeGradients=[]),this._addFactorGradient(this._sizeGradients,A8w,b8w),this._sizeGradientsTexture&&(this._sizeGradientsTexture.dispose(),this._sizeGradientsTexture=G3CX.X4CX),this._releaseBuffers(),this;},R4w.prototype.removeSizeGradient=function(n8w){return this._removeGradientAndTexture(n8w,this._sizeGradients,this._sizeGradientsTexture),this._sizeGradientsTexture=G3CX.X4CX,this;},R4w.prototype.addAngularSpeedGradient=function(C8w,L8w){return this._angularSpeedGradients||(this._angularSpeedGradients=[]),this._addFactorGradient(this._angularSpeedGradients,C8w,L8w),this._angularSpeedGradientsTexture&&(this._angularSpeedGradientsTexture.dispose(),this._angularSpeedGradientsTexture=G3CX.X4CX),this._releaseBuffers(),this;},R4w.prototype.removeAngularSpeedGradient=function(a8w){return this._removeGradientAndTexture(a8w,this._angularSpeedGradients,this._angularSpeedGradientsTexture),this._angularSpeedGradientsTexture=G3CX.X4CX,this;},R4w.prototype.addVelocityGradient=function(z8w,t8w){return this._velocityGradients||(this._velocityGradients=[]),this._addFactorGradient(this._velocityGradients,z8w,t8w),this._velocityGradientsTexture&&(this._velocityGradientsTexture.dispose(),this._velocityGradientsTexture=G3CX.X4CX),this._releaseBuffers(),this;},R4w.prototype.removeVelocityGradient=function(K8w){return this._removeGradientAndTexture(K8w,this._velocityGradients,this._velocityGradientsTexture),this._velocityGradientsTexture=G3CX.X4CX,this;},R4w.prototype.addLimitVelocityGradient=function(p8w,i8w){return this._limitVelocityGradients||(this._limitVelocityGradients=[]),this._addFactorGradient(this._limitVelocityGradients,p8w,i8w),this._limitVelocityGradientsTexture&&(this._limitVelocityGradientsTexture.dispose(),this._limitVelocityGradientsTexture=G3CX.X4CX),this._releaseBuffers(),this;},R4w.prototype.removeLimitVelocityGradient=function(u8w){return this._removeGradientAndTexture(u8w,this._limitVelocityGradients,this._limitVelocityGradientsTexture),this._limitVelocityGradientsTexture=G3CX.X4CX,this;},R4w.prototype.addDragGradient=function(k8w,f8w){return this._dragGradients||(this._dragGradients=[]),this._addFactorGradient(this._dragGradients,k8w,f8w),this._dragGradientsTexture&&(this._dragGradientsTexture.dispose(),this._dragGradientsTexture=G3CX.X4CX),this._releaseBuffers(),this;},R4w.prototype.removeDragGradient=function(g8w){return this._removeGradientAndTexture(g8w,this._dragGradients,this._dragGradientsTexture),this._dragGradientsTexture=G3CX.X4CX,this;},R4w.prototype.addEmitRateGradient=function(e8w,Z8w,q8w){return this;},R4w.prototype.removeEmitRateGradient=function(F8w){return this;},R4w.prototype.addStartSizeGradient=function(o8w,y8w,R8w){return this;},R4w.prototype.removeStartSizeGradient=function(B8w){return this;},R4w.prototype.addColorRemapGradient=function(P8w,O8w,s8w){return this;},R4w.prototype.removeColorRemapGradient=function(T8w){return this;},R4w.prototype.addAlphaRemapGradient=function(H2w,U2w,Y2w){return this;},R4w.prototype.removeAlphaRemapGradient=function(d2w){return this;},R4w.prototype.addRampGradient=function(S2w,m2w){return this;},R4w.prototype.removeRampGradient=function(r2w){return this;},R4w.prototype.getRampGradients=function(){return G3CX.X4CX;},Object.defineProperty(R4w.prototype,N7dX,{get:function(){d4lX.i4XX(d4lX.I4XX);return!d4lX.z4XX(d4lX.n4XX,G3CX.j4CX);},set:function(J2w){},enumerable:!+o5ZX.k4CX,configurable:!(o5ZX.k4CX-d4lX.I4XX)}),R4w.prototype.addLifeTimeGradient=function(G2w,v2w,w2w){return this;},R4w.prototype.removeLifeTimeGradient=function(V2w){return this;},R4w.prototype._reset=function(){this._releaseBuffers();},R4w.prototype._createUpdateVAO=function(D2w){var e0qX=G3CX;var h2w,Q2w,X2w;h2w={};d4lX.F4XX(d4lX.w4XX);h2w.position=D2w.createVertexBuffer(x3uX.L0uX,d4lX.r4XX(d4lX.I4XX,e0qX.k4CX),+e0qX.l4CX);h2w.age=D2w.createVertexBuffer(D1dX,d4lX.P4XX,+e0qX.j4CX);h2w.life=D2w.createVertexBuffer(E1dX,+e0qX.t4CX,d4lX.n4XX);d4lX.i4XX(d4lX.w4XX);h2w.seed=D2w.createVertexBuffer(q1dX,d4lX.r4XX(d4lX.I4XX,e0qX.V8uX),+e0qX.t4CX);d4lX.F4XX(d4lX.I4XX);h2w.size=D2w.createVertexBuffer(Z7dX,d4lX.g8CX,d4lX.r4XX(d4lX.n4XX,e0qX.l4CX));d4lX.i4XX(d4lX.n4XX);Q2w=d4lX.r4XX(d4lX.I4XX,x3uX.I3uX);this._colorGradientsTexture||(h2w.color=D2w.createVertexBuffer(U7rX,Q2w,+e0qX.t4CX),Q2w+=+e0qX.t4CX);h2w.direction=D2w.createVertexBuffer(L4LX,Q2w,+e0qX.l4CX);Q2w+=d4lX.P4XX;this._isBillboardBased||(h2w.initialDirection=D2w.createVertexBuffer(s1dX,Q2w,+e0qX.l4CX),Q2w+=+e0qX.l4CX);this._angularSpeedGradientsTexture?(h2w.angle=D2w.createVertexBuffer(n4LX,Q2w,d4lX.n4XX),Q2w+=+e0qX.j4CX):(h2w.angle=D2w.createVertexBuffer(n4LX,Q2w,e0qX.U4CX-d4lX.I4XX),Q2w+=e0qX.U4CX|d4lX.I4XX);this._isAnimationSheetEnabled&&(h2w.cellIndex=D2w.createVertexBuffer(V7dX,Q2w,e0qX.j4CX*d4lX.n4XX),Q2w+=e0qX.j4CX|d4lX.I4XX,this.spriteRandomStartCell&&(h2w.cellStartOffset=D2w.createVertexBuffer(a1dX,Q2w,+e0qX.j4CX),Q2w+=+e0qX.j4CX));this.noiseTexture&&(h2w.noiseCoordinates1=D2w.createVertexBuffer(G1dX,Q2w,+e0qX.l4CX),Q2w+=e0qX.l4CX|d4lX.I4XX,h2w.noiseCoordinates2=D2w.createVertexBuffer(b1dX,Q2w,+e0qX.l4CX),Q2w+=d4lX.P4XX);X2w=this._engine.recordVertexArrayObject(h2w,e0qX.X4CX,this._updateEffect);return this._engine.bindArrayBuffer(e0qX.X4CX),X2w;},R4w.prototype._createRenderVAO=function(M2w,I2w){var o0qX=G3CX;var j2w,W2w,x2w;j2w={};j2w.position=M2w.createVertexBuffer(x3uX.L0uX,+o0qX.k4CX,d4lX.P4XX,this._attributesStrideSize,!(o0qX.k4CX*d4lX.n4XX));d4lX.i4XX(d4lX.n4XX);j2w.age=M2w.createVertexBuffer(D1dX,d4lX.z4XX(d4lX.I4XX,o0qX.l4CX),d4lX.r4XX(d4lX.I4XX,o0qX.j4CX),this._attributesStrideSize,!(o0qX.k4CX*d4lX.n4XX));d4lX.i4XX(d4lX.I4XX);j2w.life=M2w.createVertexBuffer(E1dX,d4lX.r4XX(d4lX.n4XX,o0qX.t4CX),d4lX.z4XX(d4lX.n4XX,o0qX.j4CX),this._attributesStrideSize,!+o0qX.k4CX);j2w.size=M2w.createVertexBuffer(Z7dX,+o0qX.Q4CX,d4lX.P4XX,this._attributesStrideSize,!+o0qX.k4CX);W2w=d4lX.O8CX;this._colorGradientsTexture||(j2w.color=M2w.createVertexBuffer(U7rX,W2w,d4lX.J4XX,this._attributesStrideSize,!(o0qX.k4CX-d4lX.I4XX)),W2w+=+o0qX.t4CX);this.billboardMode===e9.ParticleSystem.BILLBOARDMODE_STRETCHED&&(j2w.direction=M2w.createVertexBuffer(L4LX,W2w,+o0qX.l4CX,this._attributesStrideSize,!d4lX.I4XX));W2w+=+o0qX.l4CX;this._isBillboardBased||(j2w.initialDirection=M2w.createVertexBuffer(s1dX,W2w,d4lX.P4XX,this._attributesStrideSize,!+o0qX.k4CX),W2w+=o0qX.l4CX|d4lX.I4XX);d4lX.i4XX(d4lX.w4XX);j2w.angle=M2w.createVertexBuffer(n4LX,W2w,d4lX.z4XX(d4lX.I4XX,o0qX.j4CX),this._attributesStrideSize,!(o0qX.k4CX|d4lX.I4XX));this._angularSpeedGradientsTexture?W2w++:W2w+=d4lX.w4XX;this._isAnimationSheetEnabled&&(j2w.cellIndex=M2w.createVertexBuffer(V7dX,W2w,+o0qX.j4CX,this._attributesStrideSize,!(o0qX.k4CX*d4lX.n4XX)),W2w+=d4lX.n4XX,this.spriteRandomStartCell&&(j2w.cellStartOffset=M2w.createVertexBuffer(a1dX,W2w,+o0qX.j4CX,this._attributesStrideSize,!+o0qX.k4CX),W2w+=+o0qX.j4CX));this.noiseTexture&&(j2w.noiseCoordinates1=M2w.createVertexBuffer(G1dX,W2w,o0qX.l4CX*d4lX.n4XX,this._attributesStrideSize,!+o0qX.k4CX),W2w+=+o0qX.l4CX,j2w.noiseCoordinates2=M2w.createVertexBuffer(b1dX,W2w,o0qX.l4CX-d4lX.I4XX,this._attributesStrideSize,!(o0qX.k4CX|d4lX.I4XX)),W2w+=o0qX.l4CX-d4lX.I4XX);j2w.offset=I2w.createVertexBuffer(k3dX.r7dX,d4lX.I4XX,+o0qX.U4CX);d4lX.i4XX(d4lX.w4XX);j2w.uv=I2w.createVertexBuffer(E7rX,d4lX.w4XX,d4lX.r4XX(d4lX.I4XX,o0qX.U4CX));x2w=this._engine.recordVertexArrayObject(j2w,o0qX.X4CX,this._renderEffect);return this._engine.bindArrayBuffer(o0qX.X4CX),x2w;},R4w.prototype._initialize=function(E2w){var H0qX=G3CX;var N2w,c2w,A2w;if(void+H0qX.k4CX===E2w&&(E2w=!+H0qX.j4CX),!this._buffer0||E2w){N2w=this._scene.getEngine();c2w=new Array();this.isBillboardBased||(this._attributesStrideSize+=+H0qX.l4CX);this._colorGradientsTexture&&(this._attributesStrideSize-=+H0qX.t4CX);this._angularSpeedGradientsTexture&&(this._attributesStrideSize-=+H0qX.j4CX);this._isAnimationSheetEnabled&&(this._attributesStrideSize+=d4lX.n4XX,this.spriteRandomStartCell&&(this._attributesStrideSize+=d4lX.n4XX));this.noiseTexture&&(this._attributesStrideSize+=d4lX.R8CX);for(var l2w=H0qX.k4CX|d4lX.I4XX;l2w=this.targetStopDuration&&this.stop();},R4w.prototype._createFactorGradientTexture=function(t2w,p2w){var i2w,u2w;i2w=this[p2w];if(t2w&&t2w.length&&!i2w){for(var K2w=new Float32Array(this._rawTextureWidth),z2w=d4lX.I4XX;z2w=this.nbParticles?this.nbParticles-+J9qX.j4CX:g6e;this._computeBoundingBox&&(+J9qX.k4CX==Z6e&&g6e==this.nbParticles-d4lX.n4XX?(K9.Vector3.FromFloatsToRef(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,this._minimum),K9.Vector3.FromFloatsToRef(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,this._maximum)):this.mesh._boundingInfo&&(this._minimum.copyFrom(this.mesh._boundingInfo.boundingBox.minimum),this._maximum.copyFrom(this.mesh._boundingInfo.boundingBox.maximum)));d4lX.i4XX(I6CX);var Q3RR=d4lX.z4XX(d4lX.z8CX,d4lX.t8CX,d4lX.j8CX,d4lX.k8CX);S0e=(y6e=this.particles[Z6e]._pos)/Q3RR|+J9qX.k4CX;d4lX.F4XX(d4lX.I4XX);o6e=d4lX.r4XX(S0e,d4lX.J4XX);d4lX.i4XX(d4lX.R3CX);q6e=d4lX.z4XX(S0e,d4lX.I4XX,J9qX.U4CX);for(var O6e=Z6e;O6e<=g6e;O6e++){if(this._particle=this.particles[O6e],this._shape=this._particle._model._shape,this._shapeUV=this._particle._model._shapeUV,this.updateParticle(this._particle),this._depthSort&&this._depthSortParticles){s6e=this.depthSortedParticles[O6e];s6e.ind=this._particle._ind;s6e.indicesLength=this._particle._model._indicesLength;s6e.sqDistance=K9.Vector3.DistanceSquared(this._particle.position,this._camInvertedPosition);}if(!this._particle.alive||this._particle._stillInvisible&&!this._particle.isVisible){y6e+=+J9qX.l4CX*(i6e=this._shape.length),o6e+=+J9qX.t4CX*i6e,q6e+=d4lX.w4XX*i6e;}else{if(this._particle.isVisible)for(this._particle._stillInvisible=!+J9qX.j4CX,this._particleHasParent=J9qX.X4CX!==this._particle.parentId,this._scaledPivot.x=this._particle.pivot.x*this._particle.scaling.x,this._scaledPivot.y=this._particle.pivot.y*this._particle.scaling.y,this._scaledPivot.z=this._particle.pivot.z*this._particle.scaling.z,this.billboard&&(this._particle.rotation.x=+J9qX.k4CX,this._particle.rotation.y=d4lX.I4XX),(this._computeParticleRotation||this.billboard)&&(this._particle.rotationQuaternion?this._quaternion.copyFrom(this._particle.rotationQuaternion):(this._yaw=this._particle.rotation.y,this._pitch=this._particle.rotation.x,this._roll=this._particle.rotation.z,this._quaternionRotationYPR()),this._quaternionToRotationMatrix()),this._particleHasParent?(this._parent=this.particles[this._particle.parentId],this._rotated.x=this._particle.position.x*this._parent._rotationMatrix[+J9qX.k4CX]+this._particle.position.y*this._parent._rotationMatrix[+J9qX.l4CX]+this._particle.position.z*this._parent._rotationMatrix[J9qX.O8uX*d4lX.n4XX],this._rotated.y=this._particle.position.x*this._parent._rotationMatrix[d4lX.n4XX]+this._particle.position.y*this._parent._rotationMatrix[J9qX.t4CX-d4lX.I4XX]+this._particle.position.z*this._parent._rotationMatrix[+J9qX.n4CX],this._rotated.z=this._particle.position.x*this._parent._rotationMatrix[+J9qX.U4CX]+this._particle.position.y*this._parent._rotationMatrix[+J9qX.V8uX]+this._particle.position.z*this._parent._rotationMatrix[+J9qX.Y4CX],this._particle._globalPosition.x=this._parent._globalPosition.x+this._rotated.x,this._particle._globalPosition.y=this._parent._globalPosition.y+this._rotated.y,this._particle._globalPosition.z=this._parent._globalPosition.z+this._rotated.z,(this._computeParticleRotation||this.billboard)&&(this._particle._rotationMatrix[J9qX.k4CX-d4lX.I4XX]=this._rotMatrix.m[J9qX.k4CX*d4lX.n4XX]*this._parent._rotationMatrix[d4lX.I4XX]+this._rotMatrix.m[+J9qX.j4CX]*this._parent._rotationMatrix[J9qX.l4CX-d4lX.I4XX]+this._rotMatrix.m[+J9qX.U4CX]*this._parent._rotationMatrix[J9qX.O8uX*d4lX.n4XX],this._particle._rotationMatrix[+J9qX.j4CX]=this._rotMatrix.m[d4lX.I4XX]*this._parent._rotationMatrix[J9qX.j4CX-d4lX.I4XX]+this._rotMatrix.m[+J9qX.j4CX]*this._parent._rotationMatrix[J9qX.t4CX*d4lX.n4XX]+this._rotMatrix.m[d4lX.w4XX]*this._parent._rotationMatrix[d4lX.W8CX],this._particle._rotationMatrix[J9qX.U4CX|d4lX.I4XX]=this._rotMatrix.m[+J9qX.k4CX]*this._parent._rotationMatrix[d4lX.w4XX]+this._rotMatrix.m[J9qX.j4CX*d4lX.n4XX]*this._parent._rotationMatrix[+J9qX.V8uX]+this._rotMatrix.m[d4lX.w4XX]*this._parent._rotationMatrix[+J9qX.Y4CX],this._particle._rotationMatrix[+J9qX.l4CX]=this._rotMatrix.m[+J9qX.t4CX]*this._parent._rotationMatrix[J9qX.k4CX*d4lX.n4XX]+this._rotMatrix.m[+J9qX.V8uX]*this._parent._rotationMatrix[d4lX.P4XX]+this._rotMatrix.m[J9qX.O8uX*d4lX.n4XX]*this._parent._rotationMatrix[J9qX.O8uX-d4lX.I4XX],this._particle._rotationMatrix[J9qX.t4CX-d4lX.I4XX]=this._rotMatrix.m[J9qX.t4CX*d4lX.n4XX]*this._parent._rotationMatrix[+J9qX.j4CX]+this._rotMatrix.m[d4lX.K8CX]*this._parent._rotationMatrix[+J9qX.t4CX]+this._rotMatrix.m[+J9qX.O8uX]*this._parent._rotationMatrix[+J9qX.n4CX],this._particle._rotationMatrix[+J9qX.V8uX]=this._rotMatrix.m[+J9qX.t4CX]*this._parent._rotationMatrix[+J9qX.U4CX]+this._rotMatrix.m[+J9qX.V8uX]*this._parent._rotationMatrix[d4lX.K8CX]+this._rotMatrix.m[J9qX.O8uX*d4lX.n4XX]*this._parent._rotationMatrix[+J9qX.Y4CX],this._particle._rotationMatrix[+J9qX.O8uX]=this._rotMatrix.m[J9qX.Y4CX*d4lX.n4XX]*this._parent._rotationMatrix[d4lX.I4XX]+this._rotMatrix.m[J9qX.Q4CX-d4lX.I4XX]*this._parent._rotationMatrix[J9qX.l4CX-d4lX.I4XX]+this._rotMatrix.m[+J9qX.u3uX]*this._parent._rotationMatrix[+J9qX.O8uX],this._particle._rotationMatrix[J9qX.n4CX*d4lX.n4XX]=this._rotMatrix.m[J9qX.Y4CX*d4lX.n4XX]*this._parent._rotationMatrix[J9qX.j4CX|d4lX.I4XX]+this._rotMatrix.m[d4lX.g8CX]*this._parent._rotationMatrix[d4lX.J4XX]+this._rotMatrix.m[+J9qX.u3uX]*this._parent._rotationMatrix[J9qX.n4CX*d4lX.n4XX],this._particle._rotationMatrix[d4lX.d8CX]=this._rotMatrix.m[+J9qX.Y4CX]*this._parent._rotationMatrix[J9qX.U4CX*d4lX.n4XX]+this._rotMatrix.m[J9qX.Q4CX|d4lX.I4XX]*this._parent._rotationMatrix[d4lX.K8CX]+this._rotMatrix.m[+J9qX.u3uX]*this._parent._rotationMatrix[J9qX.Y4CX-d4lX.I4XX])):(this._particle._globalPosition.x=this._particle.position.x,this._particle._globalPosition.y=this._particle.position.y,this._particle._globalPosition.z=this._particle.position.z,(this._computeParticleRotation||this.billboard)&&(this._particle._rotationMatrix[+J9qX.k4CX]=this._rotMatrix.m[+J9qX.k4CX],this._particle._rotationMatrix[J9qX.j4CX-d4lX.I4XX]=this._rotMatrix.m[+J9qX.j4CX],this._particle._rotationMatrix[+J9qX.U4CX]=this._rotMatrix.m[d4lX.w4XX],this._particle._rotationMatrix[J9qX.l4CX|d4lX.I4XX]=this._rotMatrix.m[J9qX.t4CX|d4lX.I4XX],this._particle._rotationMatrix[d4lX.J4XX]=this._rotMatrix.m[+J9qX.V8uX],this._particle._rotationMatrix[J9qX.V8uX*d4lX.n4XX]=this._rotMatrix.m[J9qX.O8uX-d4lX.I4XX],this._particle._rotationMatrix[d4lX.R8CX]=this._rotMatrix.m[d4lX.d8CX],this._particle._rotationMatrix[d4lX.W8CX]=this._rotMatrix.m[+J9qX.Q4CX],this._particle._rotationMatrix[d4lX.d8CX]=this._rotMatrix.m[d4lX.y8CX])),this._particle.translateFromPivot?(this._pivotBackTranslation.x=+J9qX.k4CX,this._pivotBackTranslation.y=+J9qX.k4CX,this._pivotBackTranslation.z=+J9qX.k4CX):(this._pivotBackTranslation.x=this._scaledPivot.x,this._pivotBackTranslation.y=this._scaledPivot.y,this._pivotBackTranslation.z=this._scaledPivot.z),i6e=J9qX.k4CX-d4lX.I4XX;i6ethis._maximum.x&&(this._maximum.x=this._positions32[p6e]),this._positions32[p6e+d4lX.n4XX]this._maximum.y&&(this._maximum.y=this._positions32[p6e+(J9qX.j4CX-d4lX.I4XX)]),this._positions32[p6e+d4lX.w4XX]this._maximum.z&&(this._maximum.z=this._positions32[p6e+(J9qX.U4CX|d4lX.I4XX)])),this._computeParticleVertex||(this._normal.x=this._fixedNormal32[p6e],this._normal.y=this._fixedNormal32[p6e+ +J9qX.j4CX],this._normal.z=this._fixedNormal32[p6e+(J9qX.U4CX-d4lX.I4XX)],this._rotated.x=this._normal.x*this._particle._rotationMatrix[+J9qX.k4CX]+this._normal.y*this._particle._rotationMatrix[+J9qX.l4CX]+this._normal.z*this._particle._rotationMatrix[+J9qX.O8uX],this._rotated.y=this._normal.x*this._particle._rotationMatrix[+J9qX.j4CX]+this._normal.y*this._particle._rotationMatrix[J9qX.t4CX-d4lX.I4XX]+this._normal.z*this._particle._rotationMatrix[J9qX.n4CX-d4lX.I4XX],this._rotated.z=this._normal.x*this._particle._rotationMatrix[d4lX.w4XX]+this._normal.y*this._particle._rotationMatrix[J9qX.V8uX|d4lX.I4XX]+this._normal.z*this._particle._rotationMatrix[J9qX.Y4CX|d4lX.I4XX],this._normals32[p6e]=this._cam_axisX.x*this._rotated.x+this._cam_axisY.x*this._rotated.y+this._cam_axisZ.x*this._rotated.z,this._normals32[p6e+J9qX.j4CX*d4lX.n4XX]=this._cam_axisX.y*this._rotated.x+this._cam_axisY.y*this._rotated.y+this._cam_axisZ.y*this._rotated.z,this._normals32[p6e+J9qX.U4CX*d4lX.n4XX]=this._cam_axisX.z*this._rotated.x+this._cam_axisY.z*this._rotated.y+this._cam_axisZ.z*this._rotated.z),this._computeParticleColor&&this._particle.color&&(this._colors32[u6e]=this._particle.color.r,this._colors32[u6e+ +J9qX.j4CX]=this._particle.color.g,this._colors32[u6e+ +J9qX.U4CX]=this._particle.color.b,this._colors32[u6e+J9qX.l4CX*d4lX.n4XX]=this._particle.color.a),this._computeParticleTexture&&(this._uvs32[e6e]=this._shapeUV[d4lX.w4XX*i6e]*(this._particle.uvs.z-this._particle.uvs.x)+this._particle.uvs.x,this._uvs32[e6e+d4lX.n4XX]=this._shapeUV[(J9qX.U4CX-d4lX.I4XX)*i6e+(J9qX.j4CX-d4lX.I4XX)]*(this._particle.uvs.w-this._particle.uvs.y)+this._particle.uvs.y);}else for(this._particle._stillInvisible=!+J9qX.k4CX,i6e=d4lX.I4XX;i6ea0.Tmp.Vector3[+T82X.j4CX].x&&(a0.Tmp.Vector3[d4lX.n4XX].x=W9e[j9e].x),W9e[j9e].ya0.Tmp.Vector3[d4lX.n4XX].y&&(a0.Tmp.Vector3[T82X.j4CX*d4lX.n4XX].y=W9e[j9e].y),W9e[j9e].za0.Tmp.Vector3[d4lX.n4XX].z&&(a0.Tmp.Vector3[T82X.j4CX*d4lX.n4XX].z=W9e[j9e].z),j9e++,M9e+=+T82X.l4CX;}c9e._creationDataStorage&&c9e._creationDataStorage.closePath&&(I9e[M9e]=W9e[T82X.k4CX*d4lX.n4XX].x,I9e[M9e+ +T82X.j4CX]=W9e[T82X.k4CX*d4lX.n4XX].y,I9e[M9e+T82X.U4CX*d4lX.n4XX]=W9e[+T82X.k4CX].z,M9e+=+T82X.l4CX);}}(m9e),R0e._boundingInfo=new a0.BoundingInfo(a0.Tmp.Vector3[V9qX.U4CX-d4lX.I4XX],a0.Tmp.Vector3[V9qX.l4CX*d4lX.n4XX]),R0e._boundingInfo.update(R0e._worldMatrix),R0e.updateVerticesData(a0.VertexBuffer.PositionKind,m9e,!+V9qX.j4CX,!(V9qX.j4CX-d4lX.I4XX)),P0e.colors){for(var S9e=R0e.getVerticesData(a0.VertexBuffer.ColorKind),O0e=+V9qX.k4CX;O0ea0.Epsilon&&c7e.rotate(N7e,E7e);}return c7e;},C0e.CreateGround=function(C7e,n7e,L7e){var v9qX=G3CX;var b7e;b7e=new a0.GroundMesh(C7e,L7e);return b7e._setReady(!+v9qX.j4CX),b7e._subdivisionsX=n7e.subdivisionsX||n7e.subdivisions||d4lX.n4XX,b7e._subdivisionsY=n7e.subdivisionsY||n7e.subdivisions||v9qX.j4CX*d4lX.n4XX,b7e._width=n7e.width||d4lX.n4XX,b7e._height=n7e.height||d4lX.n4XX,b7e._maxX=b7e._width/(v9qX.U4CX*d4lX.n4XX),b7e._maxZ=b7e._height/+v9qX.U4CX,b7e._minX=-b7e._maxX,b7e._minZ=-b7e._maxZ,a0.VertexData.CreateGround(n7e).applyToMesh(b7e,n7e.updatable),b7e._setReady(!+v9qX.k4CX),b7e;},C0e.CreateTiledGround=function(t7e,z7e,K7e){var a7e;a7e=new a0.Mesh(t7e,K7e);return a0.VertexData.CreateTiledGround(z7e).applyToMesh(a7e,z7e.updatable),a7e;},C0e.CreateGroundFromHeightMap=function(B7e,R7e,i7e,g7e){var C9qX=G3CX;var k7e,f7e,u7e,q7e,Z7e,F7e,o7e,y7e,e7e,p7e;k7e=i7e.width||+C9qX.u3uX;f7e=i7e.height||+C9qX.u3uX;u7e=i7e.subdivisions||+C9qX.j4CX;q7e=i7e.minHeight||+C9qX.k4CX;Z7e=i7e.maxHeight||C9qX.j4CX*d4lX.n4XX;F7e=i7e.colorFilter||new a0.Color3(P2dX,O1rX,D3uX*d4lX.n4XX);o7e=i7e.alphaFilter||+C9qX.k4CX;y7e=i7e.updatable;e7e=i7e.onReady;p7e=new a0.GroundMesh(B7e,g7e);p7e._subdivisionsX=u7e;p7e._subdivisionsY=u7e;p7e._width=k7e;p7e._height=f7e;p7e._maxX=p7e._width/+C9qX.U4CX;p7e._maxZ=p7e._height/+C9qX.U4CX;p7e._minX=-p7e._maxX;p7e._minZ=-p7e._maxZ;d4lX.F4XX(d4lX.w4XX);p7e._setReady(!d4lX.z4XX(d4lX.I4XX,C9qX.j4CX));return a0.Tools.LoadImage(R7e,function(H4e){var J2dX="Unable to get 2d context for CreateGroundFromHeightMap";var P7e,O7e,s7e,T7e,U4e;P7e=document.createElement(x3uX.R6uX);O7e=P7e.getContext(x3uX.W6uX);if(!O7e){throw new Error(J2dX);}if(!g7e.isDisposed){s7e=H4e.width;T7e=H4e.height;P7e.width=s7e;P7e.height=T7e;d4lX.i4XX(d4lX.I4XX);O7e.drawImage(H4e,d4lX.I4XX,d4lX.r4XX(d4lX.n4XX,G3CX.k4CX));U4e=O7e.getImageData(d4lX.I4XX,G3CX.k4CX|d4lX.I4XX,s7e,T7e).data;a0.VertexData.CreateGroundFromHeightMap({width:k7e,height:f7e,subdivisions:u7e,minHeight:q7e,maxHeight:Z7e,colorFilter:F7e,buffer:U4e,bufferWidth:s7e,bufferHeight:T7e,alphaFilter:o7e}).applyToMesh(p7e,y7e);e7e&&e7e(p7e);p7e._setReady(!+G3CX.k4CX);}},function(){},g7e.database),p7e;},C0e.CreatePolygon=function(h4e,Y4e,D4e){var r4e;Y4e.sideOrientation=C0e.updateSideOrientation(Y4e.sideOrientation);for(var w4e=Y4e.shape,J4e=Y4e.holes||[],Q4e=Y4e.depth||G3CX.k4CX|d4lX.I4XX,d4e=[],v4e=[],m4e=+G3CX.k4CX;m4e=E1a.video.HAVE_CURRENT_DATA&&E1a._createInternalTexture(),l1a.poster&&(E1a._texture=E1a._engine.createTexture(l1a.poster,!+V6qX.j4CX,!d4lX.I4XX,L1a),E1a._poster=!d4lX.I4XX),E1a;}return N0(c1a,N1a),Object.defineProperty(c1a.prototype,n0dX,{get:function(){return this._onUserActionRequestedObservable||(this._onUserActionRequestedObservable=new y4.Observable()),this._onUserActionRequestedObservable;},enumerable:!(G3CX.k4CX|d4lX.I4XX),configurable:!d4lX.I4XX}),c1a.prototype._getName=function(i1a){return i1a instanceof HTMLVideoElement?i1a.currentSrc:G3CX.W4CX==typeof i1a?i1a.toString():i1a;},c1a.prototype._getVideo=function(u1a){var k1a;if(u1a instanceof HTMLVideoElement){return y4.Tools.SetCorsBehavior(u1a.currentSrc,u1a),u1a;}k1a=document.createElement(w0dX);return x3uX.A7uX==typeof u1a?(y4.Tools.SetCorsBehavior(u1a,k1a),k1a.src=u1a):(y4.Tools.SetCorsBehavior(u1a[G3CX.k4CX*d4lX.n4XX],k1a),u1a.forEach(function(g1a){var f1a;f1a=document.createElement(U6rX);f1a.src=g1a;k1a.appendChild(f1a);})),k1a;},c1a.prototype._rebuild=function(){this.update();},c1a.prototype.update=function(){this.autoUpdateTexture&&this.updateTexture(!+G3CX.k4CX);},c1a.prototype.updateTexture=function(e1a){e1a&&(this.video.paused&&this._stillImageCaptured||(this._stillImageCaptured=!(G3CX.k4CX-d4lX.I4XX),this._updateInternalTexture()));},c1a.prototype.updateURL=function(Z1a){this.video.src=Z1a;},c1a.prototype.dispose=function(){N1a.prototype.dispose.call(this);this._onUserActionRequestedObservable&&(this._onUserActionRequestedObservable.clear(),this._onUserActionRequestedObservable=G3CX.X4CX);this.video.removeEventListener(k3dX.r0dX,this._createInternalTexture);this.video.removeEventListener(i0dX,this._updateInternalTexture);this.video.removeEventListener(F0dX,this._updateInternalTexture);this.video.removeEventListener(I0dX,this.reset);this.video.pause();},c1a.CreateFromWebCam=function(y1a,o1a,F1a){var R5dX="640";var J0dX="muted";var P0dX="autoplay";var R1a,q1a;q1a=document.createElement(w0dX);q1a.setAttribute(P0dX,G3CX.e4CX);q1a.setAttribute(J0dX,G3CX.e4CX);q1a.setAttribute(z0dX,G3CX.e4CX);F1a&&F1a.deviceId&&(R1a={exact:F1a.deviceId});window.URL=window.URL||window.webkitURL||window.mozURL||window.msURL;navigator.mediaDevices?navigator.mediaDevices.getUserMedia({video:F1a}).then(function(P1a){var K5dX="playing";var B1a;void(G3CX.k4CX|d4lX.I4XX)!==q1a.mozSrcObject?q1a.mozSrcObject=P1a:q1a.srcObject=P1a;B1a=function(){o1a&&o1a(new c1a(w0dX,q1a,y1a,!+G3CX.k4CX,!d4lX.I4XX));q1a.removeEventListener(K5dX,B1a);};q1a.addEventListener(K5dX,B1a);q1a.play();}).catch(function(O1a){y4.Tools.Error(O1a.name);}):(navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia,navigator.getUserMedia&&navigator.getUserMedia({video:{deviceId:R1a,width:{min:F1a&&F1a.minWidth||x3uX.H4uX*d4lX.n4XX,max:F1a&&F1a.maxWidth||R5dX*d4lX.n4XX},height:{min:F1a&&F1a.minHeight||+x3uX.H4uX,max:F1a&&F1a.maxHeight||+k3dX.W5dX}}},function(s1a){void(G3CX.k4CX*d4lX.n4XX)!==q1a.mozSrcObject?q1a.mozSrcObject=s1a:q1a.src=window.URL&&window.URL.createObjectURL(s1a)||s1a;q1a.play();o1a&&o1a(new c1a(w0dX,q1a,y1a,!(G3CX.k4CX|d4lX.I4XX),!(G3CX.k4CX*d4lX.n4XX)));},function(T1a){y4.Tools.Error(T1a.name);}));},c1a;}(y4.Texture);y4.VideoTexture=X0Z;a7=Q0||(Q0={});h0Z=function(U5n){function H5n(v5n,V5n,w5n,G5n,r5n,S5n,d5n,m5n,J5n){var s6qX=G3CX;var Y5n;void+s6qX.k4CX===S5n&&(S5n=!(s6qX.k4CX-d4lX.I4XX));void+s6qX.k4CX===d5n&&(d5n=!d4lX.n4XX);void+s6qX.k4CX===m5n&&(m5n=a7.Texture.TRILINEAR_SAMPLINGMODE);void(s6qX.k4CX*d4lX.n4XX)===J5n&&(J5n=a7.Engine.TEXTURETYPE_UNSIGNED_INT);Y5n=U5n.call(this,s6qX.X4CX,r5n,!S5n,d5n)||this;return Y5n.format=G5n,Y5n._engine=r5n.getEngine(),Y5n._texture=r5n.getEngine().createRawTexture(v5n,V5n,w5n,G5n,S5n,d5n,m5n,s6qX.X4CX,J5n),Y5n.wrapU=a7.Texture.CLAMP_ADDRESSMODE,Y5n.wrapV=a7.Texture.CLAMP_ADDRESSMODE,Y5n;}return N0(H5n,U5n),H5n.prototype.update=function(Q5n){this._engine.updateRawTexture(this._texture,Q5n,this._texture.format,this._texture.invertY,void(G3CX.k4CX-d4lX.I4XX),this._texture.type);},H5n.CreateLuminanceTexture=function(W5n,j5n,M5n,I5n,h5n,D5n,X5n){return void d4lX.I4XX===h5n&&(h5n=!d4lX.I4XX),void d4lX.I4XX===D5n&&(D5n=!(G3CX.j4CX-d4lX.I4XX)),void+G3CX.k4CX===X5n&&(X5n=a7.Texture.TRILINEAR_SAMPLINGMODE),new H5n(W5n,j5n,M5n,a7.Engine.TEXTUREFORMAT_LUMINANCE,I5n,h5n,D5n,X5n);},H5n.CreateLuminanceAlphaTexture=function(E5n,l5n,A5n,b5n,x5n,c5n,N5n){var D6qX=G3CX;return void(D6qX.k4CX*d4lX.n4XX)===x5n&&(x5n=!+D6qX.k4CX),void(D6qX.k4CX-d4lX.I4XX)===c5n&&(c5n=!(D6qX.j4CX-d4lX.I4XX)),void+D6qX.k4CX===N5n&&(N5n=a7.Texture.TRILINEAR_SAMPLINGMODE),new H5n(E5n,l5n,A5n,a7.Engine.TEXTUREFORMAT_LUMINANCE_ALPHA,b5n,x5n,c5n,N5n);},H5n.CreateAlphaTexture=function(a5n,z5n,t5n,K5n,n5n,C5n,L5n){return void(G3CX.k4CX|d4lX.I4XX)===n5n&&(n5n=!+G3CX.k4CX),void(G3CX.k4CX*d4lX.n4XX)===C5n&&(C5n=!d4lX.n4XX),void(G3CX.k4CX*d4lX.n4XX)===L5n&&(L5n=a7.Texture.TRILINEAR_SAMPLINGMODE),new H5n(a5n,z5n,t5n,a7.Engine.TEXTUREFORMAT_ALPHA,K5n,n5n,C5n,L5n);},H5n.CreateRGBTexture=function(f5n,g5n,e5n,Z5n,p5n,i5n,u5n,k5n){var m6qX=G3CX;return void+m6qX.k4CX===p5n&&(p5n=!+m6qX.k4CX),void(m6qX.k4CX*d4lX.n4XX)===i5n&&(i5n=!(m6qX.j4CX|d4lX.I4XX)),void d4lX.I4XX===u5n&&(u5n=a7.Texture.TRILINEAR_SAMPLINGMODE),void+m6qX.k4CX===k5n&&(k5n=a7.Engine.TEXTURETYPE_UNSIGNED_INT),new H5n(f5n,g5n,e5n,a7.Engine.TEXTUREFORMAT_RGB,Z5n,p5n,i5n,u5n,k5n);},H5n.CreateRGBATexture=function(R5n,B5n,P5n,O5n,q5n,F5n,o5n,y5n){var B6qX=G3CX;return void+B6qX.k4CX===q5n&&(q5n=!(B6qX.k4CX|d4lX.I4XX)),void(B6qX.k4CX*d4lX.n4XX)===F5n&&(F5n=!(B6qX.j4CX*d4lX.n4XX)),void(B6qX.k4CX*d4lX.n4XX)===o5n&&(o5n=a7.Texture.TRILINEAR_SAMPLINGMODE),void(B6qX.k4CX|d4lX.I4XX)===y5n&&(y5n=a7.Engine.TEXTURETYPE_UNSIGNED_INT),new H5n(R5n,B5n,P5n,a7.Engine.TEXTUREFORMAT_RGBA,O5n,q5n,F5n,o5n,y5n);},H5n.CreateRTexture=function(Y6n,d6n,S6n,m6n,s5n,T5n,H6n,U6n){var k6qX=G3CX;return void+k6qX.k4CX===s5n&&(s5n=!+k6qX.k4CX),void+k6qX.k4CX===T5n&&(T5n=!(k6qX.j4CX-d4lX.I4XX)),void(k6qX.k4CX-d4lX.I4XX)===H6n&&(H6n=a7.Texture.TRILINEAR_SAMPLINGMODE),void+k6qX.k4CX===U6n&&(U6n=a7.Engine.TEXTURETYPE_FLOAT),new H5n(Y6n,d6n,S6n,a7.Engine.TEXTUREFORMAT_R,m6n,s5n,T5n,H6n,U6n);},H5n;}(a7.Texture);a7.RawTexture=h0Z;M5Z=Q0||(Q0={});V0Z=function(J6n){function r6n(X6n,M6n,j6n,W6n,D6n,Q6n,w6n,v6n,V6n,h6n){var j6qX=G3CX;var G6n;void(j6qX.k4CX-d4lX.I4XX)===w6n&&(w6n=!+j6qX.k4CX);void(j6qX.k4CX|d4lX.I4XX)===v6n&&(v6n=!(j6qX.j4CX|d4lX.I4XX));void(j6qX.k4CX|d4lX.I4XX)===V6n&&(V6n=M5Z.Texture.TRILINEAR_SAMPLINGMODE);void+j6qX.k4CX===h6n&&(h6n=M5Z.Engine.TEXTURETYPE_UNSIGNED_INT);G6n=J6n.call(this,j6qX.X4CX,Q6n,!w6n,v6n)||this;return G6n.format=D6n,G6n._engine=Q6n.getEngine(),G6n._texture=Q6n.getEngine().createRawTexture3D(X6n,M6n,j6n,W6n,D6n,w6n,v6n,V6n,void+j6qX.k4CX,h6n),G6n.is3D=!(j6qX.k4CX|d4lX.I4XX),G6n;}return N0(r6n,J6n),r6n.prototype.update=function(I6n){this._texture&&this._engine.updateRawTexture3D(this._texture,I6n,this._texture.format,this._texture.invertY,void(G3CX.k4CX|d4lX.I4XX),this._texture.type);},r6n;}(M5Z.Texture);M5Z.RawTexture3D=V0Z;j2=Q0||(Q0={});v0Z=function(){function x6n(c6n){this._vertexBuffers={};this._scene=c6n;}return x6n.prototype._prepareBuffers=function(){var l6qX=G3CX;var N6n;if(!this._vertexBuffers[j2.VertexBuffer.PositionKind]){N6n=[];d4lX.i4XX(d4lX.I4XX);N6n.push(+l6qX.j4CX,d4lX.r4XX(d4lX.n4XX,l6qX.j4CX));d4lX.F4XX(d4lX.n4XX);N6n.push(-d4lX.z4XX(d4lX.I4XX,l6qX.j4CX),d4lX.n4XX);d4lX.i4XX(d4lX.I4XX);N6n.push(-d4lX.n4XX,-d4lX.r4XX(d4lX.n4XX,l6qX.j4CX));d4lX.F4XX(d4lX.w4XX);N6n.push(d4lX.z4XX(d4lX.I4XX,l6qX.j4CX),-d4lX.n4XX);d4lX.F4XX(d4lX.I4XX);this._vertexBuffers[j2.VertexBuffer.PositionKind]=new j2.VertexBuffer(this._scene.getEngine(),N6n,j2.VertexBuffer.PositionKind,!+l6qX.j4CX,!d4lX.z4XX(d4lX.n4XX,l6qX.j4CX),d4lX.w4XX);this._buildIndexBuffer();}},x6n.prototype._buildIndexBuffer=function(){var E6n;E6n=[];E6n.push(d4lX.I4XX);d4lX.i4XX(d4lX.w4XX);E6n.push(d4lX.z4XX(d4lX.I4XX,G3CX.j4CX));d4lX.F4XX(d4lX.w4XX);E6n.push(d4lX.r4XX(d4lX.I4XX,G3CX.U4CX));d4lX.F4XX(d4lX.w4XX);E6n.push(d4lX.r4XX(d4lX.I4XX,G3CX.k4CX));E6n.push(d4lX.w4XX);d4lX.i4XX(d4lX.n4XX);E6n.push(d4lX.r4XX(d4lX.I4XX,G3CX.l4CX));this._indexBuffer=this._scene.getEngine().createIndexBuffer(E6n);},x6n.prototype._rebuild=function(){var l6n;l6n=this._vertexBuffers[j2.VertexBuffer.PositionKind];l6n&&(l6n._rebuild(),this._buildIndexBuffer());},x6n.prototype._prepareFrame=function(n6n,A6n){var Y6qX=G3CX;var b6n;void(Y6qX.k4CX-d4lX.I4XX)===n6n&&(n6n=Y6qX.X4CX);void d4lX.I4XX===A6n&&(A6n=Y6qX.X4CX);b6n=this._scene.activeCamera;return!!b6n&&(!(!(A6n=A6n||b6n._postProcesses.filter(function(C6n){d4lX.F4XX(S7CX);return d4lX.z4XX(G3CX.X4CX,C6n);}))||+Y6qX.k4CX===A6n.length||!this._scene.postProcessesEnabled)&&(A6n[+Y6qX.k4CX].activate(b6n,n6n,Y6qX.X4CX!=A6n),!d4lX.I4XX));},x6n.prototype.directRender=function(K6n,z6n,i6n,u6n,k6n){var S6qX=G3CX;var p6n,t6n;void(S6qX.k4CX-d4lX.I4XX)===z6n&&(z6n=S6qX.X4CX);void d4lX.I4XX===i6n&&(i6n=!+S6qX.j4CX);void(S6qX.k4CX-d4lX.I4XX)===u6n&&(u6n=+S6qX.k4CX);void+S6qX.k4CX===k6n&&(k6n=+S6qX.k4CX);for(var L6n=this._scene.getEngine(),a6n=S6qX.k4CX|d4lX.I4XX;a6n=z3n.length){return void(a3n&&a3n(t3n));}d4lX.F4XX(d4lX.w4XX);setTimeout(k3n,d4lX.z4XX(d4lX.I4XX,G3CX.S3uX));}};k3n();}else{a3n&&a3n(this);}}else{a3n&&a3n(this);}}else{a3n&&a3n(this);}},j9n.prototype.forceCompilationAsync=function(F3n){var q3n;q3n=this;return new Promise(function(o3n){q3n.forceCompilation(function(){o3n();},F3n);});},j9n.prototype.isReady=function(U7n,Y7n){var U7qX=G3CX;var R4dX="shadowMap";var n5dX="#define DIRECTIONINLIGHTDATA";var I5dX="#define NONUNIFORMSCALING";var F5dX="#define NORMAL";var i5dX="#define DEPTHTEXTURE";var r5dX="#define ESM";var z5dX="#define FLOAT";var y3n,R3n,B3n,T3n,H7n,s3n,P3n,O3n;y3n=[];this._textureType!==u9.Engine.TEXTURETYPE_UNSIGNED_INT&&y3n.push(z5dX);this.useExponentialShadowMap||this.useBlurExponentialShadowMap?y3n.push(r5dX):(this.usePercentageCloserFiltering||this.useContactHardeningShadow)&&y3n.push(i5dX);R3n=[u9.VertexBuffer.PositionKind];B3n=U7n.getMesh();T3n=U7n.getMaterial();if(this.normalBias&&B3n.isVerticesDataPresent(u9.VertexBuffer.NormalKind)&&(R3n.push(u9.VertexBuffer.NormalKind),y3n.push(F5dX),B3n.nonUniformScaling&&y3n.push(I5dX),this.getLight().getTypeID()===u9.Light.LIGHTTYPEID_DIRECTIONALLIGHT&&y3n.push(n5dX)),T3n&&T3n.needAlphaTesting()){H7n=T3n.getAlphaTestTexture();H7n&&(y3n.push(F6dX),B3n.isVerticesDataPresent(u9.VertexBuffer.UVKind)&&(R3n.push(u9.VertexBuffer.UVKind),y3n.push(w5dX)),B3n.isVerticesDataPresent(u9.VertexBuffer.UV2Kind)&&+U7qX.j4CX===H7n.coordinatesIndex&&(R3n.push(u9.VertexBuffer.UV2Kind),y3n.push(P5dX)));}B3n.useBones&&B3n.computeBonesUsingShaders?(R3n.push(u9.VertexBuffer.MatricesIndicesKind),R3n.push(u9.VertexBuffer.MatricesWeightsKind),U7qX.t4CX-d4lX.I4XX+O3fX?(S3fX-d4lX.I4XX,k3dX.Q3fX):k3dX.W3fX:G3CX.e4CX;})).trim())?l3V=k3dX.m3dX:Y3fX===l3V&&(l3V=k3dX.B3dX),l3V;},w3V;}();e6Z.AndOrNotEvaluator=f6Z;J7=Q0||(Q0={});u6Z=function(){var P9AX=G3CX;var H3fX="QuotaExceededError";var v3fX="readwrite";var p3fX="Error: IndexedDB not supported by your browser or BabylonJS Database is not open.";var U3fX=" from DB.";var E3fX="versions";var Z3fX="scenes";var l3fX="enableTexturesOffline";var t3fX="enableSceneOffline";function b3V(L3V,a3V,n3V){var R3qX=G3CX;var C3V;void d4lX.I4XX===n3V&&(n3V=!(R3qX.j4CX*d4lX.n4XX));C3V=this;this.idbFactory=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;this.callbackManifestChecked=a3V;this.currentSceneUrl=b3V._ReturnFullUrlLocation(L3V);this.db=R3qX.X4CX;d4lX.i4XX(d4lX.w4XX);this._enableSceneOffline=!d4lX.r4XX(d4lX.I4XX,R3qX.j4CX);this._enableTexturesOffline=!d4lX.n4XX;this.manifestVersionFound=+R3qX.k4CX;d4lX.F4XX(d4lX.n4XX);this.mustUpdateRessources=!d4lX.z4XX(d4lX.I4XX,R3qX.j4CX);this.hasReachedQuota=!d4lX.n4XX;b3V.IDBStorageEnabled?n3V?(this._enableSceneOffline=!(R3qX.k4CX*d4lX.n4XX),this._enableTexturesOffline=!+R3qX.k4CX,this.manifestVersionFound=R3qX.j4CX|d4lX.I4XX,J7.Tools.SetImmediate(function(){d4lX.i4XX(d4lX.n4XX);C3V.callbackManifestChecked(!d4lX.z4XX(d4lX.I4XX,R3qX.k4CX));})):this._checkManifestFile():this.callbackManifestChecked(!d4lX.I4XX);}return Object.defineProperty(b3V.prototype,t3fX,{get:function(){return this._enableSceneOffline;},enumerable:!+P9AX.k4CX,configurable:!(P9AX.k4CX*d4lX.n4XX)}),Object.defineProperty(b3V.prototype,l3fX,{get:function(){return this._enableTexturesOffline;},enumerable:!d4lX.I4XX,configurable:!(P9AX.k4CX-d4lX.I4XX)}),b3V.prototype._checkManifestFile=function(){var n8qX=G3CX;var X3fX=".manifest";var z3V,p3V,i3V,K3V,t3V;z3V=this;p3V=function(){d4lX.i4XX(d4lX.w4XX);z3V._enableSceneOffline=!d4lX.r4XX(d4lX.I4XX,G3CX.j4CX);z3V._enableTexturesOffline=!d4lX.n4XX;d4lX.F4XX(d4lX.n4XX);z3V.callbackManifestChecked(!d4lX.z4XX(d4lX.I4XX,G3CX.j4CX));};i3V=!+n8qX.j4CX;K3V=this.currentSceneUrl+X3fX;t3V=new XMLHttpRequest();navigator.onLine&&(i3V=!(n8qX.k4CX*d4lX.n4XX),K3V=K3V+(n8qX.X4CX==K3V.match(k3dX.j3fX)?k3dX.o4dX:k3dX.k3fX)+Date.now());t3V.open(x3uX.x7uX,K3V,!+n8qX.k4CX);t3V.addEventListener(x3uX.u7uX,function(){var u3V;if(+x3uX.D2rX===t3V.status||J7.Tools.ValidateXHRData(t3V,G3CX.j4CX-d4lX.I4XX))try{u3V=JSON.parse(t3V.response);z3V._enableSceneOffline=u3V.enableSceneOffline;z3V._enableTexturesOffline=u3V.enableTexturesOffline;u3V.version&&!isNaN(parseInt(u3V.version))&&(z3V.manifestVersionFound=u3V.version);z3V.callbackManifestChecked&&z3V.callbackManifestChecked(!(G3CX.k4CX*d4lX.n4XX));}catch(k3V){p3V();}else{p3V();}},!+n8qX.j4CX);t3V.addEventListener(x3uX.L7uX,function(g3V){var f3V;if(i3V){i3V=!+G3CX.j4CX;f3V=z3V.currentSceneUrl+X3fX;d4lX.i4XX(d4lX.w4XX);t3V.open(x3uX.x7uX,f3V,!d4lX.r4XX(d4lX.I4XX,G3CX.k4CX));t3V.send();}else{p3V();}},!+n8qX.j4CX);try{t3V.send();}catch(e3V){var B3fX="Error on XHR send request.";J7.Tools.Error(B3fX);this.callbackManifestChecked(!+G3CX.j4CX);}},b3V.prototype.openAsync=function(y3V,F3V){var I8qX=G3CX;var Z3V,o3V,q3V;Z3V=this;o3V=function(){Z3V.isSupported=!+I8qX.j4CX;F3V&&F3V();};if(this.idbFactory&&(this._enableSceneOffline||this._enableTexturesOffline))if(this.db){y3V&&y3V();}else{d4lX.F4XX(d4lX.n4XX);this.hasReachedQuota=!d4lX.r4XX(d4lX.I4XX,I8qX.j4CX);d4lX.i4XX(d4lX.I4XX);this.isSupported=!d4lX.r4XX(d4lX.n4XX,I8qX.k4CX);d4lX.i4XX(d4lX.I4XX);q3V=this.idbFactory.open(I8qX.O4CX,d4lX.r4XX(d4lX.n4XX,I8qX.j4CX));q3V.onerror=function(R3V){o3V();};q3V.onblocked=function(B3V){var m3fX="IDB request blocked. Please reload the page.";J7.Tools.Error(m3fX);o3V();};q3V.onsuccess=function(P3V){Z3V.db=q3V.result;y3V();};q3V.onupgradeneeded=function(O3V){var q3fX="textureUrl";var D3fX="sceneUrl";if(Z3V.db=O3V.target.result,Z3V.db)try{Z3V.db.createObjectStore(Z3fX,{keyPath:D3fX});Z3V.db.createObjectStore(E3fX,{keyPath:D3fX});Z3V.db.createObjectStore(o0dX,{keyPath:q3fX});}catch(s3V){var s3fX="Error while creating object stores. Exception: ";J7.Tools.Error(s3fX+s3V.message);o3V();}};}else{this.isSupported=!+I8qX.j4CX,F3V&&F3V();}},b3V.prototype.loadImageFromDB=function(d7V,H7V){var T3V,U7V,Y7V;T3V=this;U7V=b3V._ReturnFullUrlLocation(d7V);Y7V=function(){T3V.hasReachedQuota||G3CX.X4CX===T3V.db?H7V.src=d7V:T3V._saveImageIntoDBAsync(U7V,H7V);};this.mustUpdateRessources?Y7V():this._loadImageFromDBAsync(U7V,H7V,Y7V);},b3V.prototype._loadImageFromDBAsync=function(S7V,m7V,v7V){var J7V,r7V,G7V;if(this.isSupported&&G3CX.X4CX!==this.db){r7V=this.db.transaction([o0dX]);r7V.onabort=function(w7V){m7V.src=S7V;};r7V.oncomplete=function(h7V){var V7V,Q7V;if(J7V){Q7V=window.URL||window.webkitURL;V7V=Q7V.createObjectURL(J7V.data);m7V.onerror=function(){var G3fX="Error loading image from blob URL: ";var a3fX=" switching back to web url: ";d4lX.F4XX(d4lX.P4XX);J7.Tools.Error(d4lX.r4XX(S7V,a3fX,V7V,G3fX));m7V.src=S7V;};m7V.src=V7V;}else{v7V();}};G7V=r7V.objectStore(o0dX).get(S7V);G7V.onsuccess=function(D7V){J7V=D7V.target.result;};G7V.onerror=function(X7V){var b3fX="Error loading texture ";d4lX.i4XX(d4lX.d8CX);J7.Tools.Error(d4lX.z4XX(b3fX,S7V,U3fX));m7V.src=S7V;};}else{J7.Tools.Error(p3fX),m7V.src=S7V;}},b3V.prototype._saveImageIntoDBAsync=function(j7V,M7V){var C3fX="blob";var x7V,c7V,I7V,W7V;x7V=this;if(this.isSupported){c7V=function(){var N7V,E7V;if(I7V){E7V=window.URL||window.webkitURL;try{N7V=E7V.createObjectURL(I7V);}catch(l7V){N7V=E7V.createObjectURL(I7V);}}N7V&&(M7V.src=N7V);};if(b3V.IsUASupportingBlobStorage){W7V=new XMLHttpRequest();W7V.open(x3uX.x7uX,j7V,!d4lX.I4XX);W7V.responseType=C3fX;W7V.addEventListener(x3uX.u7uX,function(){var A7V,n7V,b7V;if(+x3uX.D2rX===W7V.status&&x7V.db){I7V=W7V.response;A7V=x7V.db.transaction([o0dX],v3fX);A7V.onabort=function(L7V){var C7V;try{C7V=(L7V.srcElement||L7V.target).error;C7V&&H3fX===C7V.name&&(x7V.hasReachedQuota=!+G3CX.k4CX);}catch(a7V){}c7V();};A7V.oncomplete=function(z7V){c7V();};n7V={textureUrl:j7V,data:I7V};try{b7V=A7V.objectStore(o0dX).put(n7V);b7V.onsuccess=function(t7V){};b7V.onerror=function(K7V){c7V();};}catch(p7V){(k3dX.A3fX|d4lX.I4XX)===p7V.code&&(b3V.IsUASupportingBlobStorage=!+G3CX.j4CX);M7V.src=j7V;}}else{M7V.src=j7V;}},!(G3CX.j4CX|d4lX.I4XX));W7V.addEventListener(x3uX.L7uX,function(i7V){var o3fX="Error in XHR request in BABYLON.Database.";J7.Tools.Error(o3fX);M7V.src=j7V;},!+G3CX.j4CX);W7V.send();}else{M7V.src=j7V;}}else{J7.Tools.Error(p3fX),M7V.src=j7V;}},b3V.prototype._checkVersionFromDB=function(u7V,k7V){var f7V;f7V=this;this._loadVersionFromDBAsync(u7V,k7V,function(){f7V._saveVersionIntoDBAsync(u7V,k7V);});},b3V.prototype._loadVersionFromDBAsync=function(o7V,g7V,y7V){var e7V,Z7V,q7V,F7V;Z7V=this;if(this.isSupported&&this.db)try{q7V=this.db.transaction([E3fX]);q7V.oncomplete=function(R7V){e7V?Z7V.manifestVersionFound!==e7V.data?(Z7V.mustUpdateRessources=!+G3CX.k4CX,y7V()):g7V(e7V.data):(Z7V.mustUpdateRessources=!d4lX.I4XX,y7V());};q7V.onabort=function(B7V){d4lX.F4XX(d4lX.n4XX);g7V(-d4lX.r4XX(d4lX.I4XX,G3CX.j4CX));};F7V=q7V.objectStore(E3fX).get(o7V);F7V.onsuccess=function(P7V){e7V=P7V.target.result;};F7V.onerror=function(O7V){var u3fX="Error loading version for scene ";d4lX.F4XX(d4lX.d8CX);J7.Tools.Error(d4lX.z4XX(u3fX,o7V,U3fX));d4lX.F4XX(d4lX.w4XX);g7V(-d4lX.z4XX(d4lX.I4XX,G3CX.j4CX));};}catch(s7V){var L3fX="Error while accessing 'versions' object store (READ OP). Exception: ";J7.Tools.Error(L3fX+s7V.message);g7V(-+G3CX.j4CX);}else{J7.Tools.Error(p3fX),g7V(-+G3CX.j4CX);}},b3V.prototype._saveVersionIntoDBAsync=function(S4V,T7V){var U4V,H4V,d4V,Y4V;U4V=this;if(this.isSupported&&!this.hasReachedQuota&&this.db)try{H4V=this.db.transaction([E3fX],v3fX);H4V.onabort=function(r4V){var m4V;try{m4V=r4V.srcElement.error;m4V&&H3fX===m4V.name&&(U4V.hasReachedQuota=!+G3CX.k4CX);}catch(J4V){}T7V(-+G3CX.j4CX);};H4V.oncomplete=function(G4V){T7V(U4V.manifestVersionFound);};d4V={sceneUrl:S4V,data:this.manifestVersionFound};Y4V=H4V.objectStore(E3fX).put(d4V);Y4V.onsuccess=function(v4V){};Y4V.onerror=function(w4V){var e3fX="Error in DB add version request in BABYLON.Database.";J7.Tools.Error(e3fX);};}catch(V4V){var x3fX="Error while accessing 'versions' object store (WRITE OP). Exception: ";J7.Tools.Error(x3fX+V4V.message);d4lX.F4XX(d4lX.n4XX);T7V(-d4lX.r4XX(d4lX.I4XX,G3CX.j4CX));}else{d4lX.i4XX(d4lX.n4XX);T7V(-d4lX.z4XX(d4lX.I4XX,G3CX.j4CX));}},b3V.prototype.loadFileFromDB=function(I4V,X4V,j4V,D4V,W4V){var Q4V,h4V,M4V;Q4V=this;h4V=b3V._ReturnFullUrlLocation(I4V);M4V=function(){Q4V._saveFileIntoDBAsync(h4V,X4V,j4V,W4V,D4V);};this._checkVersionFromDB(h4V,function(x4V){-+G3CX.j4CX!==x4V?Q4V.mustUpdateRessources?Q4V._saveFileIntoDBAsync(h4V,X4V,j4V,W4V,D4V):Q4V._loadFileFromDBAsync(h4V,X4V,M4V,W4V):D4V&&D4V();});},b3V.prototype._loadFileFromDBAsync=function(N4V,n4V,E4V,C4V){var l4V,A4V,c4V,b4V;if(this.isSupported&&this.db){l4V=-(G3CX.j4CX*d4lX.n4XX)!==N4V.indexOf(v4dX)?Z3fX:o0dX;c4V=this.db.transaction([l4V]);c4V.oncomplete=function(L4V){A4V?n4V(A4V.data):E4V();};c4V.onabort=function(a4V){E4V();};b4V=c4V.objectStore(l4V).get(N4V);b4V.onsuccess=function(z4V){A4V=z4V.target.result;};b4V.onerror=function(t4V){var c3fX="Error loading file ";d4lX.F4XX(d4lX.d8CX);J7.Tools.Error(d4lX.z4XX(c3fX,N4V,U3fX));E4V();};}else{J7.Tools.Error(p3fX),n4V();}},b3V.prototype._saveFileIntoDBAsync=function(k4V,p4V,e4V,g4V,Z4V){var u4V,f4V,i4V,K4V;u4V=this;if(this.isSupported){f4V=-d4lX.n4XX!==k4V.indexOf(v4dX)?Z3fX:o0dX;K4V=new XMLHttpRequest();K4V.open(x3uX.x7uX,k4V+k3dX.o4dX+Date.now(),!+G3CX.k4CX);g4V&&(K4V.responseType=x3uX.c7uX);e4V&&(K4V.onprogress=e4V);K4V.addEventListener(x3uX.u7uX,function(){var X0CX=400;var o4V,q4V,F4V;if(+x3uX.D2rX===K4V.status||K4V.status=this.subMaterials.length?this.getScene().defaultMaterial:this.subMaterials[n8V];},V8V.prototype.getActiveTextures=function(){var C8V;return(C8V=Q8V.prototype.getActiveTextures.call(this)).concat.apply(C8V,this.subMaterials.map(function(L8V){return L8V?L8V.getActiveTextures():[];}));},V8V.prototype.getClassName=function(){var z3fX="MultiMaterial";return z3fX;},V8V.prototype.isReadyForSubMesh=function(t8V,K8V,p8V){var a8V;for(var z8V=+G3CX.k4CX;z8Vthis._maxRotationDistFromHeadset){F0B=q0B-(q0B<+G3CX.k4CX?-this._maxRotationDistFromHeadset:this._maxRotationDistFromHeadset);this._draggedRoomRotation+=F0B;o0B=Math.sin(-F0B);y0B=Math.cos(-F0B);this._calculatedPosition.x=this._calculatedPosition.x*y0B-this._calculatedPosition.z*o0B;this._calculatedPosition.z=this._calculatedPosition.x*o0B+this._calculatedPosition.z*y0B;}}L0B.Vector3.TransformCoordinatesToRef(this._calculatedPosition,this._deviceToWorld,this.devicePosition);this._deviceToWorld.getRotationMatrixToRef(this._workingMatrix);L0B.Quaternion.FromRotationMatrixToRef(this._workingMatrix,this.deviceRotationQuaternion);this.deviceRotationQuaternion.multiplyInPlace(this._calculatedRotation);this._mesh&&(this._mesh.position.copyFrom(this.devicePosition),this._mesh.rotationQuaternion&&this._mesh.rotationQuaternion.copyFrom(this.deviceRotationQuaternion));},u0B.prototype.updateFromDevice=function(B0B){var q02X=G3CX;var P0B;if(B0B){(this.rawPose=B0B).position&&(this._deviceRoomPosition.copyFromFloats(B0B.position[+q02X.k4CX],B0B.position[q02X.j4CX|d4lX.I4XX],-B0B.position[d4lX.w4XX]),this._mesh&&this._mesh.getScene().useRightHandedSystem&&(this._deviceRoomPosition.z*=-d4lX.n4XX),this._trackPosition&&this._deviceRoomPosition.scaleToRef(this.deviceScaleFactor,this._calculatedPosition),this._calculatedPosition.addInPlace(this.position));P0B=this.rawPose;B0B.orientation&&P0B.orientation&&(this._deviceRoomRotationQuaternion.copyFromFloats(P0B.orientation[q02X.k4CX|d4lX.I4XX],P0B.orientation[+q02X.j4CX],-P0B.orientation[+q02X.U4CX],-P0B.orientation[+q02X.l4CX]),this._mesh&&(this._mesh.getScene().useRightHandedSystem?(this._deviceRoomRotationQuaternion.z*=-(q02X.j4CX|d4lX.I4XX),this._deviceRoomRotationQuaternion.w*=-+q02X.j4CX):this._deviceRoomRotationQuaternion.multiplyToRef(this._leftHandSystemQuaternion,this._deviceRoomRotationQuaternion)),this._deviceRoomRotationQuaternion.multiplyToRef(this.rotationQuaternion,this._calculatedRotation));}},u0B.prototype.attachToMesh=function(T0B){if(this._mesh&&(this._mesh.parent=G3CX.X4CX),this._mesh=T0B,this._poseControlledCamera&&(this._mesh.parent=this._poseControlledCamera),this._mesh.rotationQuaternion||(this._mesh.rotationQuaternion=new L0B.Quaternion()),this._updatePoseAndMesh(),this._pointingPoseNode){for(var s0B=[],O0B=this._pointingPoseNode;O0B.parent;){s0B.push(O0B.parent),O0B=O0B.parent;}s0B.reverse().forEach(function(H9B){H9B.computeWorldMatrix(!d4lX.I4XX);});}this._meshAttachedObservable.notifyObservers(T0B);},u0B.prototype.attachToPoseControlledCamera=function(U9B){this._poseControlledCamera=U9B;this._mesh&&(this._mesh.parent=this._poseControlledCamera);},u0B.prototype.dispose=function(){this._mesh&&this._mesh.dispose();this._mesh=G3CX.X4CX;k0B.prototype.dispose.call(this);},Object.defineProperty(u0B.prototype,p3dX,{get:function(){return this._mesh;},enumerable:!+G3CX.k4CX,configurable:!d4lX.I4XX}),u0B.prototype.getForwardRay=function(Y9B){var b02X=G3CX;var d9B,S9B,m9B,r9B,J9B;if(void+b02X.k4CX===Y9B&&(Y9B=b02X.r3CX),!this.mesh){d4lX.F4XX(d4lX.w4XX);return new L0B.Ray(L0B.Vector3.Zero(),new L0B.Vector3(d4lX.r4XX(d4lX.I4XX,b02X.k4CX),d4lX.I4XX,+b02X.j4CX),Y9B);}d9B=this._pointingPoseNode?this._pointingPoseNode.getWorldMatrix():this.mesh.getWorldMatrix();S9B=d9B.getTranslation();d4lX.F4XX(d4lX.w4XX);m9B=new L0B.Vector3(d4lX.z4XX(d4lX.I4XX,b02X.k4CX),d4lX.z4XX(d4lX.n4XX,b02X.k4CX,d4lX.F4XX(d4lX.I4XX)),-d4lX.z4XX(d4lX.I4XX,b02X.j4CX,d4lX.F4XX(d4lX.n4XX)));r9B=L0B.Vector3.TransformNormal(m9B,d9B);J9B=L0B.Vector3.Normalize(r9B);return new L0B.Ray(S9B,J9B,Y9B);},u0B.POINTING_POSE=U6fX,u0B;}(L0B.Gamepad);L0B.PoseEnabledController=K0B;}(Q0||(Q0={})));o2=Q0||(Q0={});k6Z=function(v9B){var p6fX="defaultModel";function G9B(V9B){var D5kX=G3CX;var w9B;w9B=v9B.call(this,V9B)||this;return w9B.onTriggerStateChangedObservable=new o2.Observable(),w9B.onMainButtonStateChangedObservable=new o2.Observable(),w9B.onSecondaryButtonStateChangedObservable=new o2.Observable(),w9B.onPadStateChangedObservable=new o2.Observable(),w9B.onPadValuesChangedObservable=new o2.Observable(),w9B.pad={x:D5kX.k4CX-d4lX.I4XX,y:d4lX.I4XX},w9B._changes={pressChanged:!+D5kX.j4CX,touchChanged:!+D5kX.j4CX,valueChanged:!(D5kX.j4CX-d4lX.I4XX),changed:!+D5kX.j4CX},w9B._buttons=new Array(V9B.buttons.length),w9B.hand=V9B.hand,w9B;}return N0(G9B,v9B),G9B.prototype.onButtonStateChange=function(Q9B){this._onButtonStateChange=Q9B;},Object.defineProperty(G9B.prototype,p6fX,{get:function(){return this._defaultModel;},enumerable:!(G3CX.k4CX*d4lX.n4XX),configurable:!(G3CX.k4CX*d4lX.n4XX)}),G9B.prototype.update=function(){v9B.prototype.update.call(this);for(var h9B=+G3CX.k4CX;h9Bthis.maxCameraSpeed||S4B<-this.maxCameraSpeed)&&(S4B=S4Bthis.maxCameraSpeed||m4B<-this.maxCameraSpeed)&&(m4B=m4B<+r02X.j4CX?-this.maxCameraSpeed:this.maxCameraSpeed);(d4B>this.maxCameraSpeed||d4B<-this.maxCameraSpeed)&&(d4B=d4B<+r02X.j4CX?-this.maxCameraSpeed:this.maxCameraSpeed);this.position=new Z7B.Vector3(this.position.x+S4B,this.position.y+m4B,this.position.z+d4B);this.setTarget(r4B);}},P7B.prototype._checkInputs=function(){O7B.prototype._checkInputs.call(this);this.lockedTarget&&this._follow(this.lockedTarget);},P7B.prototype.getClassName=function(){return d2fX;},W0([Z7B.serialize()],P7B.prototype,R4uX,void+p0kX.k4CX),W0([Z7B.serialize()],P7B.prototype,y2fX,void(p0kX.k4CX*d4lX.n4XX)),W0([Z7B.serialize()],P7B.prototype,f2fX,void(p0kX.k4CX*d4lX.n4XX)),W0([Z7B.serialize()],P7B.prototype,O2fX,void+p0kX.k4CX),W0([Z7B.serialize()],P7B.prototype,S2fX,void(p0kX.k4CX-d4lX.I4XX)),W0([Z7B.serializeAsMeshReference(Y5LX)],P7B.prototype,t5LX,void+p0kX.k4CX),P7B;}(Z7B.TargetCamera);Z7B.FollowCamera=q7B;F7B=function(j4B){function W4B(I4B,x4B,c4B,N4B,E4B,l4B){var M4B;M4B=j4B.call(this,I4B,Z7B.Vector3.Zero(),l4B)||this;return M4B.alpha=x4B,M4B.beta=c4B,M4B.radius=N4B,M4B.target=E4B,M4B._cartesianCoordinates=Z7B.Vector3.Zero(),M4B._follow(),M4B;}return N0(W4B,j4B),W4B.prototype._follow=function(){var A4B;if(this.target){this._cartesianCoordinates.x=this.radius*Math.cos(this.alpha)*Math.cos(this.beta);this._cartesianCoordinates.y=this.radius*Math.sin(this.beta);this._cartesianCoordinates.z=this.radius*Math.sin(this.alpha)*Math.cos(this.beta);A4B=this.target.getAbsolutePosition();this.position=A4B.add(this._cartesianCoordinates);this.setTarget(A4B);}},W4B.prototype._checkInputs=function(){j4B.prototype._checkInputs.call(this);this._follow();},W4B.prototype.getClassName=function(){return g2fX;},W4B;}(Z7B.TargetCamera);Z7B.ArcFollowCamera=F7B;}(Q0||(Q0={})));d6Z=Q0||(Q0={});H0Z=function(n4B){function b4B(L4B,a4B,z4B){var C4B;C4B=n4B.call(this,L4B,a4B,z4B)||this;return C4B.inputs.addGamepad(),C4B;}return N0(b4B,n4B),Object.defineProperty(b4B.prototype,s7fX,{get:function(){var t4B;t4B=this.inputs.attached.gamepad;return t4B?t4B.gamepadAngularSensibility:G3CX.k4CX*d4lX.n4XX;},set:function(p4B){var K4B;K4B=this.inputs.attached.gamepad;K4B&&(K4B.gamepadAngularSensibility=p4B);},enumerable:!(G3CX.k4CX*d4lX.n4XX),configurable:!d4lX.I4XX}),Object.defineProperty(b4B.prototype,a7fX,{get:function(){var i4B;i4B=this.inputs.attached.gamepad;return i4B?i4B.gamepadMoveSensibility:G3CX.k4CX|d4lX.I4XX;},set:function(k4B){var u4B;u4B=this.inputs.attached.gamepad;u4B&&(u4B.gamepadMoveSensibility=k4B);},enumerable:!d4lX.I4XX,configurable:!d4lX.I4XX}),b4B.prototype.getClassName=function(){var Q2fX="UniversalCamera";return Q2fX;},b4B;}(d6Z.TouchCamera);d6Z.UniversalCamera=H0Z;(function(f4B){var Y2fX="GamepadCamera";var g4B;f4B.Node.AddNodeConstructor(Y2fX,function(e4B,Z4B){return function(){return new g4B(e4B,f4B.Vector3.Zero(),Z4B);};});g4B=function(F4B){function q4B(o4B,y4B,R4B){return F4B.call(this,o4B,y4B,R4B)||this;}return N0(q4B,F4B),q4B.prototype.getClassName=function(){return Y2fX;},q4B;}(f4B.UniversalCamera);f4B.GamepadCamera=g4B;}(Q0||(Q0={})));U0Z=Q0||(Q0={});Y0Z=function(){function B4B(){this._renderPipelines={};}return B4B.prototype.addPipeline=function(P4B){this._renderPipelines[P4B._name]=P4B;},B4B.prototype.attachCamerasToRenderPipeline=function(T4B,H8B,O4B){var s4B;void+G3CX.k4CX===O4B&&(O4B=!(G3CX.j4CX|d4lX.I4XX));s4B=this._renderPipelines[T4B];s4B&&s4B._attachCameras(H8B,O4B);},B4B.prototype.detachCamerasFromRenderPipeline=function(Y8B,d8B){var U8B;U8B=this._renderPipelines[Y8B];U8B&&U8B._detachCameras(d8B);},B4B.prototype.enableEffectInPipeline=function(m8B,r8B,J8B){var S8B;S8B=this._renderPipelines[m8B];S8B&&S8B._enableEffect(r8B,J8B);},B4B.prototype.disableEffectInPipeline=function(v8B,w8B,V8B){var G8B;G8B=this._renderPipelines[v8B];G8B&&G8B._disableEffect(w8B,V8B);},B4B.prototype.update=function(){var h8B;for(var Q8B in this._renderPipelines)if(this._renderPipelines.hasOwnProperty(Q8B)){h8B=this._renderPipelines[Q8B];h8B.isSupported?h8B._update():(h8B.dispose(),delete this._renderPipelines[Q8B]);}},B4B.prototype._rebuild=function(){for(var D8B in this._renderPipelines){if(this._renderPipelines.hasOwnProperty(D8B)){this._renderPipelines[D8B]._rebuild();}}},B4B.prototype.dispose=function(){for(var X8B in this._renderPipelines){if(this._renderPipelines.hasOwnProperty(X8B)){this._renderPipelines[X8B].dispose();}}},B4B;}();U0Z.PostProcessRenderPipelineManager=Y0Z;(function(W8B){var t2fX="postProcessRenderPipelineManager";var j8B;Object.defineProperty(W8B.Scene.prototype,t2fX,{get:function(){var M8B;if(!this._postProcessRenderPipelineManager){M8B=this._getComponent(W8B.SceneComponentConstants.NAME_POSTPROCESSRENDERPIPELINEMANAGER);M8B||(M8B=new j8B(this),this._addComponent(M8B));this._postProcessRenderPipelineManager=new W8B.PostProcessRenderPipelineManager();}return this._postProcessRenderPipelineManager;},enumerable:!(G3CX.k4CX|d4lX.I4XX),configurable:!+G3CX.k4CX});j8B=function(){function I8B(x8B){this.name=W8B.SceneComponentConstants.NAME_POSTPROCESSRENDERPIPELINEMANAGER;this.scene=x8B;}return I8B.prototype.register=function(){this.scene._gatherRenderTargetsStage.registerStep(W8B.SceneComponentConstants.STEP_GATHERRENDERTARGETS_POSTPROCESSRENDERPIPELINEMANAGER,this,this._gatherRenderTargets);},I8B.prototype.rebuild=function(){this.scene._postProcessRenderPipelineManager&&this.scene._postProcessRenderPipelineManager._rebuild();},I8B.prototype.dispose=function(){this.scene._postProcessRenderPipelineManager&&this.scene._postProcessRenderPipelineManager.dispose();},I8B.prototype._gatherRenderTargets=function(c8B){this.scene._postProcessRenderPipelineManager&&this.scene._postProcessRenderPipelineManager.update();},I8B;}();W8B.PostProcessRenderPipelineManagerSceneComponent=j8B;}(Q0||(Q0={})));m5Z=Q0||(Q0={});S0Z=function(){function N8B(b8B,E8B,l8B,A8B){this._name=E8B;this._singleInstance=A8B||!(G3CX.k4CX|d4lX.I4XX);this._getPostProcesses=l8B;this._cameras={};this._indicesForCamera={};this._postProcesses={};}return Object.defineProperty(N8B.prototype,f3uX,{get:function(){for(var C8B in this._postProcesses)if(this._postProcesses.hasOwnProperty(C8B))for(var L8B=this._postProcesses[C8B],n8B=G3CX.k4CX*d4lX.n4XX;n8B>+B9kX.S3uX)>>>d4lX.I4XX,this._bits[B9kX.k4CX*d4lX.n4XX]=((W0fX|d4lX.I4XX)&this._bits[B9kX.k4CX|d4lX.I4XX])<>>B9kX.j4CX-d4lX.I4XX>>>B9kX.k4CX-d4lX.I4XX,this._bits[d4lX.I4XX]=(I5CX&this._bits[B9kX.k4CX-d4lX.I4XX])<<+B9kX.U4CX|(g0fX*d4lX.n4XX&this._bits[+B9kX.k4CX])>>>+B9kX.U4CX>>>+B9kX.k4CX,this._bits[d4lX.I4XX]=(+y0fX&this._bits[+B9kX.k4CX])<<+B9kX.t4CX|(f0fX*d4lX.n4XX&this._bits[+B9kX.k4CX])>>>B9kX.t4CX-d4lX.I4XX>>>+B9kX.k4CX,this._bits[d4lX.I4XX]=(O0fX-d4lX.I4XX&this._bits[B9kX.k4CX|d4lX.I4XX])<<+B9kX.Y4CX|(R4CX&this._bits[d4lX.I4XX])>>>+B9kX.Y4CX>>>d4lX.I4XX,(S0fX-d4lX.I4XX)*this._bits[+B9kX.k4CX];},T59.prototype._hammersley=function(l69,A69){d4lX.F4XX(d4lX.y8CX);return[d4lX.r4XX(A69,l69),this._radicalInverse_VdC(l69)];},T59.prototype._hemisphereSample_uniform=function(L69,a69){var Q0fX=".85";var W1CX=214;var R1CX=213;var n69,b69,C69;d4lX.F4XX(G3CX.c3CX);var a3RR=d4lX.r4XX(d4lX.t8CX,d4lX.d8CX,d4lX.O8CX,d4lX.v8CX);n69=a3RR*a69*Math.PI;d4lX.F4XX(R1CX);b69=d4lX.r4XX(d4lX.n4XX,d4lX.n4XX,Q0fX,r6fX,L69);d4lX.F4XX(W1CX);C69=Math.sqrt(d4lX.z4XX(G3CX.j4CX,d4lX.I4XX,b69,b69));return new w3.Vector3(Math.cos(n69)*C69,Math.sin(n69)*C69,b69);},T59.prototype._generateHemisphere=function(){var i69;for(var z69,t69=this.samples,p69=[],K69=G3CX.k4CX-d4lX.I4XX;K69j39-W39.hdrIncreaseRate*N39?j39-=W39.hdrIncreaseRate*N39:j39=W39._hdrCurrentLuminance;}j39=K0.Scalar.Clamp(j39,W39.hdrMinimumLuminance,+k4fX);E39.setFloat(l4fX,j39);x39=M39;W39._currentDepthOfFieldSource=W39.hdrFinalPostProcess;};this.addEffect(new K0.PostProcessRenderEffect(I39.getEngine(),t4fX,function(){return W39.hdrPostProcess;},!(E2kX.k4CX*d4lX.n4XX)));},u09.prototype._createLensFlarePostProcess=function(A39,n39){var Z2kX=G3CX;var C4fX="#define LENS_FLARE_COMPOSE";var p4fX="lensStarSampler";var U4fX="lensDirtSampler";var b4fX="lensStarMatrix";var G4fX="HDRLensFlareCompose";var a4fX="#define LENS_FLARE";var s4fX="lensColorSampler";var q4fX="distortionStrength";var E4fX="resolution";var D4fX="haloWidth";var Z4fX="ghostDispersal";var m4fX="strength";var B4fX="HDRLensFlare";var l39,b39,C39,L39;l39=this;d4lX.F4XX(d4lX.X8CX);this.lensFlarePostProcess=new K0.PostProcess(B4fX,X5fX,[m4fX,Z4fX,D4fX,E4fX,q4fX],[s4fX],d4lX.z4XX(Z2kX.U4CX,d4lX.n4XX,n39),Z2kX.X4CX,K0.Texture.BILINEAR_SAMPLINGMODE,A39.getEngine(),!+Z2kX.j4CX,a4fX,K0.Engine.TEXTURETYPE_UNSIGNED_INT);this.addEffect(new K0.PostProcessRenderEffect(A39.getEngine(),B4fX,function(){return l39.lensFlarePostProcess;},!d4lX.I4XX));d4lX.F4XX(d4lX.j8CX);this._createBlurPostProcesses(A39,d4lX.r4XX(n39,Z2kX.t4CX),+Z2kX.U4CX);d4lX.F4XX(d4lX.n4XX);this.lensFlareComposePostProcess=new K0.PostProcess(G4fX,X5fX,[b4fX],[T5fX,U4fX,p4fX],n39,Z2kX.X4CX,K0.Texture.BILINEAR_SAMPLINGMODE,A39.getEngine(),!d4lX.r4XX(d4lX.I4XX,Z2kX.j4CX),C4fX,K0.Engine.TEXTURETYPE_UNSIGNED_INT);this.addEffect(new K0.PostProcessRenderEffect(A39.getEngine(),G4fX,function(){return l39.lensFlareComposePostProcess;},!d4lX.I4XX));b39=new K0.Vector2(+Z2kX.k4CX,+Z2kX.k4CX);this.lensFlarePostProcess.onApply=function(a39){a39.setTextureFromPostProcess(H9uX,l39._bloomEnabled?l39.blurHPostProcesses[Z2kX.k4CX-d4lX.I4XX]:l39.originalPostProcess);a39.setTexture(s4fX,l39.lensColorTexture);a39.setFloat(m4fX,l39.lensFlareStrength);a39.setFloat(Z4fX,l39.lensFlareGhostDispersal);a39.setFloat(D4fX,l39.lensFlareHaloWidth);b39.x=l39.lensFlarePostProcess.width;b39.y=l39.lensFlarePostProcess.height;a39.setVector2(E4fX,b39);a39.setFloat(q4fX,l39.lensFlareDistortionStrength);};d4lX.i4XX(d4lX.n4XX);C39=K0.Matrix.FromValues(d4lX.w4XX,+Z2kX.k4CX,-d4lX.r4XX(d4lX.I4XX,Z2kX.j4CX),d4lX.I4XX,d4lX.z4XX(d4lX.I4XX,Z2kX.k4CX,d4lX.i4XX(d4lX.n4XX)),+Z2kX.U4CX,-d4lX.r4XX(d4lX.I4XX,Z2kX.j4CX,d4lX.F4XX(d4lX.n4XX)),d4lX.z4XX(d4lX.n4XX,Z2kX.k4CX,d4lX.i4XX(d4lX.I4XX)),+Z2kX.k4CX,d4lX.r4XX(d4lX.I4XX,Z2kX.k4CX,d4lX.F4XX(d4lX.w4XX)),+Z2kX.j4CX,+Z2kX.k4CX,d4lX.z4XX(d4lX.I4XX,Z2kX.k4CX,d4lX.F4XX(d4lX.w4XX)),d4lX.z4XX(d4lX.I4XX,Z2kX.k4CX,d4lX.i4XX(d4lX.n4XX)),+Z2kX.k4CX,+Z2kX.j4CX);d4lX.F4XX(d4lX.n4XX);L39=K0.Matrix.FromValues(a3uX,d4lX.I4XX,+Z2kX.s3uX,+Z2kX.k4CX,d4lX.r4XX(d4lX.I4XX,Z2kX.k4CX),+Z2kX.s3uX,d4lX.r4XX(d4lX.I4XX,Z2kX.s3uX,d4lX.F4XX(d4lX.w4XX)),+Z2kX.k4CX,d4lX.I4XX,+Z2kX.k4CX,d4lX.r4XX(d4lX.n4XX,Z2kX.j4CX,d4lX.i4XX(d4lX.I4XX)),+Z2kX.k4CX,d4lX.I4XX,d4lX.I4XX,+Z2kX.k4CX,+Z2kX.j4CX);this.lensFlareComposePostProcess.onApply=function(t39){var K39,p39,z39,i39,u39;if(l39._scene.activeCamera){t39.setTextureFromPostProcess(T5fX,l39._currentDepthOfFieldSource);t39.setTexture(U4fX,l39.lensFlareDirtTexture);t39.setTexture(p4fX,l39.lensStarTexture);K39=l39._scene.activeCamera.getViewMatrix().getRow(+Z2kX.k4CX);p39=l39._scene.activeCamera.getViewMatrix().getRow(+Z2kX.U4CX);z39=K0.Vector3.Dot(K39.toVector3(),new K0.Vector3(+Z2kX.j4CX,Z2kX.k4CX-d4lX.I4XX,+Z2kX.k4CX))+K0.Vector3.Dot(p39.toVector3(),new K0.Vector3(Z2kX.k4CX|d4lX.I4XX,Z2kX.k4CX*d4lX.n4XX,+Z2kX.j4CX));d4lX.F4XX(d4lX.w4XX);z39*=d4lX.z4XX(d4lX.I4XX,Z2kX.t4CX);i39=K0.Matrix.FromValues(+Z2kX.s3uX*Math.cos(z39),-Math.sin(z39),Z2kX.k4CX|d4lX.I4XX,Z2kX.k4CX|d4lX.I4XX,Math.sin(z39),+Z2kX.s3uX*Math.cos(z39),Z2kX.k4CX*d4lX.n4XX,+Z2kX.k4CX,Z2kX.k4CX*d4lX.n4XX,d4lX.I4XX,+Z2kX.j4CX,+Z2kX.k4CX,+Z2kX.k4CX,Z2kX.k4CX*d4lX.n4XX,Z2kX.k4CX*d4lX.n4XX,d4lX.n4XX);u39=L39.multiply(i39).multiply(C39);t39.setMatrix(b4fX,u39);l39._currentDepthOfFieldSource=l39.lensFlareFinalPostProcess;}};},u09.prototype._createDepthOfFieldPostProcess=function(f39,g39){var A4fX="#define DEPTH_OF_FIELD";var H4fX="distance";var v4fX="HDRDepthOfField";var k39;k39=this;this.depthOfFieldPostProcess=new K0.PostProcess(v4fX,X5fX,[H4fX],[T5fX,C3LX],g39,G3CX.X4CX,K0.Texture.BILINEAR_SAMPLINGMODE,f39.getEngine(),!d4lX.n4XX,A4fX,K0.Engine.TEXTURETYPE_UNSIGNED_INT);this.depthOfFieldPostProcess.onApply=function(e39){e39.setTextureFromPostProcess(T5fX,k39._currentDepthOfFieldSource);e39.setTexture(C3LX,k39._getDepthTexture());e39.setFloat(H4fX,k39.depthOfFieldDistance);};this.addEffect(new K0.PostProcessRenderEffect(f39.getEngine(),v4fX,function(){return k39.depthOfFieldPostProcess;},!+G3CX.k4CX));},u09.prototype._createMotionBlurPostProcess=function(q39,P39){var e4fX="motionScale";var L4fX="prevViewProjection";var u4fX="inverseViewProjection";var o4fX="HDRMotionBlur";var Z39,o39,y39,R39,B39,F39;Z39=this;d4lX.F4XX(d4lX.I4XX);this.motionBlurPostProcess=new K0.PostProcess(o4fX,X5fX,[u4fX,L4fX,T5dX,e4fX,x4fX],[C3LX],P39,G3CX.X4CX,K0.Texture.BILINEAR_SAMPLINGMODE,q39.getEngine(),!d4lX.z4XX(d4lX.n4XX,G3CX.j4CX),t5fX+this.motionBlurSamples.toFixed(+G3CX.j4CX),K0.Engine.TEXTURETYPE_UNSIGNED_INT);o39=d4lX.I4XX;y39=K0.Matrix.Identity();R39=K0.Matrix.Identity();B39=K0.Matrix.Identity();F39=K0.Vector2.Zero();this.motionBlurPostProcess.onApply=function(O39){(B39=q39.getProjectionMatrix().multiply(q39.getViewMatrix())).invertToRef(R39);O39.setMatrix(u4fX,R39);O39.setMatrix(L4fX,y39);y39=B39;F39.x=Z39.motionBlurPostProcess.width;F39.y=Z39.motionBlurPostProcess.height;O39.setVector2(T5dX,F39);o39=q39.getEngine().getFps()/+x3uX.B1uX;O39.setFloat(e4fX,o39);O39.setFloat(x4fX,Z39.motionStrength);O39.setTexture(C3LX,Z39._getDepthTexture());};this.addEffect(new K0.PostProcessRenderEffect(q39.getEngine(),o4fX,function(){return Z39.motionBlurPostProcess;},!+G3CX.k4CX));},u09.prototype._getDepthTexture=function(){return this._scene.getEngine().getCaps().drawBuffersExtension?this._scene.enableGeometryBufferRenderer().getGBuffer().textures[+G3CX.k4CX]:this._scene.enableDepthRenderer().getDepthMap();},u09.prototype._disposePostProcesses=function(){var t2kX=G3CX;var s39;for(var H79=+t2kX.k4CX;H79Z3A._alphaIndex?+K6kX.j4CX:e3A._alphaIndexZ3A._distanceToCamera?-(K6kX.j4CX|d4lX.I4XX):K6kX.k4CX-d4lX.I4XX;}),K3A.setAlphaMode(v3.Engine.ALPHA_COMBINE),z3A=K6kX.k4CX|d4lX.I4XX;z3A=x8A&&J8A.frame<=M8A&&(G8A?(r8A=J8A.value.clone(),I8A?(Q8A=r8A.getTranslation(),r8A.setTranslation(Q8A.scaleInPlace(N8A))):E8A&&m8A?(Q8A=r8A.getTranslation(),r8A.setTranslation(Q8A.multiplyInPlace(m8A))):r8A=J8A.value):r8A=J8A.value,l8A.push({frame:J8A.frame+j8A,value:r8A}));}return this.animations[E38X.k4CX-d4lX.I4XX].createRange(c8A,x8A+j8A,M8A+j8A),!+E38X.k4CX;},K4A.prototype.translate=function(L8A,z8A,t8A){var n8A,a8A,b8A,C8A;void(E38X.k4CX*d4lX.n4XX)===z8A&&(z8A=c9.Space.LOCAL);n8A=this.getLocalMatrix();if(z8A==c9.Space.LOCAL){n8A.m[+x3uX.I3uX]+=L8A.x,n8A.m[+E38X.o3uX]+=L8A.y,n8A.m[E38X.L3uX-d4lX.I4XX]+=L8A.z;}else{a8A=E38X.X4CX;t8A&&(a8A=t8A.getWorldMatrix());this._skeleton.computeAbsoluteTransforms();b8A=K4A._tmpMats[+E38X.k4CX];d4lX.F4XX(d4lX.I4XX);C8A=K4A._tmpVecs[d4lX.r4XX(d4lX.n4XX,E38X.k4CX)];this._parent&&(t8A&&a8A?(b8A.copyFrom(this._parent.getAbsoluteTransform()),b8A.multiplyToRef(a8A,b8A)):b8A.copyFrom(this._parent.getAbsoluteTransform()));b8A.m[+x3uX.I3uX]=d4lX.I4XX;b8A.m[+E38X.o3uX]=+E38X.k4CX;d4lX.i4XX(d4lX.n4XX);b8A.m[d4lX.r4XX(d4lX.I4XX,E38X.L3uX)]=d4lX.I4XX;b8A.invert();c9.Vector3.TransformCoordinatesToRef(L8A,b8A,C8A);n8A.m[+x3uX.I3uX]+=C8A.x;n8A.m[d4lX.S8CX]+=C8A.y;d4lX.F4XX(d4lX.n4XX);n8A.m[d4lX.z4XX(d4lX.I4XX,E38X.L3uX)]+=C8A.z;}this._markAsDirtyAndDecompose();},K4A.prototype.setPosition=function(u8A,f8A,g8A){var K8A,k8A,p8A,i8A;void+E38X.k4CX===f8A&&(f8A=c9.Space.LOCAL);K8A=this.getLocalMatrix();if(f8A==c9.Space.LOCAL){K8A.m[x3uX.I3uX|d4lX.I4XX]=u8A.x,K8A.m[+E38X.o3uX]=u8A.y,K8A.m[E38X.L3uX|d4lX.I4XX]=u8A.z;}else{k8A=E38X.X4CX;g8A&&(k8A=g8A.getWorldMatrix());this._skeleton.computeAbsoluteTransforms();p8A=K4A._tmpMats[+E38X.k4CX];i8A=K4A._tmpVecs[+E38X.k4CX];this._parent&&(g8A&&k8A?(p8A.copyFrom(this._parent.getAbsoluteTransform()),p8A.multiplyToRef(k8A,p8A)):p8A.copyFrom(this._parent.getAbsoluteTransform()));p8A.invert();c9.Vector3.TransformCoordinatesToRef(u8A,p8A,i8A);d4lX.F4XX(d4lX.w4XX);K8A.m[d4lX.r4XX(d4lX.I4XX,x3uX.I3uX)]=i8A.x;K8A.m[d4lX.S8CX]=i8A.y;K8A.m[d4lX.Q8CX]=i8A.z;}this._markAsDirtyAndDecompose();},K4A.prototype.setAbsolutePosition=function(e8A,Z8A){this.setPosition(e8A,c9.Space.WORLD,Z8A);},K4A.prototype.scale=function(P8A,O8A,T8A,o8A){var B8A,F8A,q8A,H2A;void(E38X.k4CX*d4lX.n4XX)===o8A&&(o8A=!+E38X.j4CX);B8A=this.getLocalMatrix();d4lX.i4XX(d4lX.w4XX);F8A=K4A._tmpMats[d4lX.z4XX(d4lX.I4XX,E38X.k4CX)];c9.Matrix.ScalingToRef(P8A,O8A,T8A,F8A);F8A.multiplyToRef(B8A,B8A);F8A.invert();for(var y8A=E38X.k4CX|d4lX.I4XX,s8A=this.children;y8AD5T.y&&D5T.x>D5T.z&&(this._adjustRoll=a3uX*Math.PI,this._bendAxis.z=p7kX.j4CX-d4lX.I4XX)),this._bone1.length){j5T=this._bone1.getScale();M5T=this._bone2.getScale();this._bone1Length=this._bone1.length*j5T.y*this.mesh.scaling.y;this._bone2Length=this._bone2.length*M5T.y*this.mesh.scaling.y;}else if(this._bone1.children[+p7kX.k4CX]){h5T.computeWorldMatrix(!+p7kX.k4CX);I5T=this._bone2.children[+p7kX.k4CX].getAbsolutePosition(h5T);W5T=this._bone2.getAbsolutePosition(h5T);x5T=this._bone1.getAbsolutePosition(h5T);this._bone1Length=V3.Vector3.Distance(I5T,W5T);this._bone2Length=V3.Vector3.Distance(W5T,x5T);}this._bone1.getRotationMatrixToRef(V3.Space.WORLD,h5T,this._bone1Mat);this.maxAngle=Math.PI;Q5T&&(Q5T.targetMesh&&(this.targetMesh=Q5T.targetMesh,this.targetMesh.computeWorldMatrix(!+p7kX.k4CX)),Q5T.poleTargetMesh?(this.poleTargetMesh=Q5T.poleTargetMesh,this.poleTargetMesh.computeWorldMatrix(!d4lX.I4XX)):Q5T.poleTargetBone?this.poleTargetBone=Q5T.poleTargetBone:this._bone1.getParent()&&(this.poleTargetBone=this._bone1.getParent()),Q5T.poleTargetLocalOffset&&this.poleTargetLocalOffset.copyFrom(Q5T.poleTargetLocalOffset),Q5T.poleAngle&&(this.poleAngle=Q5T.poleAngle),Q5T.bendAxis&&this._bendAxis.copyFrom(Q5T.bendAxis),Q5T.maxAngle&&(this.maxAngle=Q5T.maxAngle),Q5T.slerpAmount&&(this.slerpAmount=Q5T.slerpAmount));}}return Object.defineProperty(V5T.prototype,V63X,{get:function(){return this._maxAngle;},set:function(c5T){this._setMaxAngle(c5T);},enumerable:!d4lX.I4XX,configurable:!(G3CX.k4CX-d4lX.I4XX)}),V5T.prototype._setMaxAngle=function(N5T){var E5T,l5T;N5TMath.PI||G3CX.X4CX==N5T)&&(N5T=Math.PI);this._maxAngle=N5T;E5T=this._bone1Length;l5T=this._bone2Length;this._maxReach=Math.sqrt(E5T*E5T+l5T*l5T-(G3CX.U4CX-d4lX.I4XX)*E5T*l5T*Math.cos(N5T));},V5T.prototype.update=function(){var a7kX=G3CX;var m1CX=229;var k1CX=227;var F5T,g5T,e5T,A5T,b5T,i5T,p5T,f5T,L5T,C5T,q5T,t5T,K5T,n5T,a5T,z5T,o5T,Z5T,u5T,k5T;F5T=this._bone1;if(F5T){g5T=this.targetPosition;e5T=this.poleTargetPosition;d4lX.i4XX(d4lX.n4XX);A5T=V5T._tmpMats[d4lX.z4XX(d4lX.I4XX,a7kX.k4CX)];d4lX.F4XX(d4lX.I4XX);b5T=V5T._tmpMats[d4lX.r4XX(d4lX.n4XX,a7kX.j4CX)];this.targetMesh&&g5T.copyFrom(this.targetMesh.getAbsolutePosition());this.poleTargetBone?this.poleTargetBone.getAbsolutePositionFromLocalToRef(this.poleTargetLocalOffset,this.mesh,e5T):this.poleTargetMesh&&V3.Vector3.TransformCoordinatesToRef(this.poleTargetLocalOffset,this.poleTargetMesh.getWorldMatrix(),e5T);i5T=V5T._tmpVecs[+a7kX.k4CX];d4lX.i4XX(d4lX.I4XX);p5T=V5T._tmpVecs[d4lX.z4XX(d4lX.n4XX,a7kX.j4CX)];f5T=V5T._tmpVecs[+a7kX.U4CX];L5T=V5T._tmpVecs[+a7kX.l4CX];C5T=V5T._tmpVecs[+a7kX.t4CX];q5T=V5T._tmpQuat;F5T.getAbsolutePositionToRef(this.mesh,i5T);e5T.subtractToRef(i5T,C5T);+a7kX.k4CX==C5T.x&&+a7kX.k4CX==C5T.y&&(a7kX.k4CX|d4lX.I4XX)==C5T.z?C5T.y=+a7kX.j4CX:C5T.normalize();g5T.subtractToRef(i5T,L5T);L5T.normalize();V3.Vector3.CrossToRef(L5T,C5T,p5T);p5T.normalize();V3.Vector3.CrossToRef(L5T,p5T,f5T);f5T.normalize();V3.Matrix.FromXYZAxesToRef(f5T,L5T,p5T,A5T);t5T=this._bone1Length;K5T=this._bone2Length;n5T=V3.Vector3.Distance(i5T,g5T);(a7kX.k4CX|d4lX.I4XX)this._maxPitch?(m6T.y=this._maxPitchTan*r6T,C6T=this._maxPitch):N6Tthis._maxYaw||v6TMath.PI?this._isAngleBetween(v6T,this._maxYaw,this._midYawConstraint)?(m6T.z=this._maxYawCos*r6T,m6T.x=this._maxYawSin*r6T,h6T=this._maxYaw):this._isAngleBetween(v6T,this._midYawConstraint,this._minYaw)&&(m6T.z=this._minYawCos*r6T,m6T.x=this._minYawSin*r6T,h6T=this._minYaw):v6T>this._maxYaw?(m6T.z=this._maxYawCos*r6T,m6T.x=this._maxYawSin*r6T,h6T=this._maxYaw):v6TMath.PI){d4lX.i4XX(d4lX.n4XX);V6T=y5T._tmpVecs[d4lX.r4XX(d4lX.I4XX,T78X.Y4CX)];V6T.copyFrom(P9.Axis.Z);this._transformYawPitch&&P9.Vector3.TransformCoordinatesToRef(V6T,this._transformYawPitchInv,V6T);l6T=y5T._tmpMats[+T78X.t4CX];this._boneQuat.toRotationMatrix(l6T);this.mesh.getWorldMatrix().multiplyToRef(l6T,l6T);P9.Vector3.TransformCoordinatesToRef(V6T,l6T,V6T);P9.Vector3.TransformCoordinatesToRef(V6T,E6T,V6T);M6T=Math.atan2(V6T.x,V6T.z);K6T=this._getAngleBetween(M6T,v6T);if(this._getAngleBetween(M6T,this._midYawConstraint)Math.PI?p6T-=(T78X.U4CX-d4lX.I4XX)*Math.PI:p6T<-Math.PI&&(p6T+=+T78X.U4CX*Math.PI),p6T;},y5T.prototype._getAngleBetween=function(k6T,f6T){var g6T;g6T=+T78X.k4CX;return(g6T=(k6T=(k6T%=T78X.U4CX*d4lX.n4XX*Math.PI)<+T78X.k4CX?k6T+d4lX.w4XX*Math.PI:k6T)<(f6T=(f6T%=+T78X.U4CX*Math.PI)<(T78X.k4CX|d4lX.I4XX)?f6T+d4lX.w4XX*Math.PI:f6T)?f6T-k6T:k6T-f6T)>Math.PI&&(g6T=+T78X.U4CX*Math.PI-g6T),g6T;},y5T.prototype._isAngleBetween=function(e6T,Z6T,q6T){if(e6T=(e6T%=d4lX.w4XX*Math.PI)Math.PI;){d4lX.i4XX(H3kX.J7CX);var l3RR=d4lX.r4XX(d4lX.l8CX,d4lX.y8CX,v3CX);U4T-=l3RR*Math.PI;}m4T=U4T/Math.PI;v4T=G4T/Math.PI;d4lX.i4XX(H3kX.o3CX);m4T=d4lX.z4XX(m4T,a3uX,H3kX.s3uX);d4lX.F4XX(d4lX.I4XX);T7T=Math.round(d4lX.z4XX(H4T,m4T));T7T<(H3kX.k4CX|d4lX.I4XX)?T7T=+H3kX.k4CX:H4T<=T7T&&(T7T=H4T-(H3kX.j4CX-d4lX.I4XX));d4lX.i4XX(d4lX.I4XX);Y4T=Math.round(d4lX.z4XX(S4T,v4T));Y4Tn4T.x&&(n4T.x=C4T.x);C4T.yn4T.y&&(n4T.y=C4T.y);}),{min:b4T,max:n4T,width:n4T.x-b4T.x,height:n4T.y-b4T.y};},x4T;}();h4T=function(){function L4T(){}return L4T.Rectangle=function(a4T,z4T,t4T,K4T){return[new w4T.Vector2(a4T,z4T),new w4T.Vector2(t4T,z4T),new w4T.Vector2(t4T,K4T),new w4T.Vector2(a4T,K4T)];},L4T.Circle=function(e4T,u4T,k4T,p4T){var T84X=G3CX;void(T84X.k4CX*d4lX.n4XX)===u4T&&(u4T=T84X.k4CX|d4lX.I4XX);void d4lX.I4XX===k4T&&(k4T=T84X.k4CX*d4lX.n4XX);void+T84X.k4CX===p4T&&(p4T=T84X.b4CX|d4lX.I4XX);for(var f4T=new Array(),i4T=T84X.k4CX*d4lX.n4XX,Z4T=T84X.U4CX*d4lX.n4XX*Math.PI/p4T,g4T=+T84X.k4CX;g4Tu8T.elements.length-+r84X.j4CX?u8T.elements[+r84X.k4CX]:u8T.elements[p8T+d4lX.n4XX];i8T.push(z8T.x,+r84X.k4CX,z8T.y);i8T.push(z8T.x,-e8T,z8T.y);i8T.push(t8T.x,r84X.k4CX*d4lX.n4XX,t8T.y);i8T.push(t8T.x,-e8T,t8T.y);Z8T=new w4T.Vector3(z8T.x,+r84X.k4CX,z8T.y);g8T=new w4T.Vector3(t8T.x,+r84X.k4CX,t8T.y).subtract(Z8T);d4lX.i4XX(d4lX.I4XX);q8T=new w4T.Vector3(+r84X.k4CX,d4lX.r4XX(d4lX.n4XX,r84X.j4CX),+r84X.k4CX);n8T=w4T.Vector3.Cross(g8T,q8T);n8T=n8T.normalize();k8T.push(K8T/f8T.width,+r84X.k4CX);k8T.push(K8T/f8T.width,r84X.j4CX*d4lX.n4XX);K8T+=g8T.length();k8T.push(K8T/f8T.width,r84X.k4CX*d4lX.n4XX);k8T.push(K8T/f8T.width,r84X.j4CX|d4lX.I4XX);F8T?(a8T.push(n8T.x,n8T.y,n8T.z),a8T.push(n8T.x,n8T.y,n8T.z),a8T.push(n8T.x,n8T.y,n8T.z),a8T.push(n8T.x,n8T.y,n8T.z),L8T.push(C8T),L8T.push(C8T+d4lX.w4XX),L8T.push(C8T+ +r84X.j4CX),L8T.push(C8T+(r84X.j4CX|d4lX.I4XX)),L8T.push(C8T+d4lX.w4XX),L8T.push(C8T+(r84X.l4CX-d4lX.I4XX))):(a8T.push(-n8T.x,-n8T.y,-n8T.z),a8T.push(-n8T.x,-n8T.y,-n8T.z),a8T.push(-n8T.x,-n8T.y,-n8T.z),a8T.push(-n8T.x,-n8T.y,-n8T.z),L8T.push(C8T),L8T.push(C8T+r84X.j4CX*d4lX.n4XX),L8T.push(C8T+d4lX.w4XX),L8T.push(C8T+ +r84X.j4CX),L8T.push(C8T+d4lX.P4XX),L8T.push(C8T+d4lX.w4XX));C8T+=d4lX.J4XX;}},O4T;}();w4T.PolygonMeshBuilder=D4T;}(Q0||(Q0={})));X3=Q0||(Q0={});G6Z=+W4lX.k4CX;n9Z=function(){function o8T(y8T,R8T,B8T){this.pos=y8T;this.normal=R8T;this.uv=B8T;}return o8T.prototype.clone=function(){return new o8T(this.pos.clone(),this.normal.clone(),this.uv.clone());},o8T.prototype.flip=function(){d4lX.i4XX(d4lX.w4XX);this.normal=this.normal.scale(-d4lX.z4XX(d4lX.I4XX,G3CX.j4CX));},o8T.prototype.interpolate=function(P8T,O8T){return new o8T(X3.Vector3.Lerp(this.pos,P8T.pos,O8T),X3.Vector3.Lerp(this.normal,P8T.normal,O8T),X3.Vector2.Lerp(this.uv,P8T.uv,O8T));},o8T;}();C9Z=function(){function s8T(T8T,H2T){this.normal=T8T;this.w=H2T;}return s8T.FromPoints=function(U2T,m2T,r2T){var Y2T,d2T,S2T;Y2T=r2T.subtract(U2T);d2T=m2T.subtract(U2T);if(G3CX.k4CX-d4lX.I4XX===Y2T.lengthSquared()||G3CX.k4CX-d4lX.I4XX===d2T.lengthSquared()){return G3CX.X4CX;}S2T=X3.Vector3.Normalize(X3.Vector3.Cross(Y2T,d2T));return new s8T(S2T,X3.Vector3.Dot(S2T,U2T));},s8T.prototype.clone=function(){return new s8T(this.normal.clone(),this.w);},s8T.prototype.flip=function(){this.normal.scaleInPlace(-+G3CX.j4CX);this.w=-this.w;},s8T.prototype.splitPolygon=function(J2T,A2T,l2T,N2T,c2T){var l3kX=G3CX;var G2T,h2T,I2T,D2T,W2T,X2T,V2T,Q2T,x2T,w2T,E2T,v2T,M2T,j2T;d4lX.i4XX(d4lX.n4XX);I2T=d4lX.r4XX(d4lX.I4XX,l3kX.k4CX);D2T=[];for(G2T=l3kX.k4CX|d4lX.I4XX;G2Tg62.x&&this._positionXg62.y&&(this._positionY,g62.y,g62.height),!+G3CX.k4CX);},C62.prototype._isVisible=function(){var Z62,F62,o62,q62;if(!this._isEnabled||!this._scene.activeCamera){return!+G3CX.j4CX;}Z62=this.getEmitterPosition().subtract(this._scene.activeCamera.globalPosition);F62=Z62.length();Z62.normalize();o62=new g7.Ray(this._scene.activeCamera.globalPosition,Z62);q62=this._scene.pickWithRay(o62,this.meshesSelectionPredicate,!(G3CX.k4CX*d4lX.n4XX));return!q62||!q62.hit||q62.distance>F62;},C62.prototype.render=function(){var T8kX=G3CX;var W5CX=2519;var U02,S02,R62,y62,O62,P62,T62,H02,m02,Y02,B62,r02,J02,G02,v02,w02,V02,d02;if(!this._effect.isReady()||!this._scene.activeCamera){return!d4lX.n4XX;}R62=this._scene.getEngine();y62=this._scene.activeCamera.viewport.toGlobal(R62.getRenderWidth(!+T8kX.k4CX),R62.getRenderHeight(!+T8kX.k4CX));if(!this.computeEffectivePosition(y62)){return!d4lX.n4XX;}if(!this._isVisible()){return!+T8kX.j4CX;}U02=this._positionXy62.x+y62.width-this.borderLimit?this._positionX-y62.x-y62.width+this.borderLimit:+T8kX.k4CX;O62=(S02=this._positionYy62.y+y62.height-this.borderLimit?this._positionY-y62.y-y62.height+this.borderLimit:T8kX.k4CX-d4lX.I4XX)this.borderLimit&&(O62=this.borderLimit);P62=(T8kX.j4CX|d4lX.I4XX)-g7.Scalar.Clamp(O62/this.borderLimit,+T8kX.k4CX,T8kX.j4CX|d4lX.I4XX);if(P62<+T8kX.k4CX){return!+T8kX.j4CX;}d4lX.n4XXthis._centripetalForceThreshold&&(v82=v82.negate()),h82>this._centripetalForceThreshold){I82=v82.x*this._strength/(Q74X.Y4CX|d4lX.I4XX),x82=v82.y*this._updraftMultiplier,M82=v82.z*this._strength/+Q74X.Y4CX;}else{I82=(j82.x+v82.x)/d4lX.w4XX,x82=this._originTop.y*this._updraftMultiplier,M82=(j82.z+v82.z)/+Q74X.U4CX;}W82=new X72.Vector3(I82,x82,M82);return{force:W82=W82.multiplyByFloats(this._strength,this._strength,this._strength),contactPoint:V82};},U82.prototype._tick=function(){var N82;N82=this;this._physicsEngine.getImpostors().forEach(function(l82){var E82;E82=N82.getImpostorForceAndContactPoint(l82);E82&&l82.applyForce(E82.force,E82.contactPoint);});},U82.prototype._prepareCylinder=function(){var V13X="vortexEventCylinder";this._cylinder||(this._cylinder=X72.MeshBuilder.CreateCylinder(V13X,{height:this._height,diameter:+G3CX.U4CX*this._radius},this._scene),this._cylinder.isVisible=!(G3CX.j4CX-d4lX.I4XX));},U82.prototype._intersectsWithCylinder=function(b82){var A82;A82=b82.object;return this._prepareCylinder(),this._cylinder.position=this._cylinderPosition,this._cylinder.intersectsMesh(A82,!(G3CX.k4CX|d4lX.I4XX));},U82;}();X72.PhysicsVortexEvent=N72;(I72=W72=X72.PhysicsRadialImpulseFalloff||(X72.PhysicsRadialImpulseFalloff={}))[I72.Constant=+G3CX.k4CX]=z13X;I72[I72.Linear=d4lX.n4XX]=r13X;d4lX.F4XX(d4lX.w4XX);(j72=x72=X72.PhysicsUpdraftMode||(X72.PhysicsUpdraftMode={}))[j72.Center=d4lX.z4XX(d4lX.I4XX,G3CX.k4CX)]=i13X;d4lX.i4XX(d4lX.w4XX);j72[j72.Perpendicular=d4lX.r4XX(d4lX.I4XX,G3CX.j4CX)]=F13X;}(Q0||(Q0={})));S3=Q0||(Q0={});Z9Z=function(){function n82(C82,L82){var B4PX=G3CX;var P13X="CannonJS is not available. Please make sure you included the js file.";var w13X=.7071067811865475;var n13X=".7071067811865475";var I13X="CannonJSPlugin";void+B4PX.k4CX===C82&&(C82=!+B4PX.k4CX);void d4lX.I4XX===L82&&(L82=+B4PX.u3uX);this._useDeltaForWorldStep=C82;this.name=I13X;this._physicsMaterials=new Array();d4lX.i4XX(d4lX.j8CX);this._fixedTimeStep=d4lX.r4XX(d4lX.n4XX,x3uX.B1uX);this.BJSCANNON=C6Z;d4lX.F4XX(d4lX.w4XX);this._minus90X=new S3.Quaternion(-+n13X,+B4PX.k4CX,d4lX.r4XX(d4lX.I4XX,B4PX.k4CX),w13X);d4lX.F4XX(d4lX.I4XX);this._plus90X=new S3.Quaternion(d4lX.z4XX(d4lX.n4XX,n13X),d4lX.r4XX(d4lX.n4XX,B4PX.k4CX),d4lX.r4XX(d4lX.n4XX,B4PX.k4CX),w13X);this._tmpPosition=S3.Vector3.Zero();this._tmpDeltaPosition=S3.Vector3.Zero();this._tmpUnityRotation=new S3.Quaternion();this.isSupported()?(this._extendNamespace(),this.world=new this.BJSCANNON.World(),this.world.broadphase=new this.BJSCANNON.NaiveBroadphase(),this.world.solver.iterations=L82):S3.Tools.Error(P13X);}return n82.prototype.setGravity=function(a82){this.world.gravity.copy(a82);},n82.prototype.setTimeStep=function(z82){this._fixedTimeStep=z82;},n82.prototype.getTimeStep=function(){return this._fixedTimeStep;},n82.prototype.executeStep=function(t82,K82){this.world.step(this._fixedTimeStep,this._useDeltaForWorldStep?t82:G3CX.k4CX-d4lX.I4XX,+G3CX.l4CX);},n82.prototype.applyImpulse=function(f82,p82,i82){var u82,k82;u82=new this.BJSCANNON.Vec3(i82.x,i82.y,i82.z);k82=new this.BJSCANNON.Vec3(p82.x,p82.y,p82.z);f82.physicsBody.applyImpulse(k82,u82);},n82.prototype.applyForce=function(F82,g82,e82){var Z82,q82;Z82=new this.BJSCANNON.Vec3(e82.x,e82.y,e82.z);q82=new this.BJSCANNON.Vec3(g82.x,g82.y,g82.z);F82.physicsBody.applyForce(q82,Z82);},n82.prototype.generatePhysicsBody=function(o82){var O23X="angularVelocity";var f23X="velocity";var y23X="torque";var g23X="force";var K23X="nativeOptions";var J13X="mat-";var O82,y82,s82,P82,R82;if(o82.parent){o82.physicsBody&&(this.removePhysicsBody(o82),o82.forceUpdate());}else{if(o82.isBodyInitRequired()){O82=this._createShape(o82);y82=o82.physicsBody;y82&&this.removePhysicsBody(o82);s82=this._addMaterial(J13X+o82.uniqueId,o82.getParam(Y1rX),o82.getParam(H13X));P82={mass:o82.getParam(Q1rX),material:s82};R82=o82.getParam(K23X);for(var B82 in R82){R82.hasOwnProperty(B82)&&(P82[B82]=R82[B82]);}o82.physicsBody=new this.BJSCANNON.Body(P82);o82.physicsBody.addEventListener(k3dX.R23X,o82.onCollide);this.world.addEventListener(k3dX.W23X,o82.beforeStep);this.world.addEventListener(k3dX.d23X,o82.afterStep);o82.physicsBody.addShape(O82);this.world.add(o82.physicsBody);y82&&[g23X,y23X,f23X,O23X].forEach(function(T82){o82.physicsBody[T82].copy(y82[T82]);});this._processChildMeshes(o82);}this._updatePhysicsBodyTransformation(o82);}},n82.prototype._processChildMeshes=function(H22){var U22,d22,Y22,S22;U22=this;d22=H22.object.getChildMeshes?H22.object.getChildMeshes(!(G3CX.k4CX*d4lX.n4XX)):[];Y22=H22.object.rotationQuaternion;if(d22.length){S22=function(v22,r22){var m22,G22,J22;if(Y22&&r22.rotationQuaternion){m22=r22.getPhysicsImpostor();if(m22)if(m22.parent!==H22){G22=r22.getAbsolutePosition().subtract(H22.object.getAbsolutePosition());J22=r22.rotationQuaternion.multiply(S3.Quaternion.Inverse(Y22));m22.physicsBody&&(U22.removePhysicsBody(m22),m22.physicsBody=G3CX.X4CX);m22.parent=H22;m22.resetUpdateFlags();H22.physicsBody.addShape(U22._createShape(m22),new U22.BJSCANNON.Vec3(G22.x,G22.y,G22.z),new U22.BJSCANNON.Quaternion(J22.x,J22.y,J22.z,J22.w));H22.physicsBody.mass+=m22.getParam(Q1rX);}Y22.multiplyInPlace(r22.rotationQuaternion);r22.getChildMeshes(!(G3CX.k4CX|d4lX.I4XX)).filter(function(w22){return!!w22.physicsImpostor;}).forEach(S22.bind(U22,r22.getAbsolutePosition()));}};d22.filter(function(V22){return!!V22.physicsImpostor;}).forEach(S22.bind(this,H22.object.getAbsolutePosition()));}},n82.prototype.removePhysicsBody=function(Q22){Q22.physicsBody.removeEventListener(k3dX.R23X,Q22.onCollide);this.world.removeEventListener(k3dX.W23X,Q22.beforeStep);this.world.removeEventListener(k3dX.d23X,Q22.afterStep);this.world.remove(Q22.physicsBody);},n82.prototype.generateJoint=function(D22){var Y4PX=G3CX;var j22,M22,X22,h22,W22,I22;j22=D22.mainImpostor.physicsBody;M22=D22.connectedImpostor.physicsBody;if(j22&&M22){h22=D22.joint.jointData;W22={pivotA:h22.mainPivot?new this.BJSCANNON.Vec3().copy(h22.mainPivot):Y4PX.X4CX,pivotB:h22.connectedPivot?new this.BJSCANNON.Vec3().copy(h22.connectedPivot):Y4PX.X4CX,axisA:h22.mainAxis?new this.BJSCANNON.Vec3().copy(h22.mainAxis):Y4PX.X4CX,axisB:h22.connectedAxis?new this.BJSCANNON.Vec3().copy(h22.connectedAxis):Y4PX.X4CX,maxForce:h22.nativeParams.maxForce,collideConnected:!!h22.collision};switch(D22.joint.type){case S3.PhysicsJoint.HingeJoint:case S3.PhysicsJoint.Hinge2Joint:X22=new this.BJSCANNON.HingeConstraint(j22,M22,W22);break;case S3.PhysicsJoint.DistanceJoint:X22=new this.BJSCANNON.DistanceConstraint(j22,M22,h22.maxDistance||+Y4PX.U4CX);break;case S3.PhysicsJoint.SpringJoint:I22=h22;X22=new this.BJSCANNON.Spring(j22,M22,{restLength:I22.length,stiffness:I22.stiffness,damping:I22.damping,localAnchorA:W22.pivotA,localAnchorB:W22.pivotB});break;case S3.PhysicsJoint.LockJoint:X22=new this.BJSCANNON.LockConstraint(j22,M22,W22);break;case S3.PhysicsJoint.PointToPointJoint:case S3.PhysicsJoint.BallAndSocketJoint:default:X22=new this.BJSCANNON.PointToPointConstraint(j22,W22.pivotA,M22,W22.pivotA,W22.maxForce);}X22.collideConnected=!!h22.collision;D22.joint.physicsJoint=X22;D22.joint.type!==S3.PhysicsJoint.SpringJoint?this.world.addConstraint(X22):(D22.joint.jointData.forceApplicationCallback=D22.joint.jointData.forceApplicationCallback||function(){X22.applyForce();},D22.mainImpostor.registerAfterPhysicsStep(D22.joint.jointData.forceApplicationCallback));}},n82.prototype.removeJoint=function(x22){x22.joint.type!==S3.PhysicsJoint.SpringJoint?this.world.removeConstraint(x22.joint.physicsJoint):x22.mainImpostor.unregisterAfterPhysicsStep(x22.joint.jointData.forceApplicationCallback);},n82.prototype._addMaterial=function(b22,l22,A22){var N22,E22,c22;for(N22=G3CX.k4CX*d4lX.n4XX;N22c9dX*j5H));N5H++);this.time+=I5H;for(var A5H=this.time%j5H/j5H,M5H=X5H,E5H=this.bodies,c5H=+C64X.k4CX;c5H!==E5H.length;c5H++){W5H=E5H[c5H];W5H.type!==D5H.Body.STATIC&&W5H.sleepState!==D5H.Body.SLEEPING?(W5H.position.vsub(W5H.previousPosition,M5H),M5H.scale(A5H,M5H),W5H.position.vadd(M5H,W5H.interpolatedPosition)):(W5H.interpolatedPosition.copy(W5H.position),W5H.interpolatedQuaternion.copy(W5H.quaternion));}}};},n82;}();S3.CannonJSPlugin=Z9Z;O3=Q0||(Q0={});F9Z=function(){function n5H(C5H){var Y23X="OimoJSPlugin";this.name=Y23X;this._tmpImpostorsArray=[];this._tmpPositionVector=O3.Vector3.Zero();this.BJSOIMO=L6Z;this.world=new this.BJSOIMO.World({iterations:C5H});this.world.clear();}return n5H.prototype.setGravity=function(L5H){this.world.gravity.copy(L5H);},n5H.prototype.setTimeStep=function(a5H){this.world.timeStep=a5H;},n5H.prototype.getTimeStep=function(){return this.world.timeStep;},n5H.prototype.executeStep=function(u5H,p5H){var i5H,t5H,K5H;i5H=this;p5H.forEach(function(k5H){k5H.beforeStep();});this.world.step();p5H.forEach(function(f5H){f5H.afterStep();i5H._tmpImpostorsArray[f5H.uniqueId]=f5H;});for(var z5H=this.world.contacts;G3CX.X4CX!==z5H;)if(!z5H.touching||z5H.body1.sleeping||z5H.body2.sleeping){t5H=this._tmpImpostorsArray[+z5H.body1.name];K5H=this._tmpImpostorsArray[+z5H.body2.name];t5H&&K5H&&(t5H.onCollide({body:K5H.physicsBody}),K5H.onCollide({body:t5H.physicsBody}));z5H=z5H.next;}else{z5H=z5H.next;}},n5H.prototype.applyImpulse=function(g5H,Z5H,q5H){var e5H;e5H=g5H.physicsBody.mass;g5H.physicsBody.applyImpulse(q5H.scale(this.world.invScale),Z5H.scale(this.world.invScale*e5H));},n5H.prototype.applyForce=function(F5H,o5H,y5H){var t23X="Oimo doesn't support applying force. Using impule instead.";O3.Tools.Warn(t23X);this.applyImpulse(F5H,o5H,y5H);},n5H.prototype.generatePhysicsBody=function(B5H){var P5PX=G3CX;var O5H,R5H,s5H,P5H,T5H,H6H;O5H=this;if(B5H.parent){B5H.physicsBody&&(this.removePhysicsBody(B5H),B5H.forceUpdate());}else{if(B5H.isBodyInitRequired()){R5H={name:B5H.uniqueId,config:[B5H.getParam(Q1rX)||P5PX.j4CX-d4lX.I4XX,B5H.getParam(Y1rX),B5H.getParam(H13X)],size:[],type:[],pos:[],posShape:[],rot:[],rotShape:[],move:+P5PX.k4CX!==B5H.getParam(Q1rX),density:B5H.getParam(Q1rX),friction:B5H.getParam(Y1rX),restitution:B5H.getParam(H13X),world:this.world};s5H=[B5H];(H6H=B5H.object).getChildMeshes&&H6H.getChildMeshes().forEach(function(U6H){U6H.physicsImpostor&&s5H.push(U6H.physicsImpostor);});P5H=function(Y6H){return Math.max(Y6H,O3.PhysicsEngine.Epsilon);};T5H=new O3.Quaternion();s5H.forEach(function(S6H){var v64X=G3CX;var k23X="cylinder";var j23X="sphere";var X23X="No Particle support in OIMO.js. using SphereImpostor instead";var l23X="57.29577951308232";var G6H,v6H,d6H,w6H,m6H,J6H,X6H,W6H,h6H,V6H,Q6H,r6H,D6H;if(S6H.object.rotationQuaternion){G6H=S6H.object.rotationQuaternion;T5H=G6H.clone();v6H=G6H.toEulerAngles();d6H=S6H.getObjectExtendSize();d4lX.i4XX(d4lX.w4XX);w6H=d4lX.z4XX(d4lX.I4XX,l23X);if(S6H===B5H){m6H=B5H.getObjectCenter();B5H.object.getAbsolutePivotPoint().subtractToRef(m6H,O5H._tmpPositionVector);O5H._tmpPositionVector.divideInPlace(B5H.object.scaling);R5H.pos.push(m6H.x);R5H.pos.push(m6H.y);R5H.pos.push(m6H.z);d4lX.i4XX(d4lX.w4XX);R5H.posShape.push(+v64X.k4CX,d4lX.I4XX,d4lX.r4XX(d4lX.I4XX,v64X.k4CX));R5H.rot.push(d4lX.I4XX);d4lX.F4XX(d4lX.w4XX);R5H.rot.push(d4lX.z4XX(d4lX.I4XX,v64X.k4CX));R5H.rot.push(+v64X.k4CX);R5H.rotShape.push(+v64X.k4CX,d4lX.I4XX,d4lX.I4XX);}else{J6H=S6H.object.getAbsolutePosition().subtract(B5H.object.getAbsolutePosition());R5H.posShape.push(J6H.x);R5H.posShape.push(J6H.y);R5H.posShape.push(J6H.z);d4lX.i4XX(d4lX.w4XX);R5H.pos.push(d4lX.I4XX,d4lX.I4XX,d4lX.r4XX(d4lX.I4XX,v64X.k4CX));d4lX.i4XX(d4lX.w4XX);R5H.rot.push(d4lX.r4XX(d4lX.I4XX,v64X.k4CX));R5H.rot.push(+v64X.k4CX);R5H.rot.push(+v64X.k4CX);R5H.rotShape.push(v6H.x*w6H);R5H.rotShape.push(v6H.y*w6H);R5H.rotShape.push(v6H.z*w6H);}switch(S6H.type){case O3.PhysicsImpostor.ParticleImpostor:O3.Tools.Warn(X23X);case O3.PhysicsImpostor.SphereImpostor:X6H=d6H.x,W6H=d6H.y,h6H=d6H.z,V6H=Math.max(P5H(X6H),P5H(W6H),P5H(h6H))/d4lX.w4XX;R5H.type.push(j23X),R5H.size.push(V6H),R5H.size.push(V6H),R5H.size.push(V6H);break;case O3.PhysicsImpostor.CylinderImpostor:Q6H=P5H(d6H.x)/(v64X.U4CX|d4lX.I4XX),r6H=P5H(d6H.y);R5H.type.push(k23X),R5H.size.push(Q6H),R5H.size.push(r6H),R5H.size.push(r6H);break;case O3.PhysicsImpostor.PlaneImpostor:case O3.PhysicsImpostor.BoxImpostor:default:Q6H=P5H(d6H.x),r6H=P5H(d6H.y);D6H=P5H(d6H.z);R5H.type.push(k3dX.B23X),R5H.size.push(Q6H),R5H.size.push(r6H),R5H.size.push(D6H);}S6H.object.rotationQuaternion=G6H;}});B5H.physicsBody=this.world.add(R5H);B5H.physicsBody.resetQuaternion(T5H);B5H.physicsBody.updatePosition(+P5PX.k4CX);}else{d4lX.i4XX(d4lX.I4XX);this._tmpPositionVector.copyFromFloats(+P5PX.k4CX,d4lX.z4XX(d4lX.n4XX,P5PX.k4CX),d4lX.I4XX);}B5H.setDeltaPosition(this._tmpPositionVector);}},n5H.prototype.removePhysicsBody=function(j6H){this.world.removeRigidBody(j6H.physicsBody);},n5H.prototype.generateJoint=function(N6H){var a23X="jointHinge";var s23X="jointWheel";var q23X="jointSlide";var E23X="jointPrisme";var D23X="jointDistance";var Z23X="OIMO.js doesn't support Spring Constraint. Simulating using DistanceJoint instead";var m23X="jointBall";var E6H,l6H,c6H,M6H,I6H,x6H,A6H;E6H=N6H.mainImpostor.physicsBody;l6H=N6H.connectedImpostor.physicsBody;if(E6H&&l6H){M6H=N6H.joint.jointData;I6H=M6H.nativeParams||{};x6H={body1:E6H,body2:l6H,axe1:I6H.axe1||(M6H.mainAxis?M6H.mainAxis.asArray():G3CX.X4CX),axe2:I6H.axe2||(M6H.connectedAxis?M6H.connectedAxis.asArray():G3CX.X4CX),pos1:I6H.pos1||(M6H.mainPivot?M6H.mainPivot.asArray():G3CX.X4CX),pos2:I6H.pos2||(M6H.connectedPivot?M6H.connectedPivot.asArray():G3CX.X4CX),min:I6H.min,max:I6H.max,collision:I6H.collision||M6H.collision,spring:I6H.spring,world:this.world};switch(N6H.joint.type){case O3.PhysicsJoint.BallAndSocketJoint:c6H=m23X;break;case O3.PhysicsJoint.SpringJoint:O3.Tools.Warn(Z23X);A6H=M6H;x6H.min=A6H.length||x6H.min,x6H.max=Math.max(x6H.min,x6H.max);case O3.PhysicsJoint.DistanceJoint:c6H=D23X,x6H.max=M6H.maxDistance;break;case O3.PhysicsJoint.PrismaticJoint:c6H=E23X;break;case O3.PhysicsJoint.SliderJoint:c6H=q23X;break;case O3.PhysicsJoint.WheelJoint:c6H=s23X;break;case O3.PhysicsJoint.HingeJoint:default:c6H=a23X;}x6H.type=c6H;N6H.joint.physicsJoint=this.world.add(x6H);}},n5H.prototype.removeJoint=function(b6H){try{this.world.removeJoint(b6H.joint.physicsJoint);}catch(n6H){O3.Tools.Warn(n6H);}},n5H.prototype.isSupported=function(){return void+G3CX.k4CX!==this.BJSOIMO;},n5H.prototype.setTransformationFromPhysicsBody=function(C6H){C6H.physicsBody.sleeping||(C6H.object.position.copyFrom(C6H.physicsBody.getPosition()),C6H.object.rotationQuaternion&&C6H.object.rotationQuaternion.copyFrom(C6H.physicsBody.getQuaternion()));},n5H.prototype.setPhysicsBodyTransformation=function(a6H,z6H,t6H){var L6H;L6H=a6H.physicsBody;L6H.position.copy(z6H);L6H.orientation.copy(t6H);L6H.syncShapes();L6H.awake();},n5H.prototype.setLinearVelocity=function(K6H,p6H){K6H.physicsBody.linearVelocity.copy(p6H);},n5H.prototype.setAngularVelocity=function(i6H,u6H){i6H.physicsBody.angularVelocity.copy(u6H);},n5H.prototype.getLinearVelocity=function(f6H){var k6H;k6H=f6H.physicsBody.linearVelocity;return k6H?new O3.Vector3(k6H.x,k6H.y,k6H.z):G3CX.X4CX;},n5H.prototype.getAngularVelocity=function(e6H){var g6H;g6H=e6H.physicsBody.angularVelocity;return g6H?new O3.Vector3(g6H.x,g6H.y,g6H.z):G3CX.X4CX;},n5H.prototype.setBodyMass=function(q6H,F6H){var v1CX=241;var Z6H;d4lX.F4XX(v1CX);Z6H=d4lX.r4XX(G3CX.k4CX,d4lX.I4XX,F6H);q6H.physicsBody.shapes.density=Z6H?G3CX.j4CX*d4lX.n4XX:F6H;q6H.physicsBody.setupMass(Z6H?G3CX.U4CX*d4lX.n4XX:G3CX.j4CX*d4lX.n4XX);},n5H.prototype.getBodyMass=function(o6H){return o6H.physicsBody.shapes.density;},n5H.prototype.getBodyFriction=function(y6H){return y6H.physicsBody.shapes.friction;},n5H.prototype.setBodyFriction=function(R6H,B6H){R6H.physicsBody.shapes.friction=B6H;},n5H.prototype.getBodyRestitution=function(P6H){return P6H.physicsBody.shapes.restitution;},n5H.prototype.setBodyRestitution=function(O6H,s6H){O6H.physicsBody.shapes.restitution=s6H;},n5H.prototype.sleepBody=function(T6H){T6H.physicsBody.sleep();},n5H.prototype.wakeUpBody=function(H0H){H0H.physicsBody.awake();},n5H.prototype.updateDistanceJoint=function(U0H,d0H,Y0H){U0H.physicsJoint.limitMotor.upperLimit=d0H;void+G3CX.k4CX!==Y0H&&(U0H.physicsJoint.limitMotor.lowerLimit=Y0H);},n5H.prototype.setMotor=function(S0H,r0H,J0H,G0H){var m0H;m0H=G0H?S0H.physicsJoint.rotationalLimitMotor2:S0H.physicsJoint.rotationalLimitMotor1||S0H.physicsJoint.rotationalLimitMotor||S0H.physicsJoint.limitMotor;m0H&&m0H.setMotor(r0H,J0H);},n5H.prototype.setLimit=function(v0H,V0H,Q0H,h0H){var w0H;w0H=h0H?v0H.physicsJoint.rotationalLimitMotor2:v0H.physicsJoint.rotationalLimitMotor1||v0H.physicsJoint.rotationalLimitMotor||v0H.physicsJoint.limitMotor;w0H&&w0H.setLimit(V0H,void d4lX.I4XX===Q0H?-V0H:Q0H);},n5H.prototype.syncMeshWithImpostor=function(D0H,W0H){var X0H;X0H=W0H.physicsBody;D0H.position.x=X0H.position.x;D0H.position.y=X0H.position.y;D0H.position.z=X0H.position.z;D0H.rotationQuaternion&&(D0H.rotationQuaternion.x=X0H.orientation.x,D0H.rotationQuaternion.y=X0H.orientation.y,D0H.rotationQuaternion.z=X0H.orientation.z,D0H.rotationQuaternion.w=X0H.orientation.s);},n5H.prototype.getRadius=function(j0H){return j0H.physicsBody.shapes.radius;},n5H.prototype.getBoxSizeToRef=function(x0H,I0H){var D5CX=8064;var a0CX=504;var M0H;M0H=x0H.physicsBody.shapes;I0H.x=(G3CX.U4CX-d4lX.I4XX)*M0H.halfWidth;d4lX.i4XX(d4lX.E8CX);var q2RR=d4lX.r4XX(D5CX,d4lX.t8CX,a0CX);I0H.y=G3CX.U4CX*q2RR*M0H.halfHeight;d4lX.F4XX(i7CX);var d2RR=d4lX.r4XX(d4lX.J4XX,d4lX.v8CX,d4lX.y8CX,d4lX.X8CX);I0H.z=d2RR*M0H.halfDepth;},n5H.prototype.dispose=function(){this.world.clear();},n5H;}();O3.OimoJSPlugin=F9Z;(function(c0H){var G23X="physicsImpostor";var N0H;c0H.Scene.prototype.getPhysicsEngine=function(){return this._physicsEngine;};c0H.Scene.prototype.enablePhysics=function(l0H,A0H){var E0H;if(void d4lX.I4XX===l0H&&(l0H=G3CX.X4CX),this._physicsEngine){return!+G3CX.k4CX;}E0H=this._getComponent(c0H.SceneComponentConstants.NAME_PHYSICSENGINE);E0H||(E0H=new N0H(this),this._addComponent(E0H));try{return this._physicsEngine=new c0H.PhysicsEngine(l0H,A0H),!(G3CX.k4CX*d4lX.n4XX);}catch(b0H){return c0H.Tools.Error(b0H.message),!(G3CX.j4CX-d4lX.I4XX);}};c0H.Scene.prototype.disablePhysicsEngine=function(){this._physicsEngine&&(this._physicsEngine.dispose(),this._physicsEngine=G3CX.X4CX);};c0H.Scene.prototype.isPhysicsEnabled=function(){return void+G3CX.k4CX!==this._physicsEngine;};c0H.Scene.prototype.deleteCompoundImpostor=function(C0H){var n0H;n0H=C0H.parts[+G3CX.k4CX].mesh;n0H.physicsImpostor&&(n0H.physicsImpostor.dispose(),n0H.physicsImpostor=G3CX.X4CX);};c0H.Scene.prototype._advancePhysicsEngineStep=function(L0H){this._physicsEngine&&(this.onBeforePhysicsObservable.notifyObservers(this),this._physicsEngine._step(L0H/(F6uX-d4lX.I4XX)),this.onAfterPhysicsObservable.notifyObservers(this));};Object.defineProperty(c0H.AbstractMesh.prototype,G23X,{get:function(){return this._physicsImpostor;},set:function(z0H){var a0H;a0H=this;this._physicsImpostor!==z0H&&(this._disposePhysicsObserver&&this.onDisposeObservable.remove(this._disposePhysicsObserver),(this._physicsImpostor=z0H)&&(this._disposePhysicsObserver=this.onDisposeObservable.add(function(){a0H.physicsImpostor&&(a0H.physicsImpostor.dispose(),a0H.physicsImpostor=G3CX.X4CX);})));},enumerable:!(G3CX.k4CX*d4lX.n4XX),configurable:!+G3CX.k4CX});c0H.AbstractMesh.prototype.getPhysicsImpostor=function(){return this.physicsImpostor;};c0H.AbstractMesh.prototype.applyImpulse=function(t0H,K0H){return this.physicsImpostor&&this.physicsImpostor.applyImpulse(t0H,K0H),this;};c0H.AbstractMesh.prototype.setPhysicsLinkWith=function(p0H,i0H,u0H,k0H){return this.physicsImpostor&&p0H.physicsImpostor&&this.physicsImpostor.createJoint(p0H.physicsImpostor,c0H.PhysicsJoint.HingeJoint,{mainPivot:i0H,connectedPivot:u0H,nativeParams:k0H}),this;};N0H=function(){function f0H(e0H){var g0H;g0H=this;this.name=c0H.SceneComponentConstants.NAME_PHYSICSENGINE;this.scene=e0H;this.scene.onBeforePhysicsObservable=new c0H.Observable();this.scene.onAfterPhysicsObservable=new c0H.Observable();this.scene.getDeterministicFrameTime=function(){return g0H.scene._physicsEngine?+F6uX*g0H.scene._physicsEngine.getTimeStep():(F6uX-d4lX.I4XX)/(x3uX.B1uX-d4lX.I4XX);};}return f0H.prototype.register=function(){},f0H.prototype.rebuild=function(){},f0H.prototype.dispose=function(){this.scene.onBeforePhysicsObservable.clear();this.scene.onAfterPhysicsObservable.clear();this.scene._physicsEngine&&this.scene.disablePhysicsEngine();},f0H;}();c0H.PhysicsEngineSceneComponent=N0H;}(Q0||(Q0={})));(function(Z0H){var C23X="DX10";var p23X="DXT5";var U23X="DXT3";var b23X="DXT1";var o0H,y0H,R0H,F0H,B0H;o0H=q0H(b23X);y0H=q0H(U23X);R0H=q0H(p23X);F0H=q0H(C23X);B0H=function(){var c23X="31744";var H23X="131072";var M1CX=251;var c1CX=249;function O0H(){}return O0H.GetDDSInfo=function(d9H){var e64X=G3CX;var L64X=x3uX;var M5CX=131072;var s0H,S9H,U9H,T0H,Y9H,H9H;s0H=new Int32Array(d9H,d4lX.I4XX,+L64X.I1rX);d4lX.i4XX(d4lX.I4XX);S9H=new Int32Array(d9H,d4lX.r4XX(d4lX.n4XX,e64X.k4CX),+k3dX.v23X);U9H=+e64X.j4CX;H23X-d4lX.I4XX&s0H[e64X.U4CX-d4lX.I4XX]&&(U9H=Math.max(e64X.j4CX-d4lX.I4XX,s0H[d4lX.W8CX]));T0H=s0H[+L64X.K8rX];Y9H=T0H===F0H?S9H[e64X.b4CX|d4lX.I4XX]:+e64X.k4CX;H9H=Z0H.Engine.TEXTURETYPE_UNSIGNED_INT;switch(T0H){case y7CX:H9H=Z0H.Engine.TEXTURETYPE_HALF_FLOAT;break;case+k3dX.A23X:H9H=Z0H.Engine.TEXTURETYPE_FLOAT;break;case F0H:if(e64X.u3uX*d4lX.n4XX===Y9H){H9H=Z0H.Engine.TEXTURETYPE_HALF_FLOAT;break;}}return{width:s0H[d4lX.J4XX],height:s0H[e64X.l4CX-d4lX.I4XX],mipmapCount:U9H,isFourCC:e64X.t4CX*d4lX.n4XX==(+e64X.t4CX&s0H[d4lX.k8CX]),isRGB:d4lX.O3CX==(+L64X.U7uX&s0H[L64X.b2rX|d4lX.I4XX]),isLuminance:+H23X==(M5CX&s0H[d4lX.k8CX]),isCube:L64X.f0uX-d4lX.I4XX==((L64X.f0uX|d4lX.I4XX)&s0H[k3dX.o23X|d4lX.I4XX]),isCompressed:T0H===o0H||T0H===y0H||T0H===R0H,dxgiFormat:Y9H,textureType:H9H};},O0H._ToHalfFloat=function(v9H){var M64X=G3CX;var T23X="8388607";var x23X="142";var e23X="103";var L23X="2047";var o1CX=244;var A1CX=243;var H1CX=242;var J9H,r9H,G9H,m9H;O0H._FloatView||(O0H._FloatView=new Float32Array(+M64X.j4CX),O0H._Int32View=new Int32Array(O0H._FloatView.buffer));O0H._FloatView[+M64X.k4CX]=v9H;d4lX.F4XX(d4lX.I4XX);J9H=O0H._Int32View[d4lX.z4XX(d4lX.n4XX,M64X.k4CX)];d4lX.i4XX(H1CX);r9H=d4lX.r4XX(u23X,J9H,d4lX.n4XX,M64X.S3uX);d4lX.F4XX(A1CX);G9H=d4lX.r4XX(J9H,L23X,x3uX.I3uX,d4lX.I4XX);d4lX.F4XX(o1CX);m9H=d4lX.z4XX(x3uX.G2rX,d4lX.I4XX,J9H,d4lX.I4XX,E3uX);return m9H<+e23X?r9H:+x23X>k3dX.N23X*d4lX.n4XX-m9H)+(G9H>>+k3dX.M23X-m9H&d4lX.n4XX):(r9H|=m9H-(k3dX.h23X|d4lX.I4XX)<<(M64X.u3uX|d4lX.I4XX)|G9H>>+M64X.j4CX,r9H+=+M64X.j4CX&G9H);},O0H._FromHalfFloat=function(h9H){var V64X=G3CX;var u5CX=32768;var L1CX=246;var u1CX=245;var w9H,V9H,Q9H;d4lX.F4XX(u1CX);w9H=d4lX.z4XX(V64X.e3uX,h9H,u5CX);d4lX.F4XX(L1CX);V9H=d4lX.r4XX(c23X,h9H,V64X.u3uX);d4lX.F4XX(l6CX);Q9H=d4lX.z4XX(h9H,V0CX);return+V64X.k4CX===V9H?(w9H?-d4lX.n4XX:+V64X.j4CX)*Math.pow(+V64X.U4CX,-(V64X.L3uX*d4lX.n4XX))*(Q9H/Math.pow(+V64X.U4CX,V64X.u3uX|d4lX.I4XX)):x3uX.I1rX-d4lX.I4XX==V9H?Q9H?NaN:+V64X.j4CX/+V64X.k4CX*(w9H?-(V64X.j4CX-d4lX.I4XX):+V64X.j4CX):(w9H?-d4lX.n4XX:V64X.j4CX-d4lX.I4XX)*Math.pow(V64X.U4CX-d4lX.I4XX,V9H-d4lX.Y8CX)*(d4lX.n4XX+Q9H/Math.pow(+V64X.U4CX,d4lX.y8CX));},O0H._GetHalfFloatAsFloatRGBAArrayBuffer=function(x9H,c9H,N9H,E9H,l9H,A9H){var r64X=G3CX;var e1CX=247;var W9H;for(var D9H=new Float32Array(E9H),j9H=new Uint16Array(l9H,N9H),X9H=r64X.k4CX|d4lX.I4XX,M9H=r64X.k4CX*d4lX.n4XX;M9H>+G3CX.Y4CX);},O0H._GetRGBArrayBuffer=function(o3H,B3H,P3H,O3H,s3H,T3H,y3H,R3H){var K14X=G3CX;var e3H;for(var f3H=new Uint8Array(O3H),Z3H=new Uint8Array(s3H,P3H),g3H=+K14X.k4CX,q3H=K14X.k4CX|d4lX.I4XX;q3H>(W14X.Y4CX|d4lX.I4XX)&(E3uX|d4lX.I4XX),C7H>>(W14X.S3uX|d4lX.I4XX)&z1CX,C7H>>d14X.Z2rX*d4lX.n4XX&z1CX)));}i7H=O0H._ExtractLongWordOrder(I7H[+d14X.G2rX]);u7H=O0H._ExtractLongWordOrder(I7H[d14X.Z2rX*d4lX.n4XX]);k7H=O0H._ExtractLongWordOrder(I7H[d4lX.E8CX]);e7H=O0H._ExtractLongWordOrder(I7H[g14X.F23X*d4lX.n4XX]);K7H&&(b7H=c7H._getRGBABufferInternalSizedFormat(W7H.textureType));f7H=+W14X.j4CX;(H23X|d4lX.I4XX)&I7H[W14X.U4CX*d4lX.n4XX]&&!+W14X.j4CX!==y7H&&(f7H=Math.max(d4lX.n4XX,I7H[+W14X.n4CX]));for(var A7H=+W14X.k4CX;A7H>X4H.mipmapCount-G3CX.j4CX*d4lX.n4XX==+G3CX.j4CX;I4H(X4H.width,X4H.height,j4H,X4H.isFourCC,function(){K2.DDSTools.UploadDDSLevels(W4H.getEngine(),W4H,M4H,X4H,j4H,G3CX.j4CX*d4lX.n4XX);});},R7H;}();K2.Engine._TextureLoaders.push(new y9Z());y5Z=Q0||(Q0={});a6Z=function(){var P78X=G3CX;function x4H(){}return x4H.GetTGAHeader=function(N4H){var S5PX=G3CX;var c4H;c4H=d4lX.I4XX;return{id_length:N4H[c4H++],colormap_type:N4H[c4H++],image_type:N4H[c4H++],colormap_index:N4H[c4H++]|N4H[c4H++]<<+S5PX.Y4CX,colormap_length:N4H[c4H++]|N4H[c4H++]<b4H.length){y5Z.Tools.Error(J23X);}else{A4H+=E4H.id_length;t4H=!d4lX.n4XX;g4H=!+f5PX.j4CX;e4H=!d4lX.n4XX;switch(E4H.image_type){case x4H._TYPE_RLE_INDEXED:t4H=!d4lX.I4XX;case x4H._TYPE_INDEXED:d4lX.F4XX(d4lX.n4XX);g4H=!d4lX.r4XX(d4lX.I4XX,f5PX.k4CX);break;case x4H._TYPE_RLE_RGB:d4lX.F4XX(d4lX.w4XX);t4H=!d4lX.r4XX(d4lX.I4XX,f5PX.k4CX);case x4H._TYPE_RGB:break;case x4H._TYPE_RLE_GREY:t4H=!+f5PX.k4CX;case x4H._TYPE_GREY:e4H=!+f5PX.k4CX;}n4H=E4H.pixel_size>>+f5PX.l4CX;k4H=E4H.width*E4H.height*n4H;if(g4H&&(o4H=b4H.subarray(A4H,A4H+=E4H.colormap_length*(E4H.colormap_size>>(f5PX.l4CX|d4lX.I4XX)))),t4H){f4H=new Uint8Array(k4H);for(var C4H=d4lX.I4XX,Z4H=new Uint8Array(n4H);A4H>x4H._ORIGIN_SHIFT){default:case x4H._ORIGIN_UL:z4H=+f5PX.k4CX,u4H=+f5PX.j4CX,i4H=E4H.width,a4H=d4lX.I4XX,K4H=f5PX.j4CX*d4lX.n4XX,p4H=E4H.height;break;case x4H._ORIGIN_BL:z4H=f5PX.k4CX|d4lX.I4XX,u4H=f5PX.j4CX-d4lX.I4XX,i4H=E4H.width,a4H=E4H.height-+f5PX.j4CX,p4H=K4H=-d4lX.n4XX;break;case x4H._ORIGIN_UR:z4H=E4H.width-+f5PX.j4CX,i4H=u4H=-(f5PX.j4CX*d4lX.n4XX),a4H=+f5PX.k4CX,K4H=f5PX.j4CX*d4lX.n4XX,p4H=E4H.height;break;case x4H._ORIGIN_BR:z4H=E4H.width-(f5PX.j4CX|d4lX.I4XX),i4H=u4H=-(f5PX.j4CX*d4lX.n4XX),a4H=E4H.height-d4lX.n4XX,p4H=K4H=-+f5PX.j4CX;}F4H=x4H[K93X+(e4H?R93X:f5PX.e4CX)+E4H.pixel_size+W93X](E4H,o4H,f4H,a4H,K4H,p4H,z4H,u4H,i4H);q4H.getEngine()._uploadDataToTextureDirectly(q4H,F4H);}}},x4H._getImageData8bits=function(U8H,S8H,m8H,r8H,J8H,G8H,v8H,w8H,V8H){var g5PX=G3CX;var s4H,R4H,B4H,Y8H,T4H,O4H,d8H,H8H,P4H;Y8H=m8H;T4H=S8H;O4H=U8H.width;d8H=U8H.height;d4lX.i4XX(d4lX.w4XX);H8H=d4lX.r4XX(d4lX.I4XX,g5PX.k4CX);d4lX.i4XX(g5PX.k7CX);P4H=new Uint8Array(d4lX.z4XX(d4lX.J4XX,d8H,O4H));for(B4H=r8H;B4H!==G8H;B4H+=J8H)for(R4H=v8H;R4H!==V8H;R4H+=w8H,H8H++){s4H=Y8H[H8H],P4H[+g5PX.t4CX*(R4H+O4H*B4H)+(g5PX.l4CX-d4lX.I4XX)]=E3uX-d4lX.I4XX,P4H[+g5PX.t4CX*(R4H+O4H*B4H)+(g5PX.U4CX|d4lX.I4XX)]=T4H[g5PX.l4CX*d4lX.n4XX*s4H+d4lX.I4XX],P4H[d4lX.J4XX*(R4H+O4H*B4H)+ +g5PX.j4CX]=T4H[d4lX.P4XX*s4H+(g5PX.j4CX-d4lX.I4XX)],P4H[+g5PX.t4CX*(R4H+O4H*B4H)+ +g5PX.k4CX]=T4H[+g5PX.l4CX*s4H+ +g5PX.U4CX];}return P4H;},x4H._getImageData16bits=function(N8H,z8H,a8H,L8H,C8H,n8H,b8H,A8H,l8H){var W5PX=G3CX;var d93X="992";var h5CX=6318256;var o5CX=31750;var n1CX=260;var I1CX=259;var F1CX=258;var W8H,h8H,Q8H,M8H,X8H,E8H,j8H,D8H,I8H,c8H,x8H;M8H=a8H;X8H=N8H.width;E8H=N8H.height;j8H=+W5PX.k4CX;d4lX.i4XX(V1CX);D8H=new Uint8Array(d4lX.r4XX(X8H,E8H,W5PX.t4CX));for(Q8H=L8H;Q8H!==n8H;Q8H+=C8H)for(h8H=b8H;h8H!==l8H;h8H+=A8H,j8H+=d4lX.w4XX){d4lX.F4XX(W5PX.p1CX);var c2RR=d4lX.z4XX(d4lX.y8CX,h5CX,o5CX,d4lX.k8CX);d4lX.i4XX(d4lX.E8CX);var G2RR=d4lX.z4XX(d4lX.Z8CX,d4lX.Z8CX,d4lX.d8CX);I8H=+E3uX*((c2RR&(W8H=M8H[j8H+(W5PX.k4CX|d4lX.I4XX)]+(M8H[j8H+ +W5PX.j4CX]<>(W5PX.u3uX|d4lX.I4XX))/(x3uX.I1rX|d4lX.I4XX)|(W5PX.k4CX|d4lX.I4XX);d4lX.F4XX(z1CX);c8H=d4lX.z4XX(W5PX.k4CX,d4lX.U8CX,W5PX.V8uX,W8H,E3uX,d93X,d4lX.I4XX);d4lX.i4XX(W5PX.r1CX);x8H=d4lX.r4XX(E3uX,d4lX.I4XX,x3uX.I1rX,d4lX.I4XX,W5PX.k4CX,x3uX.I1rX,d4lX.n4XX,W8H);d4lX.i4XX(i1CX);D8H[d4lX.r4XX(W5PX.t4CX,Q8H,X8H,h8H,W5PX.k4CX,d4lX.n4XX,d4lX.n4XX)]=I8H;d4lX.i4XX(F1CX);D8H[d4lX.r4XX(h8H,W5PX.t4CX,W5PX.j4CX,Q8H,X8H)]=c8H;d4lX.i4XX(I1CX);D8H[d4lX.r4XX(d4lX.I4XX,W5PX.t4CX,h8H,X8H,W5PX.U4CX,Q8H)]=x8H;d4lX.i4XX(n1CX);D8H[d4lX.r4XX(d4lX.I4XX,W5PX.l4CX,X8H,W5PX.t4CX,Q8H,h8H)]=(u23X|d4lX.I4XX)&W8H?d4lX.I4XX:+E3uX;}return D8H;},x4H._getImageData24bits=function(f8H,B8H,q8H,F8H,o8H,y8H,R8H,e8H,Z8H){var R5PX=G3CX;var t8H,K8H,k8H,i8H,g8H,u8H,p8H;k8H=q8H;i8H=f8H.width;g8H=f8H.height;u8H=+R5PX.k4CX;d4lX.F4XX(j7CX);p8H=new Uint8Array(d4lX.r4XX(d4lX.I4XX,g8H,i8H,R5PX.t4CX));for(K8H=F8H;K8H!==y8H;K8H+=o8H)for(t8H=R8H;t8H!==Z8H;t8H+=e8H,u8H+=+R5PX.l4CX){p8H[d4lX.J4XX*(t8H+i8H*K8H)+ +R5PX.l4CX]=+E3uX,p8H[+R5PX.t4CX*(t8H+i8H*K8H)+ +R5PX.U4CX]=k8H[u8H+(R5PX.k4CX-d4lX.I4XX)],p8H[+R5PX.t4CX*(t8H+i8H*K8H)+d4lX.n4XX]=k8H[u8H+(R5PX.j4CX|d4lX.I4XX)],p8H[(R5PX.t4CX-d4lX.I4XX)*(t8H+i8H*K8H)+R5PX.k4CX*d4lX.n4XX]=k8H[u8H+ +R5PX.U4CX];}return p8H;},x4H._getImageData32bits=function(Y2H,V2H,r2H,J2H,G2H,v2H,w2H,S2H,m2H){var K5PX=G3CX;var P8H,O8H,U2H,H2H,d2H,T8H,s8H;U2H=r2H;H2H=Y2H.width;d2H=Y2H.height;T8H=+K5PX.k4CX;d4lX.F4XX(K5PX.k7CX);s8H=new Uint8Array(d4lX.r4XX(d4lX.J4XX,d2H,H2H));for(O8H=J2H;O8H!==v2H;O8H+=G2H)for(P8H=w2H;P8H!==m2H;P8H+=S2H,T8H+=d4lX.J4XX){s8H[(K5PX.t4CX-d4lX.I4XX)*(P8H+H2H*O8H)+(K5PX.U4CX|d4lX.I4XX)]=U2H[T8H+(K5PX.k4CX|d4lX.I4XX)],s8H[(K5PX.t4CX-d4lX.I4XX)*(P8H+H2H*O8H)+ +K5PX.j4CX]=U2H[T8H+K5PX.j4CX*d4lX.n4XX],s8H[K5PX.t4CX*d4lX.n4XX*(P8H+H2H*O8H)+d4lX.I4XX]=U2H[T8H+ +K5PX.U4CX],s8H[(K5PX.t4CX|d4lX.I4XX)*(P8H+H2H*O8H)+d4lX.P4XX]=U2H[T8H+ +K5PX.l4CX];}return s8H;},x4H._getImageDataGrey8bits=function(M2H,C2H,N2H,E2H,l2H,A2H,b2H,n2H,c2H){var J0PX=G3CX;var W2H,Q2H,h2H,I2H,X2H,x2H,j2H,D2H;I2H=N2H;X2H=M2H.width;x2H=M2H.height;j2H=+J0PX.k4CX;d4lX.i4XX(j7CX);D2H=new Uint8Array(d4lX.r4XX(d4lX.I4XX,x2H,X2H,J0PX.t4CX));for(h2H=E2H;h2H!==A2H;h2H+=l2H)for(Q2H=b2H;Q2H!==c2H;Q2H+=n2H,j2H++){W2H=I2H[j2H],D2H[d4lX.J4XX*(Q2H+X2H*h2H)+ +J0PX.k4CX]=W2H,D2H[(J0PX.t4CX-d4lX.I4XX)*(Q2H+X2H*h2H)+(J0PX.j4CX-d4lX.I4XX)]=W2H,D2H[+J0PX.t4CX*(Q2H+X2H*h2H)+ +J0PX.U4CX]=W2H,D2H[+J0PX.t4CX*(Q2H+X2H*h2H)+(J0PX.l4CX|d4lX.I4XX)]=E3uX-d4lX.I4XX;}return D2H;},x4H._getImageDataGrey16bits=function(i2H,o2H,g2H,e2H,Z2H,q2H,F2H,k2H,f2H){var P0PX=G3CX;var L2H,a2H,p2H,K2H,u2H,t2H,z2H;p2H=g2H;K2H=i2H.width;u2H=i2H.height;d4lX.i4XX(d4lX.I4XX);t2H=d4lX.z4XX(d4lX.n4XX,P0PX.k4CX);d4lX.F4XX(P0PX.k7CX);z2H=new Uint8Array(d4lX.r4XX(d4lX.J4XX,u2H,K2H));for(a2H=e2H;a2H!==q2H;a2H+=Z2H)for(L2H=F2H;L2H!==f2H;L2H+=k2H,t2H+=P0PX.U4CX-d4lX.I4XX){z2H[P0PX.t4CX*d4lX.n4XX*(L2H+K2H*a2H)+ +P0PX.k4CX]=p2H[t2H+d4lX.I4XX],z2H[(P0PX.t4CX-d4lX.I4XX)*(L2H+K2H*a2H)+ +P0PX.j4CX]=p2H[t2H+ +P0PX.k4CX],z2H[+P0PX.t4CX*(L2H+K2H*a2H)+P0PX.U4CX*d4lX.n4XX]=p2H[t2H+(P0PX.k4CX-d4lX.I4XX)],z2H[+P0PX.t4CX*(L2H+K2H*a2H)+ +P0PX.l4CX]=p2H[t2H+ +P0PX.j4CX];}return z2H;},x4H._TYPE_INDEXED=P78X.j4CX*d4lX.n4XX,x4H._TYPE_RGB=+P78X.U4CX,x4H._TYPE_GREY=P78X.l4CX|d4lX.I4XX,x4H._TYPE_RLE_INDEXED=P78X.Q4CX-d4lX.I4XX,x4H._TYPE_RLE_RGB=+P78X.u3uX,x4H._TYPE_RLE_GREY=x3uX.c3uX*d4lX.n4XX,x4H._ORIGIN_MASK=d4lX.z8CX,x4H._ORIGIN_SHIFT=+P78X.t4CX,x4H._ORIGIN_BL=+P78X.k4CX,x4H._ORIGIN_BR=+P78X.j4CX,x4H._ORIGIN_UL=d4lX.w4XX,x4H._ORIGIN_UR=d4lX.P4XX,x4H;}();y5Z.TGATools=a6Z;F5Z=Q0||(Q0={});O9Z=function(){function y2H(){d4lX.F4XX(d4lX.w4XX);this.supportCascades=!d4lX.r4XX(d4lX.I4XX,G3CX.j4CX);}return y2H.prototype.canLoad=function(R2H,B2H,P2H,O2H,s2H){var g93X=".tga";return(G3CX.k4CX|d4lX.I4XX)===R2H.indexOf(g93X);},y2H.prototype.transformUrl=function(T2H,H1H){return T2H;},y2H.prototype.getFallbackTextureUrl=function(U1H,Y1H){return G3CX.X4CX;},y2H.prototype.loadCubeData=function(d1H,S1H,m1H,r1H,J1H){var y93X=".env not supported in Cube.";throw y93X;},y2H.prototype.loadData=function(V1H,w1H,Q1H){var G1H,v1H;G1H=new Uint8Array(V1H);v1H=F5Z.TGATools.GetTGAHeader(G1H);Q1H(v1H.width,v1H.height,w1H.generateMipMaps,!(G3CX.j4CX-d4lX.I4XX),function(){F5Z.TGATools.UploadContent(w1H,G1H);});},y2H;}();F5Z.Engine._TextureLoaders.push(new O9Z());l1=Q0||(Q0={});T9Z=function(){function h1H(M1H,j1H,I1H,x1H){var z0PX=k3dX;var V0PX=x3uX;var h0PX=G3CX;var B93X="texture missing KTX identifier";var k93X="only compressed formats currently supported";var j93X="only 2D textures currently supported";var X93X="texture arrays not currently supported";var l93X=", but found ";var t93X="number of faces expected";var f93X="171";var z5CX=185999660;var X1H,D1H,W1H;this.arrayBuffer=M1H;d4lX.F4XX(d4lX.I4XX);X1H=new Uint8Array(this.arrayBuffer,d4lX.z4XX(d4lX.n4XX,h0PX.k4CX),d4lX.z4XX(d4lX.I4XX,V0PX.I3uX,d4lX.F4XX(d4lX.n4XX)));if(f93X*d4lX.n4XX===X1H[d4lX.I4XX]&&z0PX.O93X*d4lX.n4XX===X1H[h0PX.j4CX*d4lX.n4XX]&&+z0PX.S93X===X1H[h0PX.U4CX-d4lX.I4XX]&&+z0PX.r23X===X1H[+h0PX.l4CX]&&+h0PX.b4CX===X1H[+h0PX.t4CX]&&+z0PX.Q93X===X1H[h0PX.V8uX-d4lX.I4XX]&&r8CX===X1H[+h0PX.O8uX]&&z0PX.Y93X-d4lX.I4XX===X1H[+h0PX.n4CX]&&+h0PX.o3uX===X1H[d4lX.d8CX]&&h0PX.u3uX-d4lX.I4XX===X1H[+h0PX.Q4CX]&&z0PX.F23X-d4lX.I4XX===X1H[d4lX.y8CX]&&h0PX.u3uX-d4lX.I4XX===X1H[d4lX.f8CX]){d4lX.F4XX(d4lX.I4XX);D1H=new Int32Array(this.arrayBuffer,+V0PX.I3uX,d4lX.r4XX(d4lX.n4XX,h0PX.o3uX));d4lX.F4XX(d4lX.y8CX);var y2RR=d4lX.r4XX(d4lX.f8CX,z5CX);W1H=y2RR===D1H[h0PX.k4CX-d4lX.I4XX];this.glType=W1H?this.switchEndianness(D1H[h0PX.j4CX*d4lX.n4XX]):D1H[+h0PX.j4CX];this.glTypeSize=W1H?this.switchEndianness(D1H[h0PX.U4CX*d4lX.n4XX]):D1H[h0PX.U4CX-d4lX.I4XX];this.glFormat=W1H?this.switchEndianness(D1H[+h0PX.l4CX]):D1H[d4lX.P4XX];this.glInternalFormat=W1H?this.switchEndianness(D1H[+h0PX.t4CX]):D1H[d4lX.J4XX];this.glBaseInternalFormat=W1H?this.switchEndianness(D1H[+h0PX.V8uX]):D1H[h0PX.V8uX|d4lX.I4XX];this.pixelWidth=W1H?this.switchEndianness(D1H[+h0PX.O8uX]):D1H[h0PX.O8uX*d4lX.n4XX];this.pixelHeight=W1H?this.switchEndianness(D1H[+h0PX.n4CX]):D1H[h0PX.n4CX|d4lX.I4XX];this.pixelDepth=W1H?this.switchEndianness(D1H[h0PX.Y4CX*d4lX.n4XX]):D1H[h0PX.Y4CX-d4lX.I4XX];this.numberOfArrayElements=W1H?this.switchEndianness(D1H[h0PX.Q4CX|d4lX.I4XX]):D1H[h0PX.Q4CX*d4lX.n4XX];this.numberOfFaces=W1H?this.switchEndianness(D1H[h0PX.u3uX|d4lX.I4XX]):D1H[+h0PX.u3uX];this.numberOfMipmapLevels=W1H?this.switchEndianness(D1H[d4lX.f8CX]):D1H[V0PX.c3uX|d4lX.I4XX];this.bytesOfKeyValueData=W1H?this.switchEndianness(D1H[V0PX.I3uX|d4lX.I4XX]):D1H[+V0PX.I3uX];d4lX.I4XX===this.glType?(this.numberOfMipmapLevels=Math.max(+h0PX.j4CX,this.numberOfMipmapLevels),d4lX.I4XX!==this.pixelHeight&&d4lX.I4XX===this.pixelDepth?+h0PX.k4CX===this.numberOfArrayElements?this.numberOfFaces===j1H?this.loadType=h1H.COMPRESSED_2D:l1.Tools.Error(t93X+j1H+l93X+this.numberOfFaces):l1.Tools.Error(X93X):l1.Tools.Error(j93X)):l1.Tools.Error(k93X);}else{l1.Tools.Error(B93X);}}return h1H.prototype.switchEndianness=function(c1H){var w1CX=261;d4lX.i4XX(w1CX);return d4lX.r4XX(c1H,E3uX,T8LX,d4lX.n4XX,T8LX,G3CX.Y4CX,c1H,d4lX.I4XX,d4lX.n4XX,c1H,x3uX.Z2rX,d4lX.n4XX,x3uX.Z2rX,G3CX.Y4CX,z1CX,c1H,d4lX.I4XX);},h1H.prototype.uploadLevels=function(N1H,E1H){switch(this.loadType){case h1H.COMPRESSED_2D:this._upload2DCompressedLevels(N1H,E1H);}},h1H.prototype._upload2DCompressedLevels=function(t1H,K1H){var T0PX=G3CX;var P1CX=262;var L1H,z1H;for(var l1H=h1H.HEADER_LEN+this.bytesOfKeyValueData,n1H=this.pixelWidth,A1H=this.pixelHeight,a1H=K1H?this.numberOfMipmapLevels:+T0PX.j4CX,C1H=T0PX.k4CX-d4lX.I4XX;C1Hu0g.distance&&(z0g.mainSceneTrackerPredicate&&z0g.mainSceneTrackerPredicate(u0g.pickedMesh)?(z0g._notifyObservers(K0g,u0g,p0g),K0g.skipOnPointerObservable=!+t14X.k4CX):z0g._lastPointerEvents[p0g.pointerId]&&(z0g.onPointerOutObservable.notifyObservers(p0g.pointerId),delete z0g._lastPointerEvents[p0g.pointerId])),K0g.type===B4.PointerEventTypes.POINTERUP&&z0g._pointerCaptures[p0g.pointerId]&&(z0g._pointerCaptures[p0g.pointerId]=!d4lX.n4XX));}}}});d4lX.i4XX(d4lX.w4XX);this.utilityLayerScene.autoClear=!d4lX.r4XX(d4lX.I4XX,G3CX.j4CX);this._afterRenderObserver=this.originalScene.onAfterRenderObservable.add(function(){z0g.shouldRender&&z0g.render();});this._sceneDisposeObserver=this.originalScene.onDisposeObservable.add(function(){z0g.dispose();});this._updateCamera();}return Object.defineProperty(a0g,T93X,{get:function(){return G3CX.X4CX==a0g._DefaultUtilityLayer&&(a0g._DefaultUtilityLayer=new a0g(B4.Engine.LastCreatedScene)).originalScene.onDisposeObservable.addOnce(function(){a0g._DefaultUtilityLayer=G3CX.X4CX;}),a0g._DefaultUtilityLayer;},enumerable:!+y68X.k4CX,configurable:!(y68X.k4CX*d4lX.n4XX)}),Object.defineProperty(a0g,M93X,{get:function(){return G3CX.X4CX==a0g._DefaultKeepDepthUtilityLayer&&((a0g._DefaultKeepDepthUtilityLayer=new a0g(B4.Engine.LastCreatedScene)).utilityLayerScene.autoClearDepthAndStencil=!d4lX.n4XX,a0g._DefaultKeepDepthUtilityLayer.originalScene.onDisposeObservable.addOnce(function(){a0g._DefaultKeepDepthUtilityLayer=G3CX.X4CX;})),a0g._DefaultKeepDepthUtilityLayer;},enumerable:!+y68X.k4CX,configurable:!(y68X.k4CX|d4lX.I4XX)}),a0g.prototype._notifyObservers=function(g0g,e0g,Z0g){g0g.skipOnPointerObservable||(this.utilityLayerScene.onPointerObservable.notifyObservers(new B4.PointerInfo(g0g.type,g0g.event,e0g)),this._lastPointerEvents[Z0g.pointerId]=!(G3CX.k4CX*d4lX.n4XX));},a0g.prototype.render=function(){var F0g,q0g;if(this._updateCamera(),this.utilityLayerScene.activeCamera){F0g=this.utilityLayerScene.activeCamera.getScene();q0g=this.utilityLayerScene.activeCamera;q0g._scene=this.utilityLayerScene;q0g.leftCamera&&(q0g.leftCamera._scene=this.utilityLayerScene);q0g.rightCamera&&(q0g.rightCamera._scene=this.utilityLayerScene);this.utilityLayerScene.render(!+G3CX.j4CX);q0g._scene=F0g;q0g.leftCamera&&(q0g.leftCamera._scene=F0g);q0g.rightCamera&&(q0g.rightCamera._scene=F0g);}},a0g.prototype.dispose=function(){this.onPointerOutObservable.clear();this._afterRenderObserver&&this.originalScene.onAfterRenderObservable.remove(this._afterRenderObserver);this._sceneDisposeObserver&&this.originalScene.onDisposeObservable.remove(this._sceneDisposeObserver);this._originalPointerObserver&&this.originalScene.onPrePointerObservable.remove(this._originalPointerObserver);this.utilityLayerScene.dispose();},a0g.prototype._updateCamera=function(){this.utilityLayerScene.activeCamera=this.originalScene.activeCamera;},a0g._DefaultUtilityLayer=y68X.X4CX,a0g._DefaultKeepDepthUtilityLayer=y68X.X4CX,a0g;}();B4.UtilityLayerRenderer=J3Z;r3=Q0||(Q0={});v3Z=function(){function o0g(R0g){var I9PX=G3CX;var N93X="Multiple drag modes specified in dragBehavior options. Only one expected";var y0g;this.maxDragAngle=+I9PX.k4CX;this._useAlternatePickedPointAboveMaxDragAngle=!d4lX.n4XX;this.currentDraggingPointerID=-+I9PX.j4CX;this.dragging=!+I9PX.j4CX;d4lX.i4XX(d4lX.w4XX);this.dragDeltaRatio=d4lX.r4XX(d4lX.I4XX,M8rX);this.updateDragPlane=!+I9PX.k4CX;this._debugMode=!+I9PX.j4CX;this._moving=!+I9PX.j4CX;this.onDragObservable=new r3.Observable();this.onDragStartObservable=new r3.Observable();this.onDragEndObservable=new r3.Observable();this.moveAttached=!d4lX.I4XX;d4lX.F4XX(d4lX.w4XX);this.enabled=!d4lX.r4XX(d4lX.I4XX,I9PX.k4CX);this.detachCameraControls=!+I9PX.k4CX;this.useObjectOrienationForDragging=!d4lX.I4XX;d4lX.F4XX(d4lX.I4XX);this._tmpVector=new r3.Vector3(d4lX.r4XX(d4lX.n4XX,I9PX.k4CX),+I9PX.k4CX,d4lX.z4XX(d4lX.n4XX,I9PX.k4CX));d4lX.i4XX(d4lX.w4XX);this._alternatePickedPoint=new r3.Vector3(+I9PX.k4CX,d4lX.r4XX(d4lX.I4XX,I9PX.k4CX),+I9PX.k4CX);d4lX.i4XX(d4lX.I4XX);this._worldDragAxis=new r3.Vector3(d4lX.I4XX,+I9PX.k4CX,d4lX.z4XX(d4lX.n4XX,I9PX.k4CX));d4lX.i4XX(d4lX.w4XX);this._targetPosition=new r3.Vector3(d4lX.I4XX,+I9PX.k4CX,d4lX.r4XX(d4lX.I4XX,I9PX.k4CX));this._attachedElement=I9PX.X4CX;this._startDragRay=new r3.Ray(new r3.Vector3(),new r3.Vector3());this._lastPointerRay={};this._dragDelta=new r3.Vector3();this._pointA=new r3.Vector3(+I9PX.k4CX,+I9PX.k4CX,d4lX.I4XX);d4lX.F4XX(d4lX.w4XX);this._pointB=new r3.Vector3(d4lX.z4XX(d4lX.I4XX,I9PX.k4CX),+I9PX.k4CX,d4lX.I4XX);this._pointC=new r3.Vector3(d4lX.I4XX,+I9PX.k4CX,+I9PX.k4CX);d4lX.i4XX(d4lX.I4XX);this._lineA=new r3.Vector3(+I9PX.k4CX,+I9PX.k4CX,d4lX.r4XX(d4lX.n4XX,I9PX.k4CX));this._lineB=new r3.Vector3(d4lX.I4XX,+I9PX.k4CX,+I9PX.k4CX);d4lX.i4XX(d4lX.n4XX);this._localAxis=new r3.Vector3(+I9PX.k4CX,d4lX.z4XX(d4lX.I4XX,I9PX.k4CX),d4lX.I4XX);d4lX.i4XX(d4lX.n4XX);this._lookAt=new r3.Vector3(+I9PX.k4CX,d4lX.r4XX(d4lX.I4XX,I9PX.k4CX),d4lX.z4XX(d4lX.I4XX,I9PX.k4CX));this._options=R0g||{};y0g=d4lX.I4XX;if(this._options.dragAxis&&y0g++,this._options.dragPlaneNormal&&y0g++,+I9PX.j4CXMath.PI/(T9PX.U4CX|d4lX.I4XX)&&(D9g=Math.PI-D9g),+T9PX.k4CXthis.maxDragAngle){if(this._useAlternatePickedPointAboveMaxDragAngle){this._tmpVector.copyFrom(h9g.direction);this._attachedNode.absolutePosition.subtractToRef(h9g.origin,this._alternatePickedPoint);this._alternatePickedPoint.normalize();this._alternatePickedPoint.scaleInPlace(-+T9PX.U4CX*r3.Vector3.Dot(this._alternatePickedPoint,this._tmpVector));this._tmpVector.addInPlace(this._alternatePickedPoint);W9g=r3.Vector3.Dot(this._dragPlane.forward,this._tmpVector);return this._dragPlane.forward.scaleToRef(-W9g,this._alternatePickedPoint),this._alternatePickedPoint.addInPlace(this._tmpVector),this._alternatePickedPoint.addInPlace(this._attachedNode.absolutePosition),this._alternatePickedPoint;}return T9PX.X4CX;}Q9g=o0g._planeScene.pickWithRay(h9g,function(j9g){return j9g==X9g._dragPlane;});return Q9g&&Q9g.hit&&Q9g.pickedMesh&&Q9g.pickedPoint?Q9g.pickedPoint:T9PX.X4CX;},o0g.prototype._updateDragPlanePosition=function(M9g,I9g){this._pointA.copyFrom(I9g);this._options.dragAxis?(this.useObjectOrienationForDragging?r3.Vector3.TransformCoordinatesToRef(this._options.dragAxis,this._attachedNode.getWorldMatrix().getRotationMatrix(),this._localAxis):this._localAxis.copyFrom(this._options.dragAxis),this._pointA.addToRef(this._localAxis,this._pointB),M9g.origin.subtractToRef(this._pointA,this._pointC),this._pointA.addToRef(this._pointC.normalize(),this._pointC),this._pointB.subtractToRef(this._pointA,this._lineA),this._pointC.subtractToRef(this._pointA,this._lineB),r3.Vector3.CrossToRef(this._lineA,this._lineB,this._lookAt),r3.Vector3.CrossToRef(this._lineA,this._lookAt,this._lookAt),this._lookAt.normalize(),this._dragPlane.position.copyFrom(this._pointA),this._pointA.subtractToRef(this._lookAt,this._lookAt),this._dragPlane.lookAt(this._lookAt)):this._options.dragPlaneNormal?(this.useObjectOrienationForDragging?r3.Vector3.TransformCoordinatesToRef(this._options.dragPlaneNormal,this._attachedNode.getWorldMatrix().getRotationMatrix(),this._localAxis):this._localAxis.copyFrom(this._options.dragPlaneNormal),this._dragPlane.position.copyFrom(this._pointA),this._pointA.subtractToRef(this._localAxis,this._lookAt),this._dragPlane.lookAt(this._lookAt)):(this._dragPlane.position.copyFrom(this._pointA),this._dragPlane.lookAt(M9g.origin));d4lX.F4XX(d4lX.n4XX);this._dragPlane.computeWorldMatrix(!d4lX.z4XX(d4lX.I4XX,G3CX.k4CX));},o0g.prototype.detach=function(){this._pointerObserver&&this._scene.onPointerObservable.remove(this._pointerObserver);this._beforeRenderObserver&&this._scene.onBeforeRenderObservable.remove(this._beforeRenderObserver);},o0g._AnyMouseID=-d4lX.w4XX,o0g;}();r3.PointerDragBehavior=v3Z;U5Z=Q0||(Q0={});V3Z=function(){function x9g(){var x9PX=G3CX;this._startDistance=+x9PX.k4CX;d4lX.F4XX(d4lX.I4XX);this._initialScale=new U5Z.Vector3(+x9PX.k4CX,+x9PX.k4CX,d4lX.r4XX(d4lX.n4XX,x9PX.k4CX));d4lX.i4XX(d4lX.w4XX);this._targetScale=new U5Z.Vector3(d4lX.r4XX(d4lX.I4XX,x9PX.k4CX),+x9PX.k4CX,d4lX.z4XX(d4lX.n4XX,x9PX.k4CX,d4lX.i4XX(d4lX.I4XX)));this._sceneRenderObserver=x9PX.X4CX;this._dragBehaviorA=new U5Z.PointerDragBehavior({});this._dragBehaviorA.moveAttached=!+x9PX.j4CX;this._dragBehaviorB=new U5Z.PointerDragBehavior({});d4lX.i4XX(d4lX.n4XX);this._dragBehaviorB.moveAttached=!d4lX.z4XX(d4lX.I4XX,x9PX.j4CX);}return Object.defineProperty(x9g.prototype,x3uX.G0uX,{get:function(){var z93X="MultiPointerScale";return z93X;},enumerable:!+G3CX.k4CX,configurable:!d4lX.I4XX}),x9g.prototype.init=function(){},x9g.prototype._getCurrentDistance=function(){return this._dragBehaviorA.lastDragPosition.subtract(this._dragBehaviorB.lastDragPosition).length();},x9g.prototype.attach=function(N9g){var c9g;c9g=this;this._ownerNode=N9g;this._dragBehaviorA.onDragStartObservable.add(function(E9g){c9g._dragBehaviorA.dragging&&c9g._dragBehaviorB.dragging&&(c9g._dragBehaviorA.currentDraggingPointerID==c9g._dragBehaviorB.currentDraggingPointerID?c9g._dragBehaviorA.releaseDrag():(c9g._initialScale.copyFrom(N9g.scaling),c9g._startDistance=c9g._getCurrentDistance()));});this._dragBehaviorB.onDragStartObservable.add(function(l9g){c9g._dragBehaviorA.dragging&&c9g._dragBehaviorB.dragging&&(c9g._dragBehaviorA.currentDraggingPointerID==c9g._dragBehaviorB.currentDraggingPointerID?c9g._dragBehaviorB.releaseDrag():(c9g._initialScale.copyFrom(N9g.scaling),c9g._startDistance=c9g._getCurrentDistance()));});[this._dragBehaviorA,this._dragBehaviorB].forEach(function(A9g){A9g.onDragObservable.add(function(){var b9g;if(c9g._dragBehaviorA.dragging&&c9g._dragBehaviorB.dragging){b9g=c9g._getCurrentDistance()/c9g._startDistance;c9g._initialScale.scaleToRef(b9g,c9g._targetScale);}});});N9g.addBehavior(this._dragBehaviorA);N9g.addBehavior(this._dragBehaviorB);this._sceneRenderObserver=N9g.getScene().onBeforeRenderObservable.add(function(){var n9g;if(c9g._dragBehaviorA.dragging&&c9g._dragBehaviorB.dragging){d4lX.F4XX(d4lX.w4XX);n9g=c9g._targetScale.subtract(N9g.scaling).scaleInPlace(d4lX.z4XX(d4lX.I4XX,x4uX));+u8LXK3g.snapDistance){P3g=Math.floor(Math.abs(e3g)/K3g.snapDistance);e3g%=K3g.snapDistance;g3g.normalizeToRef(o3g);o3g.scaleInPlace(K3g.snapDistance*P3g);K3g.attachedMesh.position.addInPlace(o3g);y3g.snapDistance=K3g.snapDistance*P3g;K3g.onSnapObservable.notifyObservers(y3g);}}),K3g._pointerObserver=p3g.utilityLayerScene.onPointerObservable.add(function(s3g,T3g){var O3g;if(!K3g._customMeshSet){O3g=s3g.pickInfo&&-(G3CX.j4CX-d4lX.I4XX)!=K3g._rootMesh.getChildMeshes().indexOf(s3g.pickInfo.pickedMesh)?q3g:i3g;K3g._rootMesh.getChildMeshes().forEach(function(H7g){H7g.material=O3g;H7g.color&&(H7g.color=O3g.emissiveColor);});}}),K3g;}return N0(z3g,t3g),z3g.prototype._attachedMeshChanged=function(U7g){this.dragBehavior&&(this.dragBehavior.enabled=!!U7g);},z3g.prototype.dispose=function(){this.onSnapObservable.clear();this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);this.dragBehavior.detach();t3g.prototype.dispose.call(this);},z3g;}(I4.Gizmo);I4.AxisDragGizmo=N3Z;g4=Q0||(Q0={});l3Z=function(d7g){function Y7g(D7g,V7g,r7g){var P2PX=G3CX;var W03X=.4;var R2CX=265;var S7g,Q7g,J7g,G7g,v7g,w7g,m7g,h7g;void(P2PX.k4CX|d4lX.I4XX)===V7g&&(V7g=g4.Color3.Gray());void d4lX.I4XX===r7g&&(r7g=g4.UtilityLayerRenderer.DefaultUtilityLayer);S7g=d7g.call(this,r7g)||this;S7g._pointerObserver=P2PX.X4CX;d4lX.i4XX(d4lX.w4XX);S7g.snapDistance=d4lX.r4XX(d4lX.I4XX,P2PX.k4CX);S7g.onSnapObservable=new g4.Observable();S7g.uniformScaling=!+P2PX.j4CX;S7g._coloredMaterial=new g4.StandardMaterial(P2PX.e4CX,r7g.utilityLayerScene);d4lX.F4XX(d4lX.n4XX);S7g._coloredMaterial.disableLighting=!d4lX.z4XX(d4lX.I4XX,P2PX.k4CX);S7g._coloredMaterial.emissiveColor=V7g;Q7g=new g4.StandardMaterial(P2PX.e4CX,r7g.utilityLayerScene);d4lX.F4XX(d4lX.n4XX);Q7g.disableLighting=!d4lX.r4XX(d4lX.I4XX,P2PX.k4CX);Q7g.emissiveColor=V7g.add(new g4.Color3(m3uX*d4lX.n4XX,m3uX*d4lX.n4XX,+m3uX));J7g=new g4.AbstractMesh(P2PX.e4CX,r7g.utilityLayerScene);G7g=g4.MeshBuilder.CreateBox(J93X,{size:W03X},r7g.utilityLayerScene);v7g=g4.MeshBuilder.CreateLines(J93X,{points:[new g4.Vector3(P2PX.k4CX|d4lX.I4XX,d4lX.I4XX,P2PX.k4CX|d4lX.I4XX),new g4.Vector3(+P2PX.k4CX,+k3dX.K03X,P2PX.k4CX-d4lX.I4XX)]},r7g.utilityLayerScene);v7g.color=S7g._coloredMaterial.emissiveColor;J7g.addChild(G7g);J7g.addChild(v7g);d4lX.i4XX(d4lX.w4XX);G7g.scaling.scaleInPlace(d4lX.z4XX(d4lX.I4XX,x4uX));G7g.material=S7g._coloredMaterial;G7g.rotation.x=Math.PI/+P2PX.U4CX;d4lX.F4XX(d4lX.w4XX);G7g.position.z+=d4lX.r4XX(d4lX.I4XX,m3uX);d4lX.F4XX(d4lX.I4XX);v7g.scaling.scaleInPlace(d4lX.z4XX(d4lX.n4XX,R03X));d4lX.i4XX(d4lX.R8CX);var L2RR=d4lX.z4XX(d4lX.k8CX,v3CX,d4lX.R8CX,d4lX.Y8CX,d4lX.f8CX);v7g.rotation.x=Math.PI/(P2PX.U4CX*L2RR);v7g.material=S7g._coloredMaterial;J7g.lookAt(S7g._rootMesh.position.subtract(D7g));S7g._rootMesh.addChild(J7g);d4lX.i4XX(R2CX);J7g.scaling.scaleInPlace(d4lX.z4XX(P2PX.l4CX,P2PX.j4CX,d4lX.I4XX));S7g.dragBehavior=new g4.PointerDragBehavior({dragAxis:D7g});S7g.dragBehavior.moveAttached=!d4lX.n4XX;S7g._rootMesh.addBehavior(S7g.dragBehavior);w7g=d4lX.I4XX;m7g=new g4.Vector3();h7g={snapDistance:+P2PX.k4CX};return S7g.dragBehavior.onDragObservable.add(function(j7g){var s14X=G3CX;var W7g,X7g;if(S7g.attachedMesh){d4lX.F4XX(d4lX.n4XX);W7g=!d4lX.z4XX(d4lX.I4XX,s14X.j4CX);d4lX.F4XX(d4lX.I4XX);X7g=d4lX.r4XX(d4lX.n4XX,s14X.k4CX);S7g.uniformScaling?(S7g.attachedMesh.scaling.normalizeToRef(m7g),m7g.y<+s14X.k4CX&&m7g.scaleInPlace(-(s14X.j4CX|d4lX.I4XX))):m7g.copyFrom(D7g);d4lX.I4XX==S7g.snapDistance?m7g.scaleToRef(j7g.dragDistance,m7g):(w7g+=j7g.dragDistance,Math.abs(w7g)>S7g.snapDistance?(X7g=Math.floor(w7g/S7g.snapDistance),w7g%=S7g.snapDistance,m7g.scaleToRef(S7g.snapDistance*X7g,m7g),W7g=!(s14X.k4CX|d4lX.I4XX)):m7g.scaleInPlace(+s14X.k4CX));S7g.attachedMesh.scaling.addInPlace(m7g);W7g&&(h7g.snapDistance=S7g.snapDistance*X7g,S7g.onSnapObservable.notifyObservers(h7g));}}),S7g._pointerObserver=r7g.utilityLayerScene.onPointerObservable.add(function(I7g,x7g){var M7g;if(!S7g._customMeshSet){M7g=I7g.pickInfo&&-+G3CX.j4CX!=S7g._rootMesh.getChildMeshes().indexOf(I7g.pickInfo.pickedMesh)?Q7g:S7g._coloredMaterial;S7g._rootMesh.getChildMeshes().forEach(function(c7g){c7g.material=M7g;c7g.color&&(c7g.color=M7g.emissiveColor);});}}),S7g;}return N0(Y7g,d7g),Y7g.prototype._attachedMeshChanged=function(N7g){this.dragBehavior&&(this.dragBehavior.enabled=!!N7g);},Y7g.prototype.dispose=function(){this.onSnapObservable.clear();this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);this.dragBehavior.detach();d7g.prototype.dispose.call(this);},Y7g.prototype.setCustomMesh=function(A7g,E7g){var l7g;l7g=this;void+G3CX.k4CX===E7g&&(E7g=!(G3CX.j4CX*d4lX.n4XX));d7g.prototype.setCustomMesh.call(this,A7g);E7g&&(this._rootMesh.getChildMeshes().forEach(function(b7g){b7g.material=l7g._coloredMaterial;b7g.color&&(b7g.color=l7g._coloredMaterial.emissiveColor);}),this._customMeshSet=!+G3CX.j4CX);},Y7g;}(g4.Gizmo);g4.AxisScaleGizmo=l3Z;l3=Q0||(Q0={});b3Z=function(C7g){function n7g(Z7g,q7g,a7g,o7g){var i2PX=G3CX;var W2CX=266;var L7g,p7g,F7g,P7g,u7g,e7g,B7g,z7g,i7g,R7g,f7g,t7g,k7g,K7g;void+i2PX.k4CX===q7g&&(q7g=l3.Color3.Gray());void(i2PX.k4CX-d4lX.I4XX)===a7g&&(a7g=l3.UtilityLayerRenderer.DefaultUtilityLayer);void d4lX.I4XX===o7g&&(o7g=+i2PX.b4CX);L7g=C7g.call(this,a7g)||this;L7g._pointerObserver=i2PX.X4CX;L7g.snapDistance=+i2PX.k4CX;L7g.onSnapObservable=new l3.Observable();p7g=new l3.StandardMaterial(i2PX.e4CX,a7g.utilityLayerScene);p7g.disableLighting=!d4lX.I4XX;p7g.emissiveColor=q7g;F7g=new l3.StandardMaterial(i2PX.e4CX,a7g.utilityLayerScene);d4lX.i4XX(d4lX.w4XX);F7g.disableLighting=!d4lX.z4XX(d4lX.I4XX,i2PX.k4CX);F7g.emissiveColor=q7g.add(new l3.Color3(+m3uX,+m3uX,+m3uX));for(var g7g=new l3.AbstractMesh(i2PX.e4CX,a7g.utilityLayerScene),O7g=new Array(),y7g=i2PX.k4CX|d4lX.I4XX;y7gL7g.snapDistance){G4g=Math.floor(f7g/L7g.snapDistance);f7g%=L7g.snapDistance;T7g=L7g.snapDistance*G4g;S4g=!d4lX.I4XX;}else{T7g=+G14X.k4CX;}t7g.reset();L7g.attachedMesh.parent&&(L7g.attachedMesh.parent.computeWorldMatrix().invertToRef(t7g),t7g.getRotationMatrixToRef(t7g),l3.Vector3.TransformCoordinatesToRef(z7g,t7g,z7g));d4lX.F4XX(d4lX.X8CX);H4g=Math.sin(d4lX.r4XX(G14X.U4CX,d4lX.n4XX,T7g));K7g.set(z7g.x*H4g,z7g.y*H4g,z7g.z*H4g,Math.cos(T7g/(G14X.U4CX|d4lX.I4XX)));+G14X.k4CXthis.capacity&&this._depthR8x._padSensibilityUp&&P8x._selectionPointerDown();}));},H8x.prototype._checkTeleportWithRay=function(T8x,s8x){this._teleportationRequestInitiated&&!s8x._teleportationRequestInitiated||(s8x._teleportationRequestInitiated?Math.sqrt(T8x.y*T8x.y+T8x.x*T8x.x)-this._padSensibilityDown&&(H2x._rotationLeftAsked=!d4lX.n4XX):U2x.x<-this._padSensibilityUp&&H2x._dpadPressed&&(H2x._rotationLeftAsked=!d4lX.I4XX,this._rotationAllowed&&this._rotateCamera(!d4lX.n4XX)),H2x._rotationRightAsked?U2x.xthis._padSensibilityUp&&H2x._dpadPressed&&(H2x._rotationRightAsked=!+p68X.k4CX,this._rotationAllowed&&this._rotateCamera(!(p68X.k4CX*d4lX.n4XX))));},H8x.prototype._checkTeleportBackwards=function(J2x,d2x){var S2x,m2x,r2x,Y2x;if(!d2x._teleportationRequestInitiated)if(J2x.y>this._padSensibilityUp&&d2x._dpadPressed){if(!d2x._teleportationBackRequestInitiated){if(!this.currentVRCamera){return;}S2x=e0.Quaternion.FromRotationMatrix(this.currentVRCamera.getWorldMatrix().getRotationMatrix());m2x=this.currentVRCamera.position;this.currentVRCamera.devicePosition&&this.currentVRCamera.deviceRotationQuaternion&&(S2x=this.currentVRCamera.deviceRotationQuaternion,m2x=this.currentVRCamera.devicePosition);S2x.toEulerAnglesToRef(this._workingVector);this._workingVector.z=+p68X.k4CX;d4lX.F4XX(d4lX.w4XX);this._workingVector.x=d4lX.z4XX(d4lX.I4XX,p68X.k4CX);e0.Quaternion.RotationYawPitchRollToRef(this._workingVector.y,this._workingVector.x,this._workingVector.z,this._workingQuaternion);this._workingQuaternion.toRotationMatrix(this._workingMatrix);e0.Vector3.TransformCoordinatesToRef(this._teleportBackwardsVector,this._workingMatrix,this._workingVector);r2x=new e0.Ray(m2x,this._workingVector);Y2x=this._scene.pickWithRay(r2x,this._raySelectionPredicate);Y2x&&Y2x.pickedPoint&&Y2x.pickedMesh&&this._isTeleportationFloor(Y2x.pickedMesh)&&Y2x.distance<+p68X.V8uX&&this.teleportCamera(Y2x.pickedPoint);d2x._teleportationBackRequestInitiated=!+p68X.k4CX;}}else{d2x._teleportationBackRequestInitiated=!+p68X.j4CX;}},H8x.prototype._enableTeleportationOnController=function(G2x){var v2x;v2x=this;G2x.webVRController.mesh&&(G2x._interactionsEnabled||this._enableInteractionOnController(G2x),G2x._interactionsEnabled=!(p68X.k4CX-d4lX.I4XX),G2x._teleportationEnabled=!+p68X.k4CX,G2x.webVRController.controllerType===e0.PoseEnabledControllerType.VIVE&&(G2x._dpadPressed=!d4lX.n4XX,G2x.webVRController.onPadStateChangedObservable.add(function(w2x){G2x._dpadPressed=w2x.pressed;G2x._dpadPressed||(G2x._rotationLeftAsked=!(p68X.j4CX|d4lX.I4XX),G2x._rotationRightAsked=!(p68X.j4CX*d4lX.n4XX),G2x._teleportationBackRequestInitiated=!(p68X.j4CX*d4lX.n4XX));})),G2x.webVRController.onPadValuesChangedObservable.add(function(V2x){v2x.teleportationEnabled&&(v2x._checkTeleportBackwards(V2x,G2x),v2x._checkTeleportWithRay(V2x,G2x));v2x._checkRotate(V2x,G2x);}));},H8x.prototype._createTeleportationCircles=function(){var v7PX=x3uX;var c43X="position.y";var x43X="animationInnerCircle";var D2x,Q2x,j2x,h2x,W2x,X2x,M2x;d4lX.i4XX(d4lX.w4XX);this._teleportationTarget=e0.Mesh.CreateGround(Y43X,d4lX.r4XX(d4lX.I4XX,p68X.U4CX),d4lX.z4XX(d4lX.I4XX,p68X.U4CX,d4lX.i4XX(d4lX.n4XX)),+p68X.U4CX,this._scene);this._teleportationTarget.isPickable=!+p68X.j4CX;D2x=new e0.DynamicTexture(k3dX.L43X,+v7PX.f0uX,this._scene,!+p68X.k4CX);d4lX.i4XX(d4lX.I4XX);D2x.hasAlpha=!d4lX.r4XX(d4lX.n4XX,p68X.k4CX);Q2x=D2x.getContext();Q2x.beginPath();d4lX.i4XX(d4lX.w4XX);Q2x.arc(+v7PX.H4uX,d4lX.r4XX(d4lX.I4XX,v7PX.H4uX),N6CX,d4lX.r4XX(d4lX.I4XX,p68X.k4CX),+p68X.U4CX*Math.PI,!(p68X.j4CX*d4lX.n4XX));Q2x.fillStyle=this._teleportationFillColor;Q2x.fill();Q2x.lineWidth=+p68X.u3uX;Q2x.strokeStyle=this._teleportationBorderColor;Q2x.stroke();Q2x.closePath();D2x.update();j2x=new e0.StandardMaterial(k3dX.e43X,this._scene);j2x.diffuseTexture=D2x;this._teleportationTarget.material=j2x;d4lX.i4XX(d4lX.w4XX);h2x=e0.Mesh.CreateTorus(A43X,d4lX.z4XX(d4lX.I4XX,J9dX),+x4uX,+k3dX.A3fX,this._scene,!+p68X.j4CX);d4lX.F4XX(d4lX.w4XX);h2x.isPickable=!d4lX.r4XX(d4lX.I4XX,p68X.j4CX);h2x.parent=this._teleportationTarget;d4lX.i4XX(d4lX.I4XX);W2x=new e0.Animation(x43X,c43X,d4lX.r4XX(d4lX.n4XX,v7PX.V8LX),e0.Animation.ANIMATIONTYPE_FLOAT,e0.Animation.ANIMATIONLOOPMODE_CYCLE);X2x=[];X2x.push({frame:p68X.k4CX-d4lX.I4XX,value:+p68X.k4CX});X2x.push({frame:d4lX.b8CX,value:d7LX*d4lX.n4XX});X2x.push({frame:+v7PX.B1uX,value:p68X.k4CX|d4lX.I4XX});W2x.setKeys(X2x);M2x=new e0.SineEase();M2x.setEasingMode(e0.EasingFunction.EASINGMODE_EASEINOUT);W2x.setEasingFunction(M2x);h2x.animations=[];h2x.animations.push(W2x);d4lX.i4XX(d4lX.w4XX);this._scene.beginAnimation(h2x,d4lX.I4XX,d4lX.r4XX(d4lX.I4XX,v7PX.B1uX),!+p68X.k4CX);this._hideTeleportationTarget();},H8x.prototype._displayTeleportationTarget=function(){this._teleportActive=!+p68X.k4CX;this._teleportationInitialized&&(this._teleportationTarget.isVisible=!+p68X.k4CX,this._isDefaultTeleportationTarget&&(this._teleportationTarget.getChildren()[+p68X.k4CX].isVisible=!(p68X.k4CX-d4lX.I4XX)));},H8x.prototype._hideTeleportationTarget=function(){d4lX.i4XX(d4lX.I4XX);this._teleportActive=!d4lX.z4XX(d4lX.n4XX,p68X.j4CX);this._teleportationInitialized&&(this._teleportationTarget.isVisible=!(p68X.j4CX*d4lX.n4XX),this._isDefaultTeleportationTarget&&(this._teleportationTarget.getChildren()[p68X.k4CX-d4lX.I4XX].isVisible=!(p68X.j4CX-d4lX.I4XX)));},H8x.prototype._rotateCamera=function(n2x){var T43X="animationRotation";var A2x,b2x,c2x,N2x,E2x,I2x,l2x,x2x;A2x=this;if(this.currentVRCamera instanceof e0.FreeCamera){n2x?this._rotationAngle++:this._rotationAngle--;this.currentVRCamera.animations=[];b2x=e0.Quaternion.FromRotationMatrix(e0.Matrix.RotationY(Math.PI/(p68X.t4CX|d4lX.I4XX)*this._rotationAngle));c2x=new e0.Animation(T43X,c0uX,L3CX,e0.Animation.ANIMATIONTYPE_QUATERNION,e0.Animation.ANIMATIONLOOPMODE_CONSTANT);N2x=[];N2x.push({frame:p68X.k4CX|d4lX.I4XX,value:this.currentVRCamera.rotationQuaternion});N2x.push({frame:+p68X.O8uX,value:b2x});c2x.setKeys(N2x);c2x.setEasingFunction(this._circleEase);this.currentVRCamera.animations.push(c2x);this._postProcessMove.animations=[];E2x=new e0.Animation(M43X,f73X,+k3dX.N43X,e0.Animation.ANIMATIONTYPE_FLOAT,e0.Animation.ANIMATIONLOOPMODE_CONSTANT);I2x=[];I2x.push({frame:p68X.k4CX*d4lX.n4XX,value:d4lX.I4XX});I2x.push({frame:+p68X.l4CX,value:d4lX.J4XX});I2x.push({frame:p68X.O8uX*d4lX.n4XX,value:d4lX.I4XX});E2x.setKeys(I2x);E2x.setEasingFunction(this._circleEase);this._postProcessMove.animations.push(E2x);d4lX.F4XX(d4lX.w4XX);l2x=new e0.Animation(h43X,d73X,d4lX.z4XX(d4lX.I4XX,k3dX.N43X),e0.Animation.ANIMATIONTYPE_FLOAT,e0.Animation.ANIMATIONLOOPMODE_CONSTANT);x2x=[];x2x.push({frame:+p68X.k4CX,value:p68X.k4CX*d4lX.n4XX});x2x.push({frame:+p68X.l4CX,value:+p68X.u3uX});x2x.push({frame:+p68X.O8uX,value:p68X.k4CX|d4lX.I4XX});l2x.setKeys(x2x);l2x.setEasingFunction(this._circleEase);this._postProcessMove.animations.push(l2x);this._postProcessMove.imageProcessingConfiguration.vignetteWeight=+p68X.k4CX;this._postProcessMove.imageProcessingConfiguration.vignetteStretch=+p68X.k4CX;d4lX.i4XX(d4lX.w4XX);this._postProcessMove.samples=d4lX.z4XX(d4lX.I4XX,p68X.t4CX);this._webVRCamera.attachPostProcess(this._postProcessMove);this._scene.beginAnimation(this._postProcessMove,p68X.k4CX|d4lX.I4XX,p68X.O8uX|d4lX.I4XX,!+p68X.j4CX,p68X.j4CX*d4lX.n4XX,function(){A2x._webVRCamera.detachPostProcess(A2x._postProcessMove);});this._scene.beginAnimation(this.currentVRCamera,+p68X.k4CX,p68X.O8uX-d4lX.I4XX,!d4lX.n4XX,d4lX.n4XX);}},H8x.prototype._moveTeleportationSelectorTo=function(L2x,t2x,K2x){var C2x,a2x,z2x;if(L2x.pickedPoint){t2x._teleportationRequestInitiated&&(this._displayTeleportationTarget(),this._haloCenter.copyFrom(L2x.pickedPoint),this._teleportationTarget.position.copyFrom(L2x.pickedPoint));C2x=this._convertNormalToDirectionOfRay(L2x.getNormal(!d4lX.I4XX,!(p68X.j4CX|d4lX.I4XX)),K2x);if(C2x){a2x=e0.Vector3.Cross(e0.Axis.Y,C2x);z2x=e0.Vector3.Cross(C2x,a2x);e0.Vector3.RotationFromAxisToRef(z2x,C2x,a2x,this._teleportationTarget.rotation);}this._teleportationTarget.position.y+=N8rX;}},H8x.prototype.teleportCamera=function(e2x){var b7PX=x3uX;var V43X="animationCameraTeleportation";var p2x,k2x,Z2x,f2x,i2x,g2x,u2x;p2x=this;if(this.currentVRCamera instanceof e0.FreeCamera){this.webVRCamera.leftCamera?(this._workingVector.copyFrom(this.webVRCamera.leftCamera.globalPosition),this._workingVector.subtractInPlace(this.webVRCamera.position),e2x.subtractToRef(this._workingVector,this._workingVector)):this._workingVector.copyFrom(e2x);this.isInVRMode?this._workingVector.y+=this.webVRCamera.deviceDistanceToRoomGround()*this._webVRCamera.deviceScaleFactor:this._workingVector.y+=this._defaultHeight;this.onBeforeCameraTeleport.notifyObservers(this._workingVector);this.currentVRCamera.animations=[];d4lX.i4XX(d4lX.I4XX);k2x=new e0.Animation(V43X,b7PX.L0uX,d4lX.z4XX(d4lX.n4XX,k3dX.N43X),e0.Animation.ANIMATIONTYPE_VECTOR3,e0.Animation.ANIMATIONLOOPMODE_CONSTANT);Z2x=[{frame:d4lX.I4XX,value:this.currentVRCamera.position},{frame:b7PX.c3uX-d4lX.I4XX,value:this._workingVector}];k2x.setKeys(Z2x);k2x.setEasingFunction(this._circleEase);this.currentVRCamera.animations.push(k2x);this._postProcessMove.animations=[];d4lX.i4XX(d4lX.n4XX);f2x=new e0.Animation(M43X,f73X,d4lX.z4XX(d4lX.I4XX,k3dX.N43X),e0.Animation.ANIMATIONTYPE_FLOAT,e0.Animation.ANIMATIONLOOPMODE_CONSTANT);i2x=[];i2x.push({frame:d4lX.I4XX,value:+p68X.k4CX});i2x.push({frame:+p68X.V8uX,value:p68X.Y4CX|d4lX.I4XX});i2x.push({frame:b7PX.c3uX|d4lX.I4XX,value:p68X.k4CX*d4lX.n4XX});f2x.setKeys(i2x);this._postProcessMove.animations.push(f2x);g2x=new e0.Animation(h43X,d73X,L3CX,e0.Animation.ANIMATIONTYPE_FLOAT,e0.Animation.ANIMATIONLOOPMODE_CONSTANT);u2x=[];u2x.push({frame:+p68X.k4CX,value:p68X.k4CX-d4lX.I4XX});u2x.push({frame:d4lX.K8CX,value:p68X.u3uX|d4lX.I4XX});u2x.push({frame:+b7PX.c3uX,value:d4lX.I4XX});g2x.setKeys(u2x);this._postProcessMove.animations.push(g2x);this._postProcessMove.imageProcessingConfiguration.vignetteWeight=d4lX.I4XX;d4lX.F4XX(d4lX.w4XX);this._postProcessMove.imageProcessingConfiguration.vignetteStretch=d4lX.r4XX(d4lX.I4XX,p68X.k4CX);this._webVRCamera.attachPostProcess(this._postProcessMove);this._scene.beginAnimation(this._postProcessMove,p68X.k4CX*d4lX.n4XX,+b7PX.c3uX,!+p68X.j4CX,p68X.j4CX-d4lX.I4XX,function(){p2x._webVRCamera.detachPostProcess(p2x._postProcessMove);});this._scene.beginAnimation(this.currentVRCamera,p68X.k4CX-d4lX.I4XX,+b7PX.c3uX,!(p68X.j4CX*d4lX.n4XX),p68X.j4CX*d4lX.n4XX,function(){p2x.onAfterCameraTeleport.notifyObservers(p2x._workingVector);});this._hideTeleportationTarget();}},H8x.prototype._convertNormalToDirectionOfRay=function(q2x,F2x){q2x&&(Math.acos(e0.Vector3.Dot(q2x,F2x.direction))J1x.halfWidth)&&this._joystickPointerID<+R54X.k4CX?(this._joystickPointerID=j1x.pointerId,this._joystickPointerStartPos.x=j1x.clientX,this._joystickPointerStartPos.y=j1x.clientY,this._joystickPointerPos=this._joystickPointerStartPos.clone(),this._joystickPreviousPointerPos=this._joystickPointerStartPos.clone(),this._deltaJoystickVector.x=+R54X.k4CX,this._deltaJoystickVector.y=R54X.k4CX|d4lX.I4XX,this.pressed=!+R54X.k4CX,this._touches.add(j1x.pointerId.toString(),j1x)):J1x._globalJoystickIndex<+R54X.U4CX&&this._action&&(this._action(),this._touches.add(j1x.pointerId.toString(),{x:j1x.clientX,y:j1x.clientY,prevX:j1x.clientX,prevY:j1x.clientY}));},J1x.prototype._onPointerMove=function(M1x){var W54X=G3CX;var d5CX=2576;var I1x,x1x,c1x;if(this._joystickPointerID==M1x.pointerId){this._joystickPointerPos.x=M1x.clientX;this._joystickPointerPos.y=M1x.clientY;this._deltaJoystickVector=this._joystickPointerPos.clone();this._deltaJoystickVector=this._deltaJoystickVector.subtract(this._joystickPointerStartPos);d4lX.F4XX(W54X.O2CX);var A2RR=d4lX.z4XX(d4lX.W8CX,d4lX.R8CX,d4lX.l8CX,d5CX,d4lX.t8CX);I1x=(this.reverseLeftRight?-+W54X.j4CX:W54X.j4CX*A2RR)*this._deltaJoystickVector.x/this._inversedSensibility;switch(this._axisTargetedByLeftAndRight){case d1x.X:d4lX.F4XX(d4lX.I4XX);this.deltaPosition.x=Math.min(d4lX.r4XX(d4lX.n4XX,W54X.j4CX),Math.max(-+W54X.j4CX,I1x));break;case d1x.Y:d4lX.i4XX(d4lX.I4XX);this.deltaPosition.y=Math.min(d4lX.r4XX(d4lX.n4XX,W54X.j4CX),Math.max(-(W54X.j4CX*d4lX.n4XX),I1x));break;case d1x.Z:d4lX.F4XX(d4lX.n4XX);this.deltaPosition.z=Math.min(d4lX.z4XX(d4lX.I4XX,W54X.j4CX),Math.max(-d4lX.n4XX,I1x));}x1x=(this.reverseUpDown?+W54X.j4CX:-(W54X.j4CX|d4lX.I4XX))*this._deltaJoystickVector.y/this._inversedSensibility;switch(this._axisTargetedByUpAndDown){case d1x.X:this.deltaPosition.x=Math.min(+W54X.j4CX,Math.max(-+W54X.j4CX,x1x));break;case d1x.Y:this.deltaPosition.y=Math.min(d4lX.n4XX,Math.max(-(W54X.j4CX-d4lX.I4XX),x1x));break;case d1x.Z:this.deltaPosition.z=Math.min(+W54X.j4CX,Math.max(-+W54X.j4CX,x1x));}}else{c1x=this._touches.get(M1x.pointerId.toString());c1x&&(c1x.x=M1x.clientX,c1x.y=M1x.clientY);}},J1x.prototype._onPointerUp=function(E1x){var y54X=k3dX;var N1x;if(this._joystickPointerID==E1x.pointerId){J1x.vjCanvasContext.clearRect(this._joystickPointerStartPos.x-(x3uX.U7uX|d4lX.I4XX),this._joystickPointerStartPos.y-x3uX.U7uX*d4lX.n4XX,G3CX.E7CX,y54X.A0dX-d4lX.I4XX),J1x.vjCanvasContext.clearRect(this._joystickPreviousPointerPos.x-y54X.K8UX*d4lX.n4XX,this._joystickPreviousPointerPos.y-+y54X.K8UX,y54X.S93X|d4lX.I4XX,C3CX),this._joystickPointerID=-d4lX.n4XX,this.pressed=!+G3CX.j4CX;}else{N1x=this._touches.get(E1x.pointerId.toString());N1x&&J1x.vjCanvasContext.clearRect(N1x.prevX-+y54X.R8UX,N1x.prevY-d4lX.M8CX,y54X.r23X*d4lX.n4XX,+y54X.r23X);}this._deltaJoystickVector.x=+G3CX.k4CX;d4lX.F4XX(d4lX.n4XX);this._deltaJoystickVector.y=d4lX.z4XX(d4lX.I4XX,G3CX.k4CX);this._touches.remove(E1x.pointerId.toString());},J1x.prototype.setJoystickColor=function(l1x){this._joystickColor=l1x;},J1x.prototype.setActionOnTouch=function(A1x){this._action=A1x;},J1x.prototype.setAxisForLeftRight=function(b1x){switch(b1x){case d1x.X:case d1x.Y:case d1x.Z:this._axisTargetedByLeftAndRight=b1x;break;default:this._axisTargetedByLeftAndRight=d1x.X;}},J1x.prototype.setAxisForUpDown=function(n1x){switch(n1x){case d1x.X:case d1x.Y:case d1x.Z:this._axisTargetedByUpAndDown=n1x;break;default:this._axisTargetedByUpAndDown=d1x.Y;}},J1x.prototype._drawVirtualJoystick=function(){var C1x;C1x=this;this.pressed&&this._touches.forEach(function(a1x,L1x){var G5NX=G3CX;var a5NX=k3dX;var s5NX=x3uX;L1x.pointerId===C1x._joystickPointerID?(J1x.vjCanvasContext.clearRect(C1x._joystickPointerStartPos.x-+s5NX.U7uX,C1x._joystickPointerStartPos.y-(s5NX.U7uX-d4lX.I4XX),+a5NX.A0dX,a5NX.A0dX*d4lX.n4XX),J1x.vjCanvasContext.clearRect(C1x._joystickPreviousPointerPos.x-(a5NX.K8UX|d4lX.I4XX),C1x._joystickPreviousPointerPos.y-+a5NX.K8UX,a5NX.S93X|d4lX.I4XX,+a5NX.S93X),J1x.vjCanvasContext.beginPath(),J1x.vjCanvasContext.lineWidth=+G5NX.O8uX,J1x.vjCanvasContext.strokeStyle=C1x._joystickColor,J1x.vjCanvasContext.arc(C1x._joystickPointerStartPos.x,C1x._joystickPointerStartPos.y,+s5NX.S1rX,d4lX.I4XX,+G5NX.U4CX*Math.PI,!+G5NX.k4CX),J1x.vjCanvasContext.stroke(),J1x.vjCanvasContext.closePath(),J1x.vjCanvasContext.beginPath(),J1x.vjCanvasContext.strokeStyle=C1x._joystickColor,J1x.vjCanvasContext.lineWidth=+G5NX.U4CX,J1x.vjCanvasContext.arc(C1x._joystickPointerStartPos.x,C1x._joystickPointerStartPos.y,+s5NX.B1uX,G5NX.k4CX|d4lX.I4XX,+G5NX.U4CX*Math.PI,!(G5NX.k4CX-d4lX.I4XX)),J1x.vjCanvasContext.stroke(),J1x.vjCanvasContext.closePath(),J1x.vjCanvasContext.beginPath(),J1x.vjCanvasContext.strokeStyle=C1x._joystickColor,J1x.vjCanvasContext.arc(C1x._joystickPointerPos.x,C1x._joystickPointerPos.y,+s5NX.S1rX,+G5NX.k4CX,(G5NX.U4CX|d4lX.I4XX)*Math.PI,!(G5NX.k4CX-d4lX.I4XX)),J1x.vjCanvasContext.stroke(),J1x.vjCanvasContext.closePath(),C1x._joystickPreviousPointerPos=C1x._joystickPointerPos.clone()):(J1x.vjCanvasContext.clearRect(L1x.prevX-a5NX.R8UX*d4lX.n4XX,L1x.prevY-+a5NX.R8UX,a5NX.r23X|d4lX.I4XX,a5NX.r23X*d4lX.n4XX),J1x.vjCanvasContext.beginPath(),J1x.vjCanvasContext.fillStyle=k4dX,J1x.vjCanvasContext.beginPath(),J1x.vjCanvasContext.strokeStyle=a5NX.W8UX,J1x.vjCanvasContext.lineWidth=G5NX.O8uX|d4lX.I4XX,J1x.vjCanvasContext.arc(L1x.x,L1x.y,d4lX.e8CX,+G5NX.k4CX,d4lX.w4XX*Math.PI,!(G5NX.k4CX|d4lX.I4XX)),J1x.vjCanvasContext.stroke(),J1x.vjCanvasContext.closePath(),L1x.prevX=L1x.x,L1x.prevY=L1x.y);});requestAnimationFrame(function(){C1x._drawVirtualJoystick();});},J1x.prototype.releaseCanvas=function(){J1x.vjCanvas&&(J1x.vjCanvas.removeEventListener(x3uX.h3rX,this._onPointerDownHandlerRef),J1x.vjCanvas.removeEventListener(x3uX.T3rX,this._onPointerMoveHandlerRef),J1x.vjCanvas.removeEventListener(x3uX.V3rX,this._onPointerUpHandlerRef),J1x.vjCanvas.removeEventListener(x3uX.C1uX,this._onPointerUpHandlerRef),window.removeEventListener(k3dX.E9dX,this._onResize),document.body.removeChild(J1x.vjCanvas),J1x.vjCanvas=G3CX.X4CX);},J1x._globalJoystickIndex=G3CX.k4CX|d4lX.I4XX,J1x;}();S1x.VirtualJoystick=r1x;}(Q0||(Q0={})));(function(z1x){var d8UX="VirtualJoysticksCamera";var t1x;z1x.Node.AddNodeConstructor(d8UX,function(K1x,p1x){return function(){return new t1x(K1x,z1x.Vector3.Zero(),p1x);};});t1x=function(u1x){function i1x(f1x,g1x,e1x){var k1x;k1x=u1x.call(this,f1x,g1x,e1x)||this;return k1x.inputs.addVirtualJoystick(),k1x;}return N0(i1x,u1x),i1x.prototype.getClassName=function(){return d8UX;},i1x;}(z1x.FreeCamera);z1x.VirtualJoysticksCamera=t1x;}(Q0||(Q0={})));w2=Q0||(Q0={});S6Z=function(){function Z1x(){}return Z1x.prototype.getLeftJoystick=function(){return this._leftjoystick;},Z1x.prototype.getRightJoystick=function(){return this._rightjoystick;},Z1x.prototype.checkInputs=function(){var g8UX=.9;var q1x,F1x,o1x,y1x;if(this._leftjoystick){q1x=this.camera;F1x=(x3uX.c4LX-d4lX.I4XX)*q1x._computeLocalCameraSpeed();o1x=w2.Matrix.RotationYawPitchRoll(q1x.rotation.y,q1x.rotation.x,d4lX.I4XX);y1x=w2.Vector3.TransformCoordinates(new w2.Vector3(this._leftjoystick.deltaPosition.x*F1x,this._leftjoystick.deltaPosition.y*F1x,this._leftjoystick.deltaPosition.z*F1x),o1x);q1x.cameraDirection=q1x.cameraDirection.add(y1x);q1x.cameraRotation=q1x.cameraRotation.addVector3(this._rightjoystick.deltaPosition);this._leftjoystick.pressed||(this._leftjoystick.deltaPosition=this._leftjoystick.deltaPosition.scale(v4uX*d4lX.n4XX));this._rightjoystick.pressed||(this._rightjoystick.deltaPosition=this._rightjoystick.deltaPosition.scale(g8UX));}},Z1x.prototype.attachControl=function(R1x,B1x){this._leftjoystick=new w2.VirtualJoystick(!d4lX.I4XX);this._leftjoystick.setAxisForUpDown(w2.JoystickAxis.Z);this._leftjoystick.setAxisForLeftRight(w2.JoystickAxis.X);this._leftjoystick.setJoystickSensibility(P1fX);d4lX.i4XX(d4lX.n4XX);this._rightjoystick=new w2.VirtualJoystick(!d4lX.r4XX(d4lX.I4XX,G3CX.j4CX));this._rightjoystick.setAxisForUpDown(w2.JoystickAxis.X);this._rightjoystick.setAxisForLeftRight(w2.JoystickAxis.Y);this._rightjoystick.reverseUpDown=!d4lX.I4XX;this._rightjoystick.setJoystickSensibility(+R7LX);this._rightjoystick.setJoystickColor(k3dX.y8UX);},Z1x.prototype.detachControl=function(P1x){this._leftjoystick.releaseCanvas();this._rightjoystick.releaseCanvas();},Z1x.prototype.getClassName=function(){var f8UX="FreeCameraVirtualJoystickInput";return f8UX;},Z1x.prototype.getSimpleName=function(){var O8UX="virtualJoystick";return O8UX;},Z1x;}();w2.FreeCameraVirtualJoystickInput=S6Z;w2.CameraInputTypes.FreeCameraVirtualJoystickInput=S6Z;(function(O1x){var S8UX="QUADRATIC";var m5S,H5S,U5S,T1x,d5S,S5S,s1x,r5S,Y5S;m5S=function(J5S,G5S,v5S){this.quality=J5S;this.distance=G5S;this.optimizeMesh=v5S;};O1x.SimplificationSettings=m5S;T1x=function(){function w5S(){this.running=!+G3CX.j4CX;this._simplificationArray=[];}return w5S.prototype.addTask=function(V5S){this._simplificationArray.push(V5S);},w5S.prototype.executeNext=function(){var Q5S;Q5S=this._simplificationArray.pop();Q5S?(this.running=!d4lX.I4XX,this.runSimplification(Q5S)):this.running=!+G3CX.j4CX;},w5S.prototype.runSimplification=function(h5S){var D5S,X5S;D5S=this;if(h5S.parallelProcessing){h5S.settings.forEach(function(W5S){D5S.getSimplifier(h5S).simplify(W5S,function(j5S){h5S.mesh.addLODLevel(W5S.distance,j5S);j5S.isVisible=!d4lX.I4XX;W5S.quality===h5S.settings[h5S.settings.length-d4lX.n4XX].quality&&h5S.successCallback&&h5S.successCallback();D5S.executeNext();});});}else{X5S=this.getSimplifier(h5S);O1x.AsyncLoop.Run(h5S.settings.length,function(I5S){var M5S,x5S;M5S=h5S.settings[I5S.index];x5S=function(){I5S.executeNext();};X5S.simplify(M5S,function(c5S){h5S.mesh.addLODLevel(M5S.distance,c5S);c5S.isVisible=!+G3CX.k4CX;x5S();});},function(){h5S.successCallback&&h5S.successCallback();D5S.executeNext();});}},w5S.prototype.getSimplifier=function(N5S){switch(N5S.simplificationType){case H5S.QUADRATIC:default:return new Y5S(N5S.mesh);}},w5S;}();O1x.SimplificationQueue=T1x;d4lX.i4XX(d4lX.w4XX);(U5S=H5S=O1x.SimplificationType||(O1x.SimplificationType={}))[U5S.QUADRATIC=d4lX.z4XX(d4lX.I4XX,G3CX.k4CX)]=S8UX;d5S=function(E5S){this.vertices=E5S;this.error=new Array(d4lX.J4XX);this.deleted=!d4lX.n4XX;d4lX.i4XX(d4lX.n4XX);this.isDirty=!d4lX.z4XX(d4lX.I4XX,G3CX.j4CX);this.deletePending=!+G3CX.j4CX;d4lX.F4XX(d4lX.w4XX);this.borderFactor=d4lX.z4XX(d4lX.I4XX,G3CX.k4CX);};S5S=function(){function l5S(A5S,b5S){this.position=A5S;this.id=b5S;d4lX.F4XX(d4lX.n4XX);this.isBorder=!d4lX.z4XX(d4lX.I4XX,G3CX.k4CX);this.q=new s1x();this.triangleCount=+G3CX.k4CX;this.triangleStart=+G3CX.k4CX;this.originalOffsets=[];}return l5S.prototype.updatePosition=function(n5S){this.position.copyFrom(n5S);},l5S;}();s1x=function(){function C5S(a5S){d4lX.F4XX(d4lX.n4XX);this.data=new Array(d4lX.z4XX(d4lX.I4XX,G3CX.u3uX));for(var L5S=d4lX.I4XX;L5S<+G3CX.u3uX;++L5S){a5S&&a5S[L5S]?this.data[L5S]=a5S[L5S]:this.data[L5S]=+G3CX.k4CX;}}return C5S.prototype.det=function(z5S,t5S,K5S,p5S,i5S,u5S,k5S,f5S,g5S){return this.data[z5S]*this.data[i5S]*this.data[g5S]+this.data[K5S]*this.data[p5S]*this.data[f5S]+this.data[t5S]*this.data[u5S]*this.data[k5S]-this.data[K5S]*this.data[i5S]*this.data[k5S]-this.data[z5S]*this.data[u5S]*this.data[f5S]-this.data[t5S]*this.data[p5S]*this.data[g5S];},C5S.prototype.addInPlace=function(Z5S){for(var e5S=d4lX.I4XX;e5SN6S||l6S.deleted||l6S.isDirty))for(var b6S=C8iX.k4CX*d4lX.n4XX;b6S>d4lX.I4XX,function(U0S){var T6S,H0S,s6S;if(y6S){T6S=U0S+q6S.verticesStart;d4lX.i4XX(d4lX.K3CX);H0S=O1x.Vector3.FromArray(y6S,d4lX.r4XX(G3CX.l4CX,T6S));s6S=function(d0S){if(O6S)for(var Y0S=+G3CX.k4CX;Y0Sthis.maximumSize&&(i3S.scale(this.step),k3S=!d4lX.n4XX);}}return k3S;},L3S;}(Q3S.SceneOptimization=h3S);Q3S.TextureOptimization=D3S;c3S=function(q3S){function Z3S(o3S,y3S,R3S){var A54X=G3CX;var F3S;void(A54X.k4CX-d4lX.I4XX)===o3S&&(o3S=+A54X.k4CX);void(A54X.k4CX-d4lX.I4XX)===y3S&&(y3S=d4lX.w4XX);void(A54X.k4CX*d4lX.n4XX)===R3S&&(R3S=+n3uX);F3S=q3S.call(this,o3S)||this;return F3S.priority=o3S,F3S.maximumScale=y3S,F3S.step=R3S,F3S._currentScale=-d4lX.n4XX,F3S._directionOffset=+A54X.j4CX,F3S;}return N0(Z3S,q3S),Z3S.prototype.getDescription=function(){var k8UX="Setting hardware scaling level to ";return k8UX+this._currentScale;},Z3S.prototype.apply=function(B3S,P3S){return-d4lX.n4XX===this._currentScale&&(this._currentScale=B3S.getEngine().getHardwareScalingLevel(),this._currentScale>this.maximumScale&&(this._directionOffset=-(G3CX.j4CX*d4lX.n4XX))),this._currentScale+=this._directionOffset*this.step,B3S.getEngine().setHardwareScalingLevel(this._currentScale),+G3CX.j4CX===this._directionOffset?this._currentScale>=this.maximumScale:this._currentScale<=this.maximumScale;},Z3S;}(h3S);Q3S.HardwareScalingOptimization=c3S;W3S=function(s3S){function O3S(){return G3CX.X4CX!==s3S&&s3S.apply(this,arguments)||this;}return N0(O3S,s3S),O3S.prototype.getDescription=function(){var B8UX="Turning shadows on/off";return B8UX;},O3S.prototype.apply=function(T3S,H7S){return T3S.shadowsEnabled=H7S.isInImprovementMode,!(G3CX.k4CX-d4lX.I4XX);},O3S;}(h3S);Q3S.ShadowsOptimization=W3S;j3S=function(Y7S){function U7S(){return G3CX.X4CX!==Y7S&&Y7S.apply(this,arguments)||this;}return N0(U7S,Y7S),U7S.prototype.getDescription=function(){var m8UX="Turning post-processes on/off";return m8UX;},U7S.prototype.apply=function(d7S,S7S){return d7S.postProcessesEnabled=S7S.isInImprovementMode,!+G3CX.k4CX;},U7S;}(h3S);Q3S.PostProcessesOptimization=j3S;M3S=function(r7S){function m7S(){return G3CX.X4CX!==r7S&&r7S.apply(this,arguments)||this;}return N0(m7S,r7S),m7S.prototype.getDescription=function(){var Z8UX="Turning lens flares on/off";return Z8UX;},m7S.prototype.apply=function(J7S,G7S){return J7S.lensFlaresEnabled=G7S.isInImprovementMode,!+G3CX.k4CX;},m7S;}(h3S);Q3S.LensFlaresOptimization=M3S;E3S=function(w7S){function v7S(){return G3CX.X4CX!==w7S&&w7S.apply(this,arguments)||this;}return N0(v7S,w7S),v7S.prototype.getDescription=function(){var D8UX="Running user defined callback";return this.onGetDescription?this.onGetDescription():D8UX;},v7S.prototype.apply=function(V7S,Q7S){return!this.onApply||this.onApply(V7S,Q7S);},v7S;}(h3S);Q3S.CustomOptimization=E3S;I3S=function(D7S){function h7S(){return G3CX.X4CX!==D7S&&D7S.apply(this,arguments)||this;}return N0(h7S,D7S),h7S.prototype.getDescription=function(){var E8UX="Turning particles on/off";return E8UX;},h7S.prototype.apply=function(X7S,W7S){return X7S.particlesEnabled=W7S.isInImprovementMode,!d4lX.I4XX;},h7S;}(h3S);Q3S.ParticlesOptimization=I3S;x3S=function(M7S){function j7S(){return G3CX.X4CX!==M7S&&M7S.apply(this,arguments)||this;}return N0(j7S,M7S),j7S.prototype.getDescription=function(){var q8UX="Turning render targets off";return q8UX;},j7S.prototype.apply=function(I7S,x7S){return I7S.renderTargetsEnabled=x7S.isInImprovementMode,!+G3CX.k4CX;},j7S;}(h3S);Q3S.RenderTargetsOptimization=x3S;X3S=function(N7S){var s8UX="UpdateSelectionTree";function c7S(){var E7S;E7S=G3CX.X4CX!==N7S&&N7S.apply(this,arguments)||this;return E7S._canBeMerged=function(A7S){var l7S;if(!(A7S instanceof Q3S.Mesh)){return!d4lX.n4XX;}l7S=A7S;return!l7S.isDisposed()&&(!(!l7S.isVisible||!l7S.isEnabled())&&(!(+G3CX.k4CX=this._targetFrameRate){return this._isRunning=!d4lX.n4XX,void this.onSuccessObservable.notifyObservers(this);}for(var W4S=!(y44X.k4CX*d4lX.n4XX),c4S=!+y44X.k4CX,j4S=+y44X.k4CX;j4SK1u.upperRadiusLimit?K1u.upperRadiusLimit:t1u),t1u):+E5JX.k4CX;},e2u.prototype._maintainCameraAboveGround=function(){var Z1u,F1u,o1u,y1u,q1u;Z1u=this;if(!(this._elevationReturnTime<+G3CX.k4CX)){F1u=Z3.Tools.Now-this._lastInteractionTime;o1u=(G3CX.s3uX-d4lX.I4XX)*Math.PI-this._defaultElevation;y1u=+G3CX.s3uX*Math.PI;if(this._attachedCamera&&!this._betaIsAnimating&&this._attachedCamera.beta>y1u&&F1u>=this._elevationReturnWaitTime){d4lX.i4XX(d4lX.I4XX);this._betaIsAnimating=!d4lX.r4XX(d4lX.n4XX,G3CX.k4CX);this.stopAllAnimations();this._betaTransition||(this._betaTransition=Z3.Animation.CreateAnimation(Y4LX,Z3.Animation.ANIMATIONTYPE_FLOAT,+x3uX.B1uX,e2u.EasingFunction));q1u=Z3.Animation.TransitionTo(Y4LX,o1u,this._attachedCamera,this._attachedCamera.getScene(),x3uX.B1uX-d4lX.I4XX,this._betaTransition,this._elevationReturnTime,function(){Z1u._clearAnimationLocks();Z1u.stopAllAnimations();});q1u&&this._animatables.push(q1u);}}},e2u.prototype._getFrustumSlope=function(){var R1u,P1u,B1u,O1u;R1u=this._attachedCamera;if(!R1u){return Z3.Vector2.Zero();}P1u=R1u.getScene().getEngine().getAspectRatio(R1u);B1u=Math.tan(R1u.fov/+G3CX.U4CX);d4lX.i4XX(d4lX.I4XX);O1u=d4lX.z4XX(P1u,B1u);return new Z3.Vector2(O1u,B1u);},e2u.prototype._clearAnimationLocks=function(){d4lX.i4XX(d4lX.I4XX);this._betaIsAnimating=!d4lX.r4XX(d4lX.n4XX,G3CX.j4CX);},e2u.prototype._applyUserInteraction=function(){this.isUserIsMoving&&(this._lastInteractionTime=Z3.Tools.Now,this.stopAllAnimations(),this._clearAnimationLocks());},e2u.prototype.stopAllAnimations=function(){for(this._attachedCamera&&(this._attachedCamera.animations=[]);this._animatables.length;){this._animatables[G3CX.k4CX*d4lX.n4XX]&&(this._animatables[G3CX.k4CX*d4lX.n4XX].onAnimationEnd=G3CX.X4CX,this._animatables[G3CX.k4CX*d4lX.n4XX].stop()),this._animatables.shift();}},Object.defineProperty(e2u.prototype,n3UX,{get:function(){return!!this._attachedCamera&&(G3CX.k4CX-d4lX.I4XX!==this._attachedCamera.inertialAlphaOffset||+G3CX.k4CX!==this._attachedCamera.inertialBetaOffset||+G3CX.k4CX!==this._attachedCamera.inertialRadiusOffset||d4lX.I4XX!==this._attachedCamera.inertialPanningX||(G3CX.k4CX|d4lX.I4XX)!==this._attachedCamera.inertialPanningY||this._isPointerDown);},enumerable:!d4lX.I4XX,configurable:!+V68X.k4CX}),e2u.EasingFunction=new Z3.ExponentialEase(),e2u.EasingMode=Z3.EasingFunction.EASINGMODE_EASEINOUT,e2u.IgnoreBoundsSizeMode=d4lX.I4XX,e2u.FitFrustumSidesMode=+V68X.j4CX,e2u;}();Z3.FramingBehavior=t7Z;U1=Q0||(Q0={});p7Z=function(){var J3UX="autoTransitionRange";function s1u(){var w3UX="450";this.transitionDuration=+w3UX;d4lX.F4XX(d4lX.n4XX);this.lowerRadiusTransitionRange=d4lX.z4XX(d4lX.I4XX,G3CX.U4CX);d4lX.i4XX(d4lX.I4XX);this.upperRadiusTransitionRange=-d4lX.z4XX(d4lX.n4XX,G3CX.U4CX);this._autoTransitionRange=!d4lX.n4XX;this._radiusIsAnimating=!+G3CX.j4CX;this._radiusBounceTransition=G3CX.X4CX;this._animatables=new Array();}return Object.defineProperty(s1u.prototype,x3uX.G0uX,{get:function(){var P3UX="Bouncing";return P3UX;},enumerable:!(G3CX.k4CX-d4lX.I4XX),configurable:!+G3CX.k4CX}),Object.defineProperty(s1u.prototype,J3UX,{get:function(){return this._autoTransitionRange;},set:function(H5t){var U5t,T1u;U5t=this;if(this._autoTransitionRange!==H5t){this._autoTransitionRange=H5t;T1u=this._attachedCamera;T1u&&(H5t?this._onMeshTargetChangedObserver=T1u.onMeshTargetChangedObservable.add(function(Y5t){var K7UX=.05;var d5t;if(Y5t){d4lX.F4XX(d4lX.n4XX);Y5t.computeWorldMatrix(!d4lX.r4XX(d4lX.I4XX,G3CX.k4CX));d5t=Y5t.getBoundingInfo().diagonalLength;d4lX.i4XX(d4lX.I4XX);U5t.lowerRadiusTransitionRange=d4lX.r4XX(d5t,K7UX);d4lX.F4XX(d4lX.I4XX);U5t.upperRadiusTransitionRange=d4lX.z4XX(d5t,K7UX);}}):this._onMeshTargetChangedObserver&&T1u.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver));}},enumerable:!+G3CX.k4CX,configurable:!(G3CX.k4CX-d4lX.I4XX)}),s1u.prototype.init=function(){},s1u.prototype.attach=function(m5t){var S5t;S5t=this;this._attachedCamera=m5t;this._onAfterCheckInputsObserver=m5t.onAfterCheckInputsObservable.add(function(){S5t._attachedCamera&&(S5t._isRadiusAtLimit(S5t._attachedCamera.lowerRadiusLimit)&&S5t._applyBoundRadiusAnimation(S5t.lowerRadiusTransitionRange),S5t._isRadiusAtLimit(S5t._attachedCamera.upperRadiusLimit)&&S5t._applyBoundRadiusAnimation(S5t.upperRadiusTransitionRange));});},s1u.prototype.detach=function(){this._attachedCamera&&(this._onAfterCheckInputsObserver&&this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver),this._onMeshTargetChangedObserver&&this._attachedCamera.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver),this._attachedCamera=G3CX.X4CX);},s1u.prototype._isRadiusAtLimit=function(r5t){return!!this._attachedCamera&&(this._attachedCamera.radius===r5t&&!this._radiusIsAnimating);},s1u.prototype._applyBoundRadiusAnimation=function(v5t){var G5t,J5t;G5t=this;if(this._attachedCamera){this._radiusBounceTransition||(s1u.EasingFunction.setEasingMode(s1u.EasingMode),this._radiusBounceTransition=U1.Animation.CreateAnimation(R4uX,U1.Animation.ANIMATIONTYPE_FLOAT,+x3uX.B1uX,s1u.EasingFunction));this._cachedWheelPrecision=this._attachedCamera.wheelPrecision;d4lX.F4XX(d4lX.j8CX);this._attachedCamera.wheelPrecision=d4lX.r4XX(d4lX.n4XX,G3CX.k4CX);this._attachedCamera.inertialRadiusOffset=d4lX.I4XX;this.stopAllAnimations();this._radiusIsAnimating=!d4lX.I4XX;J5t=U1.Animation.TransitionTo(R4uX,this._attachedCamera.radius+v5t,this._attachedCamera,this._attachedCamera.getScene(),x3uX.B1uX|d4lX.I4XX,this._radiusBounceTransition,this.transitionDuration,function(){return G5t._clearAnimationLocks();});J5t&&this._animatables.push(J5t);}},s1u.prototype._clearAnimationLocks=function(){this._radiusIsAnimating=!+G3CX.j4CX;this._attachedCamera&&(this._attachedCamera.wheelPrecision=this._cachedWheelPrecision);},s1u.prototype.stopAllAnimations=function(){for(this._attachedCamera&&(this._attachedCamera.animations=[]);this._animatables.length;){this._animatables[+G3CX.k4CX].onAnimationEnd=G3CX.X4CX,this._animatables[+G3CX.k4CX].stop(),this._animatables.shift();}},s1u.EasingFunction=new U1.BackEase(+m3uX),s1u.EasingMode=U1.EasingFunction.EASINGMODE_EASEOUT,s1u;}();U1.BouncingBehavior=p7Z;e1=Q0||(Q0={});u7Z=function(){var F68X=G3CX;var y7UX="rotationInProgress";var g7UX="idleRotationSpinupTime";var d7UX="idleRotationWaitTime";var W7UX="idleRotationSpeed";function w5t(){var g5JX=G3CX;var E2CX=284;this._zoomStopsAnimation=!+g5JX.j4CX;d4lX.i4XX(d4lX.w4XX);this._idleRotationSpeed=d4lX.z4XX(d4lX.I4XX,R7LX);d4lX.F4XX(d4lX.n4XX);this._idleRotationWaitTime=d4lX.r4XX(d4lX.I4XX,l5LX);d4lX.i4XX(d4lX.n4XX);this._idleRotationSpinupTime=d4lX.r4XX(d4lX.I4XX,l5LX);this._isPointerDown=!+g5JX.j4CX;this._lastFrameTime=g5JX.X4CX;d4lX.F4XX(E2CX);this._lastInteractionTime=d4lX.r4XX(g5JX.j4CX,d4lX.I4XX);this._cameraRotationSpeed=+g5JX.k4CX;d4lX.F4XX(d4lX.w4XX);this._lastFrameRadius=d4lX.z4XX(d4lX.I4XX,g5JX.k4CX);}return Object.defineProperty(w5t.prototype,x3uX.G0uX,{get:function(){var R7UX="AutoRotation";return R7UX;},enumerable:!(F68X.k4CX-d4lX.I4XX),configurable:!(F68X.k4CX-d4lX.I4XX)}),Object.defineProperty(w5t.prototype,F3UX,{get:function(){return this._zoomStopsAnimation;},set:function(V5t){this._zoomStopsAnimation=V5t;},enumerable:!(F68X.k4CX|d4lX.I4XX),configurable:!+F68X.k4CX}),Object.defineProperty(w5t.prototype,W7UX,{get:function(){return this._idleRotationSpeed;},set:function(Q5t){this._idleRotationSpeed=Q5t;},enumerable:!+F68X.k4CX,configurable:!(F68X.k4CX*d4lX.n4XX)}),Object.defineProperty(w5t.prototype,d7UX,{get:function(){return this._idleRotationWaitTime;},set:function(h5t){this._idleRotationWaitTime=h5t;},enumerable:!+F68X.k4CX,configurable:!+F68X.k4CX}),Object.defineProperty(w5t.prototype,g7UX,{get:function(){return this._idleRotationSpinupTime;},set:function(D5t){this._idleRotationSpinupTime=D5t;},enumerable:!+F68X.k4CX,configurable:!+F68X.k4CX}),Object.defineProperty(w5t.prototype,y7UX,{get:function(){return+G3CX.k4CXr2t.occlusionRetryCount)){d4lX.F4XX(d4lX.I4XX);return!d4lX.r4XX(d4lX.n4XX,f18X.j4CX);}r2t.isOcclusionQueryInProgress=!d4lX.n4XX;r2t.occlusionInternalRetryCounter=+f18X.k4CX;r2t.isOccluded=r2t.occlusionType!==p3.AbstractMesh.OCCLUSION_TYPE_OPTIMISTIC&&r2t.isOccluded;}G2t=this.getScene();if(G2t.getBoundingBoxRenderer){w2t=G2t.getBoundingBoxRenderer();this._occlusionQuery||(this._occlusionQuery=J2t.createQuery());J2t.beginOcclusionQuery(r2t.occlusionQueryAlgorithmType,this._occlusionQuery);w2t.renderOcclusionBoundingBox(this);J2t.endOcclusionQuery(r2t.occlusionQueryAlgorithmType);this._occlusionDataStorage.isOcclusionQueryInProgress=!d4lX.I4XX;}return r2t.isOccluded;};o5Z=Q0||(Q0={});r4Z=function(Q2t){function V2t(W2t,D2t,X2t,j2t,M2t){var C1UX="noise";var h2t;void(G3CX.k4CX*d4lX.n4XX)===D2t&&(D2t=x3uX.H4uX-d4lX.I4XX);void d4lX.I4XX===X2t&&(X2t=o5Z.Engine.LastCreatedScene);h2t=Q2t.call(this,W2t,D2t,C1UX,X2t,j2t,M2t)||this;return h2t._time=+G3CX.k4CX,h2t.brightness=+M8rX,h2t.octaves=d4lX.P4XX,h2t.persistence=p4uX-d4lX.I4XX,h2t.animationSpeedFactor=G3CX.j4CX*d4lX.n4XX,h2t.autoClear=!(G3CX.j4CX*d4lX.n4XX),h2t._updateShaderUniforms(),h2t;}return N0(V2t,Q2t),V2t.prototype._updateShaderUniforms=function(){var A1UX="timeScale";var H1UX="persistence";var v1UX="brightness";var I2t;I2t=this.getScene();I2t&&(this._time+=I2t.getAnimationRatio()*this.animationSpeedFactor*+u8LX,this.setFloat(v1UX,this.brightness),this.setFloat(H1UX,this.persistence),this.setFloat(A1UX,this._time));},V2t.prototype._getDefines=function(){var o1UX="#define OCTAVES ";return o1UX+(+G3CX.k4CX|this.octaves);},V2t.prototype.render=function(x2t){this._updateShaderUniforms();Q2t.prototype.render.call(this,x2t);},V2t.prototype.serialize=function(){var u1UX="BABYLON.NoiseProceduralTexture";var c2t;c2t={customType:u1UX};return c2t.brightness=this.brightness,c2t.octaves=this.octaves,c2t.persistence=this.persistence,c2t.animationSpeedFactor=this.animationSpeedFactor,c2t.size=this.getSize().width,c2t.generateMipMaps=this._generateMipMaps,c2t;},V2t.Parse=function(N2t,l2t,A2t){var E2t;d4lX.F4XX(d4lX.w4XX);E2t=new V2t(N2t.name,N2t.size,l2t,void d4lX.z4XX(d4lX.I4XX,G3CX.k4CX),N2t.generateMipMaps);return E2t.brightness=N2t.brightness,E2t.octaves=N2t.octaves,E2t.persistence=N2t.persistence,E2t.animationSpeedFactor=N2t.animationSpeedFactor,E2t;},V2t;}(o5Z.ProceduralTexture);o5Z.NoiseProceduralTexture=r4Z;e3=this&&this.__assign||function(){return(e3=Object.assign||function(L2t){for(var C2t,b2t=G3CX.j4CX|d4lX.I4XX,a2t=arguments.length;b2tl1t&&(clearInterval(A1t),MobileAdInGamePreroll.boxContents.close.css(x3uX.m1uX,MobileAdInGamePreroll.boxContents.body.width()-H5ZZ.Z8CX),MobileAdInGamePreroll.boxContents.close.show(),MobileAdInGamePreroll.boxContents.header.html(MobileAdInGamePreroll.close),MobileAdInGamePreroll.boxContents.footer.text(G3CX.e4CX));},A0UX.t5UX|H5ZZ.I4XX);},Close:function(){this.boxContents.close.hide();this.overlay.hide();}};MobileAdInGameHeader={ad_duration:_SETTINGS.Ad.Mobile.Header.Duration,ad_width:_SETTINGS.Ad.Mobile.Header.Width,ad_height:_SETTINGS.Ad.Mobile.Header.Height,Initialize:function(){var B5UX="Ad rotating header disabled";var k5UX="Ad rotating header enabled";var j5UX="MobileAdInGameHeader3";var X5UX="MobileAdInGameHeader2";var l5UX="MobileAdInGameHeader";var n1t,L1t,a1t,C1t;if(_SETTINGS.Ad.Mobile.Header.Rotation.Enabled){n1t=_SETTINGS.Ad.Mobile.Header.Rotation.Weight;L1t=n1t.MobileAdInGameHeader;a1t=L1t+n1t.MobileAdInGameHeader2;n1t=a1t+n1t.MobileAdInGameHeader3;C1t=Math.floor((x3uX.f5LX|H5ZZ.I4XX)*Math.random());console.log(A0UX.n0UX,C1t);C1t<=L1t?this.selectedOverlayName=l5UX:C1t<=a1t?this.selectedOverlayName=X5UX:C1t<=n1t&&(this.selectedOverlayName=j5UX);console.log(k5UX);}else{this.selectedOverlayName=l5UX,console.log(B5UX);}this.div=$(G3CX.q3uX+this.selectedOverlayName);this.game=$(A0UX.g5UX);this.div.width(this.ad_width);this.div.height(this.ad_height);this.div.css(x3uX.m1uX,this.game.position().left+(this.game.width()-this.div.width())/(G3CX.U4CX|H5ZZ.I4XX));this.div.css(A0UX.Q5UX,+G3CX.k4CX);this.div.show(this.Timer(this.ad_duration));},Timer:function(z1t){var t1t;t1t=setInterval(function(){z1t--;+G3CX.k4CX>z1t&&(MobileAdInGameHeader.div.hide(),clearInterval(t1t));},A0UX.m5UX);}};MobileAdInGameFooter={ad_duration:_SETTINGS.Ad.Mobile.Footer.Duration,ad_width:_SETTINGS.Ad.Mobile.Footer.Width,ad_height:_SETTINGS.Ad.Mobile.Footer.Height,Initialize:function(){var s5UX="Ad rotating footer disabled";var q5UX="Ad rotating footer enabled";var E5UX="MobileAdInGameFooter3";var D5UX="MobileAdInGameFooter2";var Z5UX="MobileAdInGameFooter";var K1t,i1t,u1t,p1t;if(_SETTINGS.Ad.Mobile.Footer.Rotation.Enabled){K1t=_SETTINGS.Ad.Mobile.Footer.Rotation.Weight;i1t=K1t.MobileAdInGameFooter;u1t=i1t+K1t.MobileAdInGameFooter2;K1t=u1t+K1t.MobileAdInGameFooter3;p1t=Math.floor(+x3uX.f5LX*Math.random());console.log(A0UX.n0UX,p1t);p1t<=i1t?this.selectedOverlayName=Z5UX:p1t<=u1t?this.selectedOverlayName=D5UX:p1t<=K1t&&(this.selectedOverlayName=E5UX);console.log(q5UX);}else{this.selectedOverlayName=Z5UX,console.log(s5UX);}this.div=$(G3CX.q3uX+this.selectedOverlayName);this.game=$(A0UX.g5UX);this.div.width(this.ad_width);this.div.height(this.ad_height);this.div.css(x3uX.m1uX,this.game.position().left+(this.game.width()-this.div.width())/(G3CX.U4CX|H5ZZ.I4XX));this.div.css(A0UX.Q5UX,this.game.height()-this.div.height()-H5ZZ.K8CX);this.div.show(this.Timer(this.ad_duration));},Timer:function(k1t){var f1t;f1t=setInterval(function(){k1t--;G3CX.k4CX-H5ZZ.I4XX>k1t&&(MobileAdInGameFooter.div.hide(),clearInterval(f1t));},A0UX.t5UX|H5ZZ.I4XX);}};MobileAdInGameEnd={ad_duration:_SETTINGS.Ad.Mobile.End.Duration,ad_width:_SETTINGS.Ad.Mobile.End.Width,ad_height:_SETTINGS.Ad.Mobile.End.Height,ready_in:_STRINGS.Ad.Mobile.End.ReadyIn,loading:_STRINGS.Ad.Mobile.End.Loading,close:_STRINGS.Ad.Mobile.End.Close+A0UX.I0UX,Initialize:function(){var g1RX=G3CX;var d1RX=A0UX;var H5UX="642.30";var v5UX=579.97;var C5UX="7708";var p5UX="Ad rotating end disabled";var U5UX="Ad rotating end enabled";var b5UX="MobileAdInGameEnd3";var G5UX="MobileAdInGameEnd2";var a5UX="MobileAdInGameEnd";var g1t,Z1t,q1t,e1t;if(_SETTINGS.Ad.Mobile.End.Rotation.Enabled){g1t=_SETTINGS.Ad.Mobile.End.Rotation.Weight;Z1t=g1t.MobileAdInGameEnd;q1t=Z1t+g1t.MobileAdInGameEnd2;g1t=q1t+g1t.MobileAdInGameEnd3;e1t=Math.floor((x3uX.f5LX|H5ZZ.I4XX)*Math.random());console.log(d1RX.n0UX,e1t);e1t<=Z1t?this.selectedOverlayName=a5UX:e1t<=q1t?this.selectedOverlayName=G5UX:e1t<=g1t&&(this.selectedOverlayName=b5UX);console.log(U5UX);}else{this.selectedOverlayName=a5UX,console.log(p5UX);}console.log(d1RX.W5UX,this.selectedOverlayName);this.overlay=$(g1RX.q3uX+this.selectedOverlayName);this.box=$((+C5UX===v5UX?(+H5UX,k3dX.Q3fX):g1RX.q3uX)+this.selectedOverlayName+d1RX.d5UX);this.game=$(d1RX.g5UX);this.boxContents={footer:$(g1RX.q3uX+this.selectedOverlayName+d1RX.y5UX),header:$(g1RX.q3uX+this.selectedOverlayName+d1RX.f5UX),close:$(g1RX.q3uX+this.selectedOverlayName+d1RX.O5UX),body:$(g1RX.q3uX+this.selectedOverlayName+d1RX.S5UX)};this.box.width(this.ad_width);this.box.height(this.ad_height);this.box.css(x3uX.m1uX,(this.overlay.width()-this.box.width())/+g1RX.U4CX);this.box.css(d1RX.Q5UX,(this.overlay.height()-this.box.height()-this.boxContents.header.height()-this.boxContents.footer.height())/(g1RX.U4CX-H5ZZ.I4XX));this.overlay.show(this.Timer(this.ad_duration));},Timer:function(y1t){var F1t,o1t;F1t=y1t;o1t=setInterval(function(){MobileAdInGameEnd.boxContents.header.text(MobileAdInGameEnd.ready_in+F1t+A0UX.Y5UX);MobileAdInGameEnd.boxContents.footer.text(MobileAdInGameEnd.loading);F1t--;+G3CX.k4CX>F1t&&(clearInterval(o1t),MobileAdInGameEnd.boxContents.close.css(x3uX.m1uX,MobileAdInGameEnd.boxContents.body.width()-+x3uX.G2rX),MobileAdInGameEnd.boxContents.close.show(),MobileAdInGameEnd.boxContents.header.html(MobileAdInGameEnd.close),MobileAdInGameEnd.boxContents.footer.text(G3CX.e4CX));},+A0UX.t5UX);},Close:function(){this.boxContents.close.hide();this.overlay.hide();}};!function(R1t,B1t){G3CX.W4CX==typeof module&&G3CX.W4CX==typeof module.exports?module.exports=R1t.document?B1t(R1t,!H5ZZ.I4XX):function(P1t){var A5UX="jQuery requires a window with a document";if(!P1t.document){throw Error(A5UX);}return B1t(P1t);}:B1t(R1t);}(x3uX.o6uX!=typeof window?window:this,function(T1t,I3Q){var X1RX=k3dX;var l1RX=x3uX;var t1RX=A0UX;var Y1RX=H5ZZ;var Q1RX=G3CX;var b2SX="jquery";var E2SX="pageYOffset";var D2SX="pageXOffset";var X2SX="static";var l2SX="ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend";var Y2SX="html";var S2SX="
";var J1SX="json jsonp";var P1SX="callback";var w1SX=/(=)\?(?=&|$)|\?\?/;var z1SX=/\b(?:java|ecma)script\b/;var V1SX="text/javascript, application/javascript, application/ecmascript, application/x-ecmascript";var M1SX="withCredentials";var c1SX="post";var x1SX="json";var o1SX="abort";var U1SX="application/x-www-form-urlencoded";var g1SX="responseJSON";var d1SX="responseText";var W1SX="responseXML";var R1SX=/\bjson\b/;var K1SX=/\bhtml/;var J6SX=/\bxml\b/;var P6SX="application/json, text/javascript";var w6SX="application/xml, text/xml";var n6SX="text/html";var I6SX="text/plain";var F6SX="application/x-www-form-urlencoded; charset=UTF-8";var i6SX=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/;var r6SX="*/";var z6SX=/^\/\//;var V6SX=/^(?:GET|HEAD)$/;var h6SX=/([?&])_=[^&]*/;var N6SX=/#.*$/;var T6SX=/^(?:input|select|textarea|keygen)/i;var c6SX=/^(?:submit|button|image|reset|file)$/i;var x6SX=/\[\]$/;var L6SX="parsererror";var o6SX="onfocusin";var A6SX="blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu";var C6SX=/^(?:focusinfocus|focusoutblur)$/;var a6SX="tabIndex readOnly maxLength cellSpacing cellPadding rowSpan colSpan useMap frameBorder contentEditable";var s6SX="htmlFor";var E6SX=/^(?:a|area)$/i;var D6SX="select";var Z6SX="600";var X6SX="content";var l6SX="border";var Q6SX="show";var S6SX="hide";var O6SX="toggle";var y6SX=/queueHooks$/;var g6SX=/^(?:toggle|show|hide)$/;var d6SX="swing";var K6SX="padding";var J7SX="margin";var P7SX="Width";var w7SX="marginLeft";var n7SX="boxSizing";var I7SX="border-box";var F7SX="set";var z7SX="cssFloat";var h7SX="Moz";var N7SX="Webkit";var M7SX="block";var T7SX=/^--/;var c7SX=/^(none|table(?!-c[ea]).+)/;var u7SX="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute";var o7SX="content-box";var p7SX=")(?!px)[a-z%]+$";var U7SX="^(";var b7SX=/^margin/;var G7SX="replaceWith";var a7SX="after";var s7SX="before";var q7SX="prepend";var E7SX="append";var D7SX="globalEval";var B7SX=/^true\/(.*)/;var k7SX=/checked\s*(?:[^=]|=\s*.checked.)/i;var j7SX=/\x20\t\r\n\f]+)/i;var u3SX=/^(?:checkbox|radio)$/i;var o3SX="display";var A3SX="Bottom";var H3SX="Top";var v3SX=")([a-z%]*)$";var C3SX="^(?:([+-])=|)(";var p3SX=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/;var U3SX="queueHooks";var b3SX="inprogress";var G3SX="queue";var a3SX="fx";var s3SX="data-";var E3SX=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/;var k3SX=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;var l3SX="pending";var S3SX="once memory";var J8SX=/^(?:parents|prev(?:Until|All))/;var n8SX=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;var F8SX=/^.[^:#\[\.,]*$/;var i8SX=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;var r8SX="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped";var h8SX="type|href|height|width";var x8SX="text";var e8SX="option";var v8SX="nextSibling";var j8SX="nth";var X8SX="previousSibling";var f8SX="!=";var W8SX=":disabled";var z4UX="~=";var u4UX="className";var v4UX="legend";var q4UX=/[+~]/;var E4UX=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/;var D4UX=/^[^{]+\{\s*\[native \w/;var Z4UX=/^h\d$/i;var m4UX=/^(?:input|select|textarea|button)$/i;var B4UX="^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)";var k4UX="^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$";var X4UX="^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)";var l4UX="^:((?:\\\\.|[\\w-]|[^\x00-\\xa0])+)(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|\\[[\\x20\\t\\r\\n\\f]*((?:\\\\.|[\\w-]|[^\x00-\\xa0])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|((?:\\\\.|[\\w-]|[^\x00-\\xa0])+))|)[\\x20\\t\\r\\n\\f]*\\])*)|.*)\\)|)";var t4UX="^\\[[\\x20\\t\\r\\n\\f]*((?:\\\\.|[\\w-]|[^\x00-\\xa0])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|((?:\\\\.|[\\w-]|[^\x00-\\xa0])+))|)[\\x20\\t\\r\\n\\f]*\\]";var Y4UX=/^((?:\\.|[\w-]|[^\x00-\xa0])+|[*])/;var Q4UX=/^\.((?:\\.|[\w-]|[^\x00-\xa0])+)/;var S4UX=/^#((?:\\.|[\w-]|[^\x00-\xa0])+)/;var O4UX=/^(?:\\.|[\w-]|[^\x00-\xa0])+$/;var f4UX=":((?:\\\\.|[\\w-]|[^\x00-\\xa0])+)(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|\\[[\\x20\\t\\r\\n\\f]*((?:\\\\.|[\\w-]|[^\x00-\\xa0])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|((?:\\\\.|[\\w-]|[^\x00-\\xa0])+))|)[\\x20\\t\\r\\n\\f]*\\])*)|.*)\\)|)";var y4UX=/^[\x20\t\r\n\f]*([>+~]|[\x20\t\r\n\f])[\x20\t\r\n\f]*/;var g4UX=/^[\x20\t\r\n\f]*,[\x20\t\r\n\f]*/;var d4UX="sizzle";var R4UX="parentNode";var K4UX="label";var J5UX="form";var w5UX="input";var n5UX="|";var I5UX="fieldset";var F5UX="$1";var M5UX="Boolean Number String Function Array Date RegExp Object Error Symbol";var e5UX="jQuery";var L5UX="3.2.1";var u5UX=/^-ms-/;var v2CX=293;var z5Q,H5Q,v9Q,L5Q,m0Q,i6Q,O5Q,J6Q,s6Q,w6Q,O6Q,O9Q,m5Q,O1t,h3Q,D3Q,X3Q,e0Q,p5Q,p6Q,d5Q,c6Q,j5Q,x5Q,t6Q,z0Q,H9Q,U9Q,L0Q,a5Q,a6Q,V0Q,h6Q,D6Q,L6Q,W6Q,C6Q,b6Q,o5Q,r5Q,U5Q,A6Q,T9Q,S6Q,y6Q,V3Q,l6Q,K5Q,Z5Q,t5Q,Y5Q,D5Q,W5Q,J5Q,g5Q,E6Q,r6Q,S5Q,Q5Q,N5Q,Y9Q,Y0Q,R6Q,x6Q,K6Q,G9Q,C5Q,w9Q,h9Q,A5Q,l0Q,b5Q,N9Q,m6Q,C9Q,a9Q,t9Q,K9Q,p9Q,d6Q,u9Q,g9Q,B5Q,R9Q,n6Q,E5Q,c5Q,P6Q,S0Q,w0Q,w3Q,f5Q,I0Q,x0Q,N0Q,i0Q,u0Q,k0Q,f0Q,g0Q,V5Q,Z0Q,z6Q,l5Q,G6Q,s1t,G5Q,B0Q,P0Q,B6Q,H6Q,n5Q,v6Q,T6Q,H0Q,U0Q,p0Q,d0Q,h5Q,J9Q,U6Q,X6Q,Q6Q,V9Q,Q9Q,G0Q,D9Q,X9Q,W9Q,j9Q,M9Q,v0Q,u6Q,I6Q,M6Q,E9Q,l9Q,A9Q,b9Q,Y6Q,X5Q,L9Q,X0Q,z9Q,W0Q,j0Q,M0Q,F5Q,g6Q,k9Q,f9Q,i5Q,e9Q,Z9Q,R5Q,F9Q,o9Q,y9Q,E0Q,P5Q,A0Q,q6Q,s9Q,n0Q,H3Q,U3Q,Y3Q,d3Q,S3Q,m3Q,r3Q,J3Q,C0Q,F6Q,a0Q,o6Q,Q3Q,T5Q,K0Q,N6Q,W3Q,m9Q,h0Q,c9Q,I9Q;function j3Q(Y4Q){var d4Q;d4Q=j9Q.exec(Y4Q.type);return d4Q?Y4Q.type=d4Q[+G3CX.j4CX]:Y4Q.removeAttribute(A0UX.o5UX),Y4Q;}z5Q=[];H5Q=T1t.document;v9Q=Object.getPrototypeOf;L5Q=z5Q.slice;m0Q=z5Q.concat;i6Q=z5Q.push;O5Q=z5Q.indexOf;J6Q={};s6Q=J6Q.toString;w6Q=J6Q.hasOwnProperty;O6Q=w6Q.toString;O9Q=O6Q.call(Object);m5Q={};O1t=function(t2Q,K2Q){return new O1t.fn.init(t2Q,K2Q);};h3Q=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;D3Q=u5UX;X3Q=/-([a-z])/g;e0Q=function(i2Q,p2Q){return p2Q.toUpperCase();};O1t.fn=O1t.prototype={jquery:L5UX,constructor:O1t,length:+Q1RX.k4CX,toArray:function(){return L5Q.call(this);},get:function(u2Q){return G3CX.X4CX==u2Q?L5Q.call(this):H5ZZ.I4XX>u2Q?this[u2Q+this.length]:this[u2Q];},pushStack:function(k2Q){k2Q=O1t.merge(this.constructor(),k2Q);return k2Q.prevObject=this,k2Q;},each:function(f2Q){return O1t.each(this,f2Q);},map:function(g2Q){return this.pushStack(O1t.map(this,function(e2Q,Z2Q){return g2Q.call(e2Q,Z2Q,e2Q);}));},slice:function(){return this.pushStack(L5Q.apply(this,arguments));},first:function(){H5ZZ.i4XX(H5ZZ.n4XX);return this.eq(H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX));},last:function(){return this.eq(-+G3CX.j4CX);},eq:function(q2Q){var s2CX=286;var F2Q;F2Q=this.length;H5ZZ.i4XX(s2CX);q2Q=H5ZZ.r4XX(q2Q,G3CX.k4CX*H5ZZ.n4XX>q2Q?F2Q:H5ZZ.I4XX);return this.pushStack(+G3CX.k4CX<=q2Q&&q2QU5Q.cacheLength&&delete Q5b[h5b.shift()],Q5b[D5b+G3CX.W3uX]=X5b;}h5b=[];return Q5b;};j5Q=function(W5b){return W5b[S5Q]=!H5ZZ.I4XX,W5b;};x5Q=function(M5b){var j5b;j5b=Y5Q.createElement(I5UX);try{return!!M5b(j5b);}catch(I5b){H5ZZ.F4XX(H5ZZ.w4XX);return!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.j4CX);}finally{j5b.parentNode&&j5b.parentNode.removeChild(j5b);}};t6Q=function(N5b,E5b){for(var x5b=N5b.split(n5UX),c5b=x5b.length;c5b--;){U5Q.attrHandle[x5b[c5b]]=E5b;}};z0Q=function(A5b,b5b){var e28X=H5ZZ;var l5b,n5b;l5b=b5b&&A5b;n5b=l5b&&(G3CX.j4CX|e28X.I4XX)===A5b.nodeType&&e28X.n4XX===b5b.nodeType&&A5b.sourceIndex-b5b.sourceIndex;if(n5b){return n5b;}if(l5b)for(;l5b=l5b.nextSibling;)if(l5b===b5b){e28X.F4XX(e28X.n4XX);return-e28X.r4XX(e28X.I4XX,G3CX.j4CX);}return A5b?+G3CX.j4CX:-(G3CX.j4CX-e28X.I4XX);};H9Q=function(C5b){return function(L5b){return w5UX===L5b.nodeName.toLowerCase()&&L5b.type===C5b;};};U9Q=function(a5b){return function(t5b){var z5b;z5b=t5b.nodeName.toLowerCase();return(w5UX===z5b||A0UX.P5UX===z5b)&&t5b.type===a5b;};};L0Q=function(K5b){return function(p5b){return J5UX in p5b?p5b.parentNode&&!+G3CX.j4CX===p5b.disabled?K4UX in p5b?K4UX in p5b.parentNode?p5b.parentNode.disabled===K5b:p5b.disabled===K5b:p5b.isDisabled===K5b||p5b.isDisabled!==!K5b&&w3Q(p5b)===K5b:p5b.disabled===K5b:K4UX in p5b&&p5b.disabled===K5b;};};a5Q=function(i5b){return j5Q(function(u5b){return u5b=+u5b,j5Q(function(k5b,Z5b){for(var f5b,g5b=i5b([],k5b.length,u5b),e5b=g5b.length;e5b--;){k5b[f5b=g5b[e5b]]&&(k5b[f5b]=!(Z5b[f5b]=k5b[f5b]));}});});};a6Q=function(q5b){return q5b&&x3uX.o6uX!=typeof q5b.getElementsByTagName&&q5b;};V0Q=function(){};h6Q=function(y5b){for(var F5b=+G3CX.k4CX,R5b=y5b.length,o5b=G3CX.e4CX;F5bj0b?String.fromCharCode(j0b+(a4UX|n28X.I4XX)):String.fromCharCode(j0b>>+G3CX.u3uX|+G4UX,(X1RX.R13X|n28X.I4XX)&j0b|b4UX*n28X.n4XX);};P6Q=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g;S0Q=function(x0b,c0b){var p4UX="\ufffd";var U4UX="\x00";return c0b?U4UX===x0b?p4UX:x0b.slice(H5ZZ.I4XX,-+G3CX.j4CX)+A0UX.C4UX+x0b.charCodeAt(x0b.length-H5ZZ.n4XX).toString(G3CX.S3uX-H5ZZ.I4XX)+G3CX.W3uX:A0UX.C4UX+x0b;};w0Q=function(){t5Q();};w3Q=D6Q(function(N0b){return!(G3CX.k4CX-H5ZZ.I4XX)===N0b.disabled&&(J5UX in N0b||K4UX in N0b);},{dir:R4UX,next:v4UX});try{A5Q.apply(C5Q=l0Q.call(Q5Q.childNodes),Q5Q.childNodes);C5Q[Q5Q.childNodes.length].nodeType;}catch(E0b){A5Q={apply:C5Q.length?function(l0b,A0b){h9Q.apply(l0b,l0Q.call(A0b));}:function(b0b,L0b){var b2CX=289;for(var n0b=b0b.length,C0b=H5ZZ.I4XX;b0b[n0b++]=L0b[C0b++];);H5ZZ.F4XX(b2CX);b0b.length=H5ZZ.r4XX(H5ZZ.I4XX,n0b,G3CX.j4CX);}};}r5Q=d5Q.support={};T9Q=d5Q.isXML=function(a0b){var H4UX="HTML";a0b=a0b&&(a0b.ownerDocument||a0b).documentElement;return!!a0b&&H4UX!==a0b.nodeName;};t5Q=d5Q.setDocument=function(z0b){var S8SX="1595";var O8SX=274.87;var o4UX="onunload";var A4UX="unload";var X5CX=5610;var K0b,t0b;z0b=z0b?z0b.ownerDocument||z0b:Q5Q;return z0b!==Y5Q&&G3CX.Q4CX-H5ZZ.I4XX===z0b.nodeType&&z0b.documentElement?(Y5Q=z0b,D5Q=Y5Q.documentElement,W5Q=!T9Q(Y5Q),Q5Q!==Y5Q&&(t0b=Y5Q.defaultView)&&t0b.top!==t0b&&(t0b.addEventListener?t0b.addEventListener(A4UX,w0Q,!+G3CX.j4CX):t0b.attachEvent&&t0b.attachEvent(o4UX,w0Q)),r5Q.attributes=x5Q(function(p0b){return p0b.className=A0UX.j4UX,!p0b.getAttribute(u4UX);}),r5Q.getElementsByTagName=x5Q(function(i0b){return i0b.appendChild(Y5Q.createComment(G3CX.e4CX)),!i0b.getElementsByTagName(A0UX.W4UX).length;}),r5Q.getElementsByClassName=B5Q.test(Y5Q.getElementsByClassName),r5Q.getById=x5Q(function(u0b){return D5Q.appendChild(u0b).id=S5Q,!Y5Q.getElementsByName||!Y5Q.getElementsByName(S5Q).length;}),r5Q.getById?(U5Q.filter.ID=function(f0b){var k0b;k0b=f0b.replace(E5Q,c5Q);return function(g0b){return g0b.getAttribute(x3uX.b0uX)===k0b;};},U5Q.find.ID=function(q0b,Z0b){var e0b;if(x3uX.o6uX!=typeof Z0b.getElementById&&W5Q){e0b=Z0b.getElementById(q0b);return e0b?[e0b]:[];}}):(U5Q.filter.ID=function(o0b){var F0b;F0b=o0b.replace(E5Q,c5Q);return function(y0b){return(y0b=x3uX.o6uX!=typeof y0b.getAttributeNode&&y0b.getAttributeNode(x3uX.b0uX))&&y0b.value===F0b;};},U5Q.find.ID=function(P0b,O0b){var B0b,s0b,T0b,R0b;if(x3uX.o6uX!=typeof O0b.getElementById&&W5Q){R0b=O0b.getElementById(P0b);if(R0b){if(B0b=R0b.getAttributeNode(x3uX.b0uX),B0b&&B0b.value===P0b){return[R0b];}T0b=O0b.getElementsByName(P0b);for(s0b=+G3CX.k4CX;R0b=T0b[s0b++];)if(B0b=R0b.getAttributeNode(x3uX.b0uX),B0b&&B0b.value===P0b){return[R0b];}}return[];}}),U5Q.find.TAG=r5Q.getElementsByTagName?function(U9b,H9b){return x3uX.o6uX!=typeof H9b.getElementsByTagName?H9b.getElementsByTagName(U9b):r5Q.qsa?H9b.querySelectorAll(U9b):void(G3CX.k4CX-H5ZZ.I4XX);}:function(m9b,J9b){var Y9b,d9b,r9b,S9b;d9b=[];r9b=H5ZZ.I4XX;S9b=J9b.getElementsByTagName(m9b);if(A0UX.W4UX===m9b){for(;Y9b=S9b[r9b++];){G3CX.j4CX-H5ZZ.I4XX===Y9b.nodeType&&d9b.push(Y9b);}return d9b;}return S9b;},U5Q.find.CLASS=r5Q.getElementsByClassName&&function(v9b,G9b){if(x3uX.o6uX!=typeof G9b.getElementsByClassName&&W5Q){return G9b.getElementsByClassName(v9b);}},g5Q=[],J5Q=[],(r5Q.qsa=B5Q.test(Y5Q.querySelectorAll))&&(x5Q(function(w9b){var I4UX=".#.+[+~]";var F4UX="+*";var i4UX="a#";var r4UX=":checked";var V4UX="-]";var h4UX="[id~=";var N4UX="\\[[\\x20\\t\\r\\n\\f]*(?:value|checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)";var M4UX="[selected]";var T4UX="[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")";var c4UX="[msallowcapture^='']";var x4UX="";H5ZZ.F4XX(G3CX.b7CX);D5Q.appendChild(w9b).innerHTML=H5ZZ.z4XX(L4UX,e4UX,x4UX,S5Q,S5Q);w9b.querySelectorAll(c4UX).length&&J5Q.push(T4UX);w9b.querySelectorAll(M4UX).length||J5Q.push(N4UX);w9b.querySelectorAll(h4UX+S5Q+V4UX).length||J5Q.push(z4UX);w9b.querySelectorAll(r4UX).length||J5Q.push(r4UX);w9b.querySelectorAll(i4UX+S5Q+F4UX).length||J5Q.push(I4UX);}),x5Q(function(V9b){var g8SX=",.*:";var d8SX="*,:x";var R8SX=":enabled";var K8SX="name[\\x20\\t\\r\\n\\f]*[*^$|!~]?=";var J4UX="[name=d]";var P4UX="D";var n4UX="";var Q9b;V9b.innerHTML=n4UX;Q9b=Y5Q.createElement(w5UX);Q9b.setAttribute(A0UX.o5UX,A0UX.w4UX);V9b.appendChild(Q9b).setAttribute(x3uX.G0uX,P4UX);V9b.querySelectorAll(J4UX).length&&J5Q.push(K8SX);+G3CX.U4CX!==V9b.querySelectorAll(R8SX).length&&J5Q.push(R8SX,W8SX);D5Q.appendChild(V9b).disabled=!+G3CX.k4CX;+G3CX.U4CX!==V9b.querySelectorAll(W8SX).length&&J5Q.push(R8SX,W8SX);V9b.querySelectorAll(d8SX);J5Q.push(g8SX);})),(r5Q.matchesSelector=B5Q.test(E6Q=D5Q.matches||D5Q.webkitMatchesSelector||D5Q.mozMatchesSelector||D5Q.oMatchesSelector||D5Q.msMatchesSelector))&&x5Q(function(h9b){var y8SX="[s!='']:x";r5Q.disconnectedMatch=E6Q.call(h9b,A0UX.W4UX);E6Q.call(h9b,y8SX);g5Q.push(f8SX,f4UX);}),J5Q=J5Q.length&&RegExp(J5Q.join((X5CX,O8SX)<=+S8SX?n5UX:(A0UX.Q8SX,X1RX.Q3fX))),g5Q=g5Q.length&&RegExp(g5Q.join(n5UX)),K0b=B5Q.test(D5Q.compareDocumentPosition),r6Q=K0b||B5Q.test(D5Q.contains)?function(D9b,j9b){var W9b,X9b;W9b=(G3CX.Q4CX|H5ZZ.I4XX)===D9b.nodeType?D9b.documentElement:D9b;X9b=j9b&&j9b.parentNode;return D9b===X9b||!(!X9b||G3CX.j4CX-H5ZZ.I4XX!==X9b.nodeType||!(W9b.contains?W9b.contains(X9b):D9b.compareDocumentPosition&&(G3CX.S3uX|H5ZZ.I4XX)&D9b.compareDocumentPosition(X9b)));}:function(I9b,M9b){if(M9b)for(;M9b=M9b.parentNode;)if(M9b===I9b){H5ZZ.i4XX(H5ZZ.n4XX);return!H5ZZ.r4XX(H5ZZ.I4XX,G3CX.k4CX);}return!+G3CX.j4CX;},K6Q=K0b?function(x9b,c9b){var I7JX=H5ZZ;var F7JX=G3CX;var N9b;if(x9b===c9b){return Z5Q=!(F7JX.k4CX-I7JX.I4XX),+F7JX.k4CX;}N9b=!x9b.compareDocumentPosition-!c9b.compareDocumentPosition;return N9b?N9b:(N9b=(x9b.ownerDocument||x9b)===(c9b.ownerDocument||c9b)?x9b.compareDocumentPosition(c9b):F7JX.j4CX*I7JX.n4XX,F7JX.j4CX-I7JX.I4XX&N9b||!r5Q.sortDetached&&c9b.compareDocumentPosition(x9b)===N9b?x9b===Y5Q||x9b.ownerDocument===Q5Q&&r6Q(Q5Q,x9b)?-+F7JX.j4CX:c9b===Y5Q||c9b.ownerDocument===Q5Q&&r6Q(Q5Q,c9b)?+F7JX.j4CX:K5Q?b5Q(K5Q,x9b)-b5Q(K5Q,c9b):F7JX.k4CX*I7JX.n4XX:I7JX.J4XX&N9b?-(F7JX.j4CX*I7JX.n4XX):F7JX.j4CX|I7JX.I4XX);}:function(A9b,b9b){var i7JX=H5ZZ;var r7JX=G3CX;var E9b,l9b,L9b,n9b,C9b;if(A9b===b9b){return Z5Q=!(r7JX.k4CX*i7JX.n4XX),r7JX.k4CX-i7JX.I4XX;}l9b=+r7JX.k4CX;E9b=A9b.parentNode;L9b=b9b.parentNode;n9b=[A9b];C9b=[b9b];if(!E9b||!L9b){return A9b===Y5Q?-+r7JX.j4CX:b9b===Y5Q?i7JX.n4XX:E9b?-(r7JX.j4CX-i7JX.I4XX):L9b?+r7JX.j4CX:K5Q?b5Q(K5Q,A9b)-b5Q(K5Q,b9b):+r7JX.k4CX;}if(E9b===L9b){return z0Q(A9b,b9b);}for(E9b=A9b;E9b=E9b.parentNode;){n9b.unshift(E9b);}for(E9b=b9b;E9b=E9b.parentNode;){C9b.unshift(E9b);}for(;n9b[l9b]===C9b[l9b];){l9b++;}return l9b?z0Q(n9b[l9b],C9b[l9b]):n9b[l9b]===Q5Q?-+r7JX.j4CX:C9b[l9b]===Q5Q?i7JX.n4XX:i7JX.I4XX;},Y5Q):Y5Q;};d5Q.matches=function(a9b,z9b){return d5Q(a9b,G3CX.X4CX,G3CX.X4CX,z9b);};d5Q.matchesSelector=function(t9b,K9b){var Y8SX="='$1']";var p9b;if((t9b.ownerDocument||t9b)!==Y5Q&&t5Q(t9b),K9b=K9b.replace(t9Q,Y8SX),r5Q.matchesSelector&&W5Q&&!x6Q[K9b+G3CX.W3uX]&&(!g5Q||!g5Q.test(K9b))&&(!J5Q||!J5Q.test(K9b)))try{p9b=E6Q.call(t9b,K9b);if(p9b||r5Q.disconnectedMatch||t9b.document&&+x3uX.c3uX!==t9b.document.nodeType){return p9b;}}catch(i9b){}return G3CX.k4CX*H5ZZ.n4XX":{dir:R4UX,first:!(Q1RX.k4CX*Y1RX.n4XX)}," ":{dir:R4UX},"+":{dir:X8SX,first:!(Q1RX.k4CX*Y1RX.n4XX)},"~":{dir:X8SX}},preFilter:{ATTR:function(H3b){var G98X=H5ZZ;var a98X=G3CX;return H3b[a98X.j4CX-G98X.I4XX]=H3b[+a98X.j4CX].replace(E5Q,c5Q),H3b[a98X.l4CX|G98X.I4XX]=(H3b[G98X.P4XX]||H3b[a98X.t4CX|G98X.I4XX]||H3b[a98X.V8uX*G98X.n4XX]||a98X.e4CX).replace(E5Q,c5Q),z4UX===H3b[G98X.w4XX]&&(H3b[+a98X.l4CX]=a98X.W3uX+H3b[+a98X.l4CX]+a98X.W3uX),H3b.slice(+a98X.k4CX,G98X.J4XX);},CHILD:function(U3b){var U98X=H5ZZ;var b98X=G3CX;var B8SX="odd";var k8SX="even";return U3b[b98X.j4CX-U98X.I4XX]=U3b[b98X.j4CX*U98X.n4XX].toLowerCase(),j8SX===U3b[b98X.j4CX*U98X.n4XX].slice(b98X.k4CX*U98X.n4XX,+b98X.l4CX)?(U3b[U98X.P4XX]||d5Q.error(U3b[+b98X.k4CX]),U3b[U98X.J4XX]=+(U3b[b98X.t4CX*U98X.n4XX]?U3b[b98X.V8uX*U98X.n4XX]+(U3b[b98X.O8uX-U98X.I4XX]||b98X.j4CX*U98X.n4XX):b98X.U4CX*U98X.n4XX*(k8SX===U3b[U98X.P4XX]||B8SX===U3b[+b98X.l4CX])),U3b[+b98X.V8uX]=+(U3b[U98X.W8CX]+U3b[U98X.d8CX]||B8SX===U3b[b98X.l4CX*U98X.n4XX])):U3b[b98X.l4CX-U98X.I4XX]&&d5Q.error(U3b[U98X.I4XX]),U3b;},PSEUDO:function(Y3b){var C98X=H5ZZ;var p98X=G3CX;var S3b,d3b;d3b=!Y3b[+p98X.O8uX]&&Y3b[p98X.U4CX|C98X.I4XX];return d6Q.CHILD.test(Y3b[+p98X.k4CX])?p98X.X4CX:(Y3b[+p98X.l4CX]?Y3b[+p98X.U4CX]=Y3b[p98X.t4CX-C98X.I4XX]||Y3b[p98X.V8uX|C98X.I4XX]||p98X.e4CX:d3b&&K9Q.test(d3b)&&(S3b=S6Q(d3b,!C98X.I4XX))&&(S3b=d3b.indexOf(x3uX.k2rX,d3b.length-S3b)-d3b.length)&&(Y3b[+p98X.k4CX]=Y3b[p98X.k4CX-C98X.I4XX].slice(C98X.I4XX,S3b),Y3b[p98X.U4CX-C98X.I4XX]=d3b.slice(C98X.I4XX,S3b)),Y3b.slice(+p98X.k4CX,p98X.l4CX*C98X.n4XX));}},filter:{TAG:function(m3b){var r3b;r3b=m3b.replace(E5Q,c5Q).toLowerCase();return A0UX.W4UX===m3b?function(){H5ZZ.F4XX(H5ZZ.w4XX);return!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX);}:function(J3b){return J3b.nodeName&&J3b.nodeName.toLowerCase()===r3b;};},CLASS:function(v3b){var Z8SX="([\\x20\\t\\r\\n\\f]|$)";var m8SX="(^|[\\x20\\t\\r\\n\\f])";var G3b;H5ZZ.i4XX(H5ZZ.W8CX);G3b=Y0Q[H5ZZ.z4XX(G3CX.W3uX,v3b)];return G3b||(G3b=RegExp(m8SX+v3b+Z8SX))&&Y0Q(v3b,function(w3b){return G3b.test(x3uX.A7uX==typeof w3b.className&&w3b.className||x3uX.o6uX!=typeof w3b.getAttribute&&w3b.getAttribute(A0UX.l8SX)||G3CX.e4CX);});},ATTR:function(h3b,Q3b,V3b){return function(D3b){var g7JX=G3CX;var U8SX="|=";var b8SX="4.62e+3";var G8SX="0x2e1";var a8SX="441";var s8SX="$=";var q8SX="*=";var E8SX="^=";var l5CX=5140;D3b=d5Q.attr(D3b,h3b);return g7JX.X4CX==D3b?f8SX===Q3b:!Q3b||(D3b+=g7JX.e4CX,A0UX.D8SX===Q3b?D3b===V3b:f8SX===Q3b?D3b!==V3b:E8SX===Q3b?V3b&&+g7JX.k4CX===D3b.indexOf(V3b):q8SX===Q3b?V3b&&-+g7JX.j4CXx7b.nodeType){return!+G3CX.j4CX;}return!+G3CX.k4CX;},parent:function(c7b){return!U5Q.pseudos.empty(c7b);},header:function(N7b){return g9Q.test(N7b.nodeName);},input:function(E7b){return u9Q.test(E7b.nodeName);},button:function(A7b){var l7b;l7b=A7b.nodeName.toLowerCase();return w5UX===l7b&&A0UX.P5UX===A7b.type||A0UX.P5UX===l7b;},text:function(b7b){var n7b;return w5UX===b7b.nodeName.toLowerCase()&&x8SX===b7b.type&&(G3CX.X4CX==(n7b=b7b.getAttribute(A0UX.o5UX))||x8SX===n7b.toLowerCase());},first:a5Q(function(){return[+G3CX.k4CX];}),last:a5Q(function(L7b,C7b){H5ZZ.F4XX(G3CX.U1CX);return[H5ZZ.z4XX(G3CX.j4CX,C7b)];}),eq:a5Q(function(t7b,z7b,a7b){return[+G3CX.k4CX>a7b?a7b+z7b:a7b];}),even:a5Q(function(p7b,i7b){for(var K7b=+G3CX.k4CX;K7be7b?e7b+g7b:e7b;H5ZZ.I4XX<=--g7b;){Z7b.push(g7b);}return Z7b;}),gt:a5Q(function(F7b,o7b,q7b){for(q7b=G3CX.k4CX*H5ZZ.n4XX>q7b?q7b+o7b:q7b;++q7bL8b.nodeType&&(K8b?-(G3CX.j4CX|H5ZZ.I4XX)F8Q&&y8Q?q8Q:(y8Q||K8Q.notifyWith(z8Q,[C8Q,t58X.n4XX,L8JX.k4CX|t58X.I4XX]),K8Q.resolveWith(z8Q,[C8Q]),!+L8JX.j4CX);};C8Q=K8Q.promise({elem:z8Q,props:O1t.extend({},a8Q),opts:O1t.extend(!(G3CX.k4CX-t58X.I4XX),{specialEasing:{},easing:O1t.easing._default},p8Q),originalProperties:a8Q,originalOptions:p8Q,startTime:F5Q||q0Q(),duration:p8Q.duration,tweens:[],createTween:function(B8Q,P8Q){var R8Q;R8Q=O1t.Tween(z8Q,C8Q.opts,B8Q,P8Q,C8Q.opts.specialEasing[B8Q]||C8Q.opts.easing);return C8Q.tweens.push(R8Q),R8Q;},stop:function(O8Q){var s8Q,T8Q;t58X.F4XX(t58X.n4XX);s8Q=t58X.z4XX(t58X.I4XX,G3CX.k4CX);T8Q=O8Q?C8Q.tweens.length:t58X.I4XX;if(g8Q){return this;}for(g8Q=!+G3CX.k4CX;s8Q=B2b&&(d1b!==Z6Q&&(S1b=void H5ZZ.I4XX,m1b=[w1b]),H1b.rejectWith(S1b,m1b));}};Y1b?r1b():(O1t.Deferred.getStackHook&&(r1b.stackTrace=O1t.Deferred.getStackHook()),T1t.setTimeout(r1b));};}H5ZZ.F4XX(H5ZZ.w4XX);B2b=H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX);return O1t.Deferred(function(V1b){var Q9NX=G3CX;u2b[Q9NX.k4CX|H5ZZ.I4XX][+Q9NX.l4CX].add(P2b(Q9NX.k4CX-H5ZZ.I4XX,V1b,O1t.isFunction(T2b)?T2b:s5Q,V1b.notifyWith));u2b[+Q9NX.j4CX][Q9NX.l4CX-H5ZZ.I4XX].add(P2b(Q9NX.k4CX|H5ZZ.I4XX,V1b,O1t.isFunction(O2b)?O2b:s5Q));u2b[+Q9NX.U4CX][+Q9NX.l4CX].add(P2b(+Q9NX.k4CX,V1b,O1t.isFunction(s2b)?s2b:Z6Q));}).promise();},promise:function(Q1b){return G3CX.X4CX!=Q1b?O1t.extend(Q1b,k2b):k2b;}};i2b={};return O1t.each(u2b,function(W1b,h1b){var K8JX=G3CX;var J4QX=H5ZZ;var D1b,X1b;J4QX.i4XX(J4QX.n4XX);D1b=h1b[J4QX.r4XX(J4QX.I4XX,K8JX.U4CX)];X1b=h1b[+K8JX.V8uX];k2b[h1b[+K8JX.j4CX]]=D1b.add;X1b&&D1b.add(function(){f2b=X1b;},u2b[J4QX.P4XX-W1b][+K8JX.U4CX].disable,u2b[K8JX.k4CX-J4QX.I4XX][K8JX.U4CX-J4QX.I4XX].lock);D1b.add(h1b[+K8JX.l4CX].fire);i2b[h1b[J4QX.I4XX]]=function(){return i2b[h1b[+K8JX.k4CX]+X3SX](this===i2b?void+K8JX.k4CX:this,arguments),this;};i2b[h1b[+K8JX.k4CX]+X3SX]=D1b.fireWith;}),k2b.promise(i2b),g2b&&g2b.call(i2b,i2b),i2b;},when:function(E1b){var x1b,j1b,c1b,I1b,M1b,N1b;x1b=arguments.length;j1b=x1b;c1b=Array(j1b);I1b=L5Q.call(arguments);M1b=O1t.Deferred();N1b=function(l1b){return function(A1b){c1b[l1b]=this;I1b[l1b]=+G3CX.j4CX=x1b&&(G3Q(E1b,M1b.done(N1b(j1b)).resolve,M1b.reject,!x1b),l3SX===M1b.state()||O1t.isFunction(I1b[j1b]&&I1b[j1b].then))){return M1b.then();}for(;j1b--;){G3Q(I1b[j1b],N1b(j1b),M1b.reject);}return M1b.promise();}});Z0Q=k3SX;O1t.Deferred.exceptionHook=function(b1b,n1b){var B3SX="jQuery.Deferred exception: ";T1t.console&&T1t.console.warn&&b1b&&Z0Q.test(b1b.name)&&T1t.console.warn(B3SX+b1b.message,b1b.stack,n1b);};O1t.readyException=function(C1b){T1t.setTimeout(function(){throw C1b;});};z6Q=O1t.Deferred();function D0Q(y7Q,R7Q,F7Q,o7Q,q7Q,O7Q){var b58X=G3CX;var B7Q,P7Q;if(b58X.W4CX==typeof R7Q){x3uX.A7uX!=typeof F7Q&&(o7Q=o7Q||F7Q,F7Q=void(b58X.k4CX-H5ZZ.I4XX));for(P7Q in R7Q){D0Q(y7Q,P7Q,F7Q,o7Q,R7Q[P7Q],O7Q);}return y7Q;}if(b58X.X4CX==o7Q&&b58X.X4CX==q7Q?(q7Q=F7Q,o7Q=F7Q=void+b58X.k4CX):b58X.X4CX==q7Q&&(x3uX.A7uX==typeof F7Q?(q7Q=o7Q,o7Q=void+b58X.k4CX):(q7Q=o7Q,o7Q=F7Q,F7Q=void H5ZZ.I4XX)),!(b58X.j4CX|H5ZZ.I4XX)===q7Q){q7Q=q5Q;}else if(!q7Q){return y7Q;}return+b58X.j4CX===O7Q&&(B7Q=q7Q,q7Q=function(s7Q){return O1t().off(s7Q),B7Q.apply(this,arguments);},q7Q.guid=B7Q.guid||(B7Q.guid=O1t.guid++)),y7Q.each(function(){O1t.event.add(this,R7Q,q7Q,o7Q,F7Q);});}O1t.fn.ready=function(L1b){return z6Q.then(L1b)[A0UX.m3SX](function(a1b){O1t.readyException(a1b);}),this;};O1t.extend({isReady:!(Q1RX.j4CX-Y1RX.I4XX),readyWait:+Q1RX.j4CX,ready:function(z1b){(!+G3CX.k4CX===z1b?--O1t.readyWait:O1t.isReady)||(O1t.isReady=!+G3CX.k4CX,!(G3CX.k4CX|H5ZZ.I4XX)!==z1b&&H5ZZ.I4XX<--O1t.readyWait||z6Q.resolveWith(H5Q,[O1t]));}});O1t.ready.then=z6Q.then;t1RX.Z3SX===H5Q.readyState||t1RX.D3SX!==H5Q.readyState&&!H5Q.documentElement.doScroll?T1t.setTimeout(O1t.ready):(H5Q.addEventListener(t1RX.g3SX,e6Q),T1t.addEventListener(l1RX.u7uX,e6Q));l5Q=function(p1b,t1b,i1b,k1b,g1b,Z1b,f1b){var o58X=H5ZZ;var A58X=G3CX;var p2CX=291;var K1b,e1b,u1b;K1b=+A58X.k4CX;e1b=p1b.length;o58X.F4XX(p2CX);u1b=o58X.r4XX(A58X.X4CX,i1b);if(A58X.W4CX===O1t.type(i1b))for(K1b in g1b=!o58X.I4XX,i1b){l5Q(p1b,t1b,K1b,i1b[K1b],!o58X.I4XX,Z1b,f1b);}else if(void o58X.I4XX!==k1b&&(g1b=!(A58X.k4CX-o58X.I4XX),O1t.isFunction(k1b)||(f1b=!(A58X.k4CX-o58X.I4XX)),u1b&&(f1b?(t1b.call(p1b,k1b),t1b=A58X.X4CX):(u1b=t1b,t1b=function(q1b,o1b,F1b){return u1b.call(O1t(q1b),F1b);})),t1b))for(;K1b\x20\t\r\n\f]*)[^>]*)\/>/gi;X9Q=j7SX;W9Q=k7SX;j9Q=B7SX;M9Q=/^\s*\s*$/g;O1t.extend({htmlPrefilter:function(H9m){var m7SX="<$1>";return H9m.replace(D9Q,m7SX);},clone:function(Y9m,Q9m,V9m){var r48X=G3CX;var z48X=H5ZZ;var Z7SX="textarea";var U9m,r9m,S9m,d9m,m9m,w9m,G9m,J9m,v9m;z48X.F4XX(z48X.I4XX);m9m=Y9m.cloneNode(!z48X.z4XX(z48X.n4XX,r48X.k4CX));w9m=O1t.contains(Y9m.ownerDocument,Y9m);if(!m5Q.noCloneChecked&&!(+r48X.j4CX!==Y9m.nodeType&&x3uX.c3uX*z48X.n4XX!==Y9m.nodeType||O1t.isXMLDoc(Y9m))){d9m=w5Q(m9m);S9m=w5Q(Y9m);z48X.F4XX(z48X.w4XX);U9m=z48X.r4XX(z48X.I4XX,r48X.k4CX);for(r9m=S9m.length;U9mO1t.inArray(this,f9m)&&(O1t.cleanData(w5Q(this)),g9m&&g9m.replaceChild(e9m,this));},f9m);}});O1t.each({appendTo:E7SX,prependTo:q7SX,insertBefore:s7SX,insertAfter:a7SX,replaceAll:G7SX},function(Z9m,q9m){O1t.fn[Z9m]=function(o9m){for(var y9m=[],R9m=O1t(o9m),B9m=R9m.length-+G3CX.j4CX,F9m=G3CX.k4CX|H5ZZ.I4XX;F9m<=B9m;F9m++){o9m=F9m===B9m?this:this.clone(!H5ZZ.I4XX),O1t(R9m[F9m])[q9m](o9m),i6Q.apply(y9m,o9m.get());}return this.pushStack(y9m);};});v0Q=b7SX;Y1RX.i4XX(Y1RX.d8CX);u6Q=RegExp(Y1RX.z4XX(U7SX,B6Q,p7SX),t1RX.j4UX);I6Q=function(O9m){var P9m;P9m=O9m.ownerDocument.defaultView;return P9m&&P9m.opener||(P9m=T1t),P9m.getComputedStyle(O9m);};M6Q=function(){var A7SX="4px";var H7SX="2px";var v7SX="1%";var C7SX="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%";var s9m;if(X5Q){X5Q.style.cssText=C7SX;X5Q.innerHTML=G3CX.e4CX;Q6Q.appendChild(Y6Q);s9m=T1t.getComputedStyle(X5Q);E9Q=v7SX!==s9m.top;b9Q=H7SX===s9m.marginLeft;l9Q=A7SX===s9m.width;X5Q.style.marginRight=X1RX.Q4dX;A9Q=A7SX===s9m.marginRight;Q6Q.removeChild(Y6Q);X5Q=G3CX.X4CX;}};Y6Q=H5Q.createElement(X1RX.f4dX);X5Q=H5Q.createElement(X1RX.f4dX);X5Q.style&&(X5Q.style.backgroundClip=o7SX,X5Q.cloneNode(!(Q1RX.k4CX*Y1RX.n4XX)).style.backgroundClip=Q1RX.e4CX,m5Q.clearCloneStyle=o7SX===X5Q.style.backgroundClip,Y6Q.style.cssText=u7SX,Y6Q.appendChild(X5Q),O1t.extend(m5Q,{pixelPosition:function(){return M6Q(),E9Q;},boxSizingReliable:function(){return M6Q(),l9Q;},pixelMarginRight:function(){return M6Q(),A9Q;},reliableMarginLeft:function(){return M6Q(),b9Q;}}));function q9Q(B4Q,P4Q,O4Q){return(B4Q=H6Q.exec(P4Q))?Math.max(+G3CX.k4CX,B4Q[+G3CX.U4CX]-(O4Q||G3CX.k4CX*H5ZZ.n4XX))+(B4Q[+G3CX.l4CX]||X1RX.q9dX):P4Q;}function d9Q(I2Q,W2Q,x2Q,c2Q){var x7SX="386.77";var e7SX="549";var L7SX="5602";var s0CX=502;var X2Q,M2Q;function j2Q(N2Q){var E2Q;return X2Q[N2Q]=!H5ZZ.I4XX,O1t.each(I2Q[N2Q]||[],function(b2Q,A2Q){var l2Q;l2Q=A2Q(W2Q,x2Q,c2Q);return x3uX.A7uX!=typeof l2Q||M2Q||X2Q[l2Q]?M2Q?!(E2Q=l2Q):void+G3CX.k4CX:(W2Q.dataTypes.unshift(l2Q),j2Q(l2Q),!+G3CX.j4CX);}),E2Q;}X2Q={};H5ZZ.F4XX(G3CX.g7CX);M2Q=H5ZZ.r4XX(I2Q,F6Q);return j2Q(W2Q.dataTypes[+G3CX.k4CX])||!X2Q[(+L7SX,e7SX|H5ZZ.I4XX)>s0CX?A0UX.W4UX:x7SX*H5ZZ.n4XX]&&j2Q(A0UX.W4UX);}!+Q1RX.k4CX;L9Q=c7SX;X0Q=T7SX;z9Q={position:X1RX.W0dX,visibility:t1RX.w4UX,display:M7SX};W0Q={letterSpacing:Q1RX.k4CX,fontWeight:l1RX.r7uX};j0Q=[N7SX,h7SX,t1RX.V7SX];M0Q=H5Q.createElement(X1RX.f4dX).style;O1t.extend({cssHooks:{opacity:{get:function(H3m,U3m){var T9m;if(U3m){T9m=V6Q(H3m,x3uX.H6LX);return G3CX.e4CX===T9m?G3CX.j4CX:T9m;}}}},cssNumber:{animationIterationCount:!(Q1RX.k4CX|Y1RX.I4XX),columnCount:!+Q1RX.k4CX,fillOpacity:!(Q1RX.k4CX|Y1RX.I4XX),flexGrow:!+Q1RX.k4CX,flexShrink:!(Q1RX.k4CX*Y1RX.n4XX),fontWeight:!+Q1RX.k4CX,lineHeight:!+Q1RX.k4CX,opacity:!+Q1RX.k4CX,order:!+Q1RX.k4CX,orphans:!(Q1RX.k4CX-Y1RX.I4XX),widows:!(Q1RX.k4CX|Y1RX.I4XX),zIndex:!(Q1RX.k4CX*Y1RX.n4XX),zoom:!Y1RX.I4XX},cssProps:{"float":z7SX},style:function(S3m,d3m,Y3m,V3m){var X8QX=G3CX;var m3m,G3m,r3m,v3m,w3m,J3m;if(S3m&&+X8QX.l4CX!==S3m.nodeType&&+X8QX.Y4CX!==S3m.nodeType&&S3m.style){v3m=O1t.camelCase(d3m);w3m=X0Q.test(d3m);J3m=S3m.style;return w3m||(d3m=i9Q(v3m)),r3m=O1t.cssHooks[d3m]||O1t.cssHooks[v3m],void(X8QX.k4CX*H5ZZ.n4XX)===Y3m?r3m&&A0UX.r7SX in r3m&&void(X8QX.k4CX-H5ZZ.I4XX)!==(m3m=r3m.get(S3m,!+X8QX.j4CX,V3m))?m3m:J3m[d3m]:(G3m=typeof Y3m,x3uX.A7uX===G3m&&(m3m=H6Q.exec(Y3m))&&m3m[H5ZZ.n4XX]&&(Y3m=S9Q(S3m,d3m,m3m),G3m=x3uX.Z1rX),X8QX.X4CX!=Y3m&&Y3m===Y3m&&(x3uX.Z1rX===G3m&&(Y3m+=m3m&&m3m[+X8QX.l4CX]||(O1t.cssNumber[v3m]?X8QX.e4CX:X1RX.q9dX)),m5Q.clearCloneStyle||X8QX.e4CX!==Y3m||+X8QX.k4CX!==d3m.indexOf(X1RX.R6UX)||(J3m[d3m]=A0UX.i7SX),r3m&&F7SX in r3m&&void H5ZZ.I4XX===(Y3m=r3m.set(S3m,Y3m,V3m))||(w3m?J3m.setProperty(d3m,Y3m):J3m[d3m]=Y3m)),void+X8QX.k4CX);}},css:function(M3m,h3m,D3m,I3m){var Q3m,W3m,X3m,j3m;j3m=O1t.camelCase(h3m);return X0Q.test(h3m)||(h3m=i9Q(j3m)),X3m=O1t.cssHooks[h3m]||O1t.cssHooks[j3m],X3m&&A0UX.r7SX in X3m&&(Q3m=X3m.get(M3m,!+G3CX.k4CX,D3m)),void H5ZZ.I4XX===Q3m&&(Q3m=V6Q(M3m,h3m,I3m)),x3uX.Z7rX===Q3m&&h3m in W0Q&&(Q3m=W0Q[h3m]),G3CX.e4CX===D3m||D3m?(W3m=parseFloat(Q3m),!+G3CX.k4CX===D3m||isFinite(W3m)?W3m||G3CX.k4CX|H5ZZ.I4XX:Q3m):Q3m;}});function n9Q(e4Q,Z4Q){return{get:function(){return e4Q()?void delete this.get:(this.get=Z4Q).apply(this,arguments);}};}O1t.each([X1RX.s6dX,X1RX.T8UX],function(c3m,x3m){O1t.cssHooks[x3m]={get:function(N3m,l3m,E3m){if(l3m){return!L9Q.test(O1t.css(N3m,o3SX))||N3m.getClientRects().length&&N3m.getBoundingClientRect().width?P9Q(N3m,x3m,E3m):T6Q(N3m,z9Q,function(){return P9Q(N3m,x3m,E3m);});}},set:function(A3m,n3m,b3m){var L3m,C3m;C3m=b3m&&I6Q(A3m);b3m=b3m&&B9Q(A3m,x3m,b3m,I7SX===O1t.css(A3m,n7SX,!(G3CX.j4CX*H5ZZ.n4XX),C3m),C3m);return b3m&&(L3m=H6Q.exec(n3m))&&X1RX.q9dX!==(L3m[+G3CX.l4CX]||X1RX.q9dX)&&(A3m.style[x3m]=n3m,n3m=O1t.css(A3m,x3m)),q9Q(A3m,n3m,b3m);}};});O1t.cssHooks.marginLeft=n9Q(m5Q.reliableMarginLeft,function(a3m,z3m){if(z3m){return(parseFloat(V6Q(a3m,w7SX))||a3m.getBoundingClientRect().left-T6Q(a3m,{marginLeft:G3CX.k4CX|H5ZZ.I4XX},function(){return a3m.getBoundingClientRect().left;}))+X1RX.q9dX;}});O1t.each({margin:Q1RX.e4CX,padding:Q1RX.e4CX,border:P7SX},function(t3m,K3m){H5ZZ.F4XX(H5ZZ.W8CX);O1t.cssHooks[H5ZZ.r4XX(K3m,t3m)]={expand:function(p3m){var E0QX=G3CX;var D0QX=H5ZZ;var i3m,u3m;D0QX.i4XX(D0QX.w4XX);i3m=D0QX.z4XX(D0QX.I4XX,E0QX.k4CX);u3m={};for(p3m=x3uX.A7uX==typeof p3m?p3m.split(E0QX.W3uX):[p3m];E0QX.t4CX*D0QX.n4XX>i3m;i3m++){u3m[t3m+n5Q[i3m]+K3m]=p3m[i3m]||p3m[i3m-+E0QX.U4CX]||p3m[+E0QX.k4CX];}return u3m;}};v0Q.test(t3m)||(O1t.cssHooks[t3m+K3m].set=q9Q);});O1t.fn.extend({css:function(k3m,f3m){return l5Q(this,function(Z3m,g3m,q3m){var m0QX=H5ZZ;var o3m,F3m,e3m;F3m={};m0QX.F4XX(m0QX.I4XX);e3m=m0QX.z4XX(m0QX.n4XX,G3CX.k4CX);if(Array.isArray(g3m)){q3m=I6Q(Z3m);for(o3m=g3m.length;e3mM8Q;M8Q+=+H8QX.U4CX-j8Q){x8Q=n5Q[M8Q],W8Q[J7SX+x8Q]=W8Q[K6SX+x8Q]=I8Q;}return j8Q&&(W8Q.opacity=W8Q.width=I8Q),W8Q;}function b0Q(E3Q){var W6SX="array";var R6SX="length";var l3Q,A3Q;l3Q=!!E3Q&&R6SX in E3Q&&E3Q.length;A3Q=O1t.type(E3Q);return G3CX.d4CX!==A3Q&&!O1t.isWindow(E3Q)&&(W6SX===A3Q||+G3CX.k4CX===l3Q||x3uX.Z1rX==typeof l3Q&&G3CX.k4CX-H5ZZ.I4XXs4Q;s4Q+=+y3QX.U4CX){J7SX===H8Q&&(T4Q+=O1t.css(U8Q,H8Q+n5Q[s4Q],!(y3QX.k4CX*f3QX.n4XX),Y8Q)),d8Q?(X6SX===H8Q&&(T4Q-=O1t.css(U8Q,K6SX+n5Q[s4Q],!f3QX.I4XX,Y8Q)),J7SX!==H8Q&&(T4Q-=O1t.css(U8Q,l6SX+n5Q[s4Q]+P7SX,!+y3QX.k4CX,Y8Q))):(T4Q+=O1t.css(U8Q,K6SX+n5Q[s4Q],!(y3QX.k4CX|f3QX.I4XX),Y8Q),K6SX!==H8Q&&(T4Q+=O1t.css(U8Q,l6SX+n5Q[s4Q]+P7SX,!f3QX.I4XX,Y8Q)));}return T4Q;}O1t.fn.extend({fadeTo:function(e7m,Z7m,q7m,F7m){return this.filter(v6Q).css(x3uX.H6LX,+G3CX.k4CX).show().end().animate({opacity:Z7m},e7m,q7m,F7m);},animate:function(B7m,o7m,P7m,O7m){var R7m,y7m;R7m=O1t.isEmptyObject(B7m);y7m=O1t.speed(o7m,P7m,O7m);o7m=function(){var j6SX="finish";var s7m;s7m=M5Q(this,O1t.extend({},B7m),y7m);(R7m||s1t.get(this,j6SX))&&s7m.stop(!H5ZZ.I4XX);};return o7m.finish=o7m,R7m||!(G3CX.j4CX|H5ZZ.I4XX)===y7m.queue?this.each(o7m):this.queue(y7m.queue,o7m);},stop:function(T7m,U4m,H4m){var Y4m;Y4m=function(d4m){var S4m;S4m=d4m.stop;delete d4m.stop;S4m(H4m);};return x3uX.A7uX!=typeof T7m&&(H4m=U4m,U4m=T7m,T7m=void H5ZZ.I4XX),U4m&&!H5ZZ.n4XX!==T7m&&this.queue(T7m||a3SX,[]),this.each(function(){var i9QX=G3CX;var G4m,m4m,J4m,r4m;G4m=!+i9QX.k4CX;m4m=i9QX.X4CX!=T7m&&T7m+U3SX;J4m=O1t.timers;r4m=s1t.get(this);if(m4m){r4m[m4m]&&r4m[m4m].stop&&Y4m(r4m[m4m]);}else for(m4m in r4m){r4m[m4m]&&r4m[m4m].stop&&f9Q.test(m4m)&&Y4m(r4m[m4m]);}for(m4m=J4m.length;m4m--;){J4m[m4m].elem!==this||i9QX.X4CX!=T7m&&J4m[m4m].queue!==T7m||(J4m[m4m].anim.stop(H4m),G4m=!+i9QX.j4CX,J4m.splice(m4m,+i9QX.j4CX));}!G4m&&H4m||O1t.dequeue(this,T7m);});},finish:function(v4m){return!+G3CX.j4CX!==v4m&&(v4m=v4m||a3SX),this.each(function(){var z9QX=G3CX;var V9QX=H5ZZ;var w4m,h4m,V4m,Q4m,D4m;h4m=s1t.get(this);V9QX.i4XX(V9QX.W8CX);V4m=h4m[V9QX.z4XX(G3SX,v4m)];V9QX.i4XX(V9QX.W8CX);w4m=h4m[V9QX.r4XX(U3SX,v4m)];Q4m=O1t.timers;D4m=V4m?V4m.length:z9QX.k4CX|V9QX.I4XX;h4m.finish=!V9QX.I4XX;O1t.queue(this,v4m,[]);w4m&&w4m.stop&&w4m.stop.call(this,!+z9QX.k4CX);for(w4m=Q4m.length;w4m--;){Q4m[w4m].elem===this&&Q4m[w4m].queue===v4m&&(Q4m[w4m].anim.stop(!(z9QX.k4CX*V9QX.n4XX)),Q4m.splice(w4m,z9QX.j4CX*V9QX.n4XX));}for(w4m=z9QX.k4CX*V9QX.n4XX;w4mA8m.indexOf(J3QX.W3uX+L8m+J3QX.W3uX)&&(A8m+=L8m+J3QX.W3uX);}A8m=u5Q(A8m);C8m!==A8m&&n8m.setAttribute(A0UX.l8SX,A8m);}return this;},removeClass:function(i8m){var O7QX=H5ZZ;var g7QX=G3CX;var g8m,u8m,p8m,k8m,f8m,e8m,Z8m;Z8m=+g7QX.k4CX;if(O1t.isFunction(i8m)){return this.each(function(q8m){O1t(this).removeClass(i8m.call(this,q8m,k5Q(this)));});}if(!arguments.length){return this.attr(A0UX.l8SX,g7QX.e4CX);}if(x3uX.A7uX==typeof i8m&&i8m)for(g8m=i8m.match(V5Q)||[];u8m=this[Z8m++];)if(k8m=k5Q(u8m),p8m=g7QX.j4CX*O7QX.n4XX===u8m.nodeType&&g7QX.W3uX+u5Q(k8m)+g7QX.W3uX){for(e8m=O7QX.I4XX;f8m=g8m[e8m++];)for(;-+g7QX.j4CXX2m?I2m:W2m?X2m:G3CX.k4CX-H5ZZ.I4XX;D2mz2m.indexOf(x3uX.a6uX)&&A0UX.p6SX+z2m,a2m=a2m[O1t.expando]?a2m:new O1t.Event(z2m,c7QX.W4CX==typeof a2m&&a2m),a2m.isTrigger=Z2m?c7QX.U4CX*T7QX.n4XX:c7QX.l4CX*T7QX.n4XX,a2m.namespace=i2m.join(c7QX.P4CX),a2m.rnamespace=a2m.namespace?RegExp(W7SX+i2m.join(d7SX)+g7SX):c7QX.X4CX,a2m.result=void+c7QX.k4CX,a2m.target||(a2m.target=t2m),k2m=c7QX.X4CX==k2m?[a2m]:O1t.makeArray(k2m,[a2m]),u2m=O1t.event.special[z2m]||{},Z2m||!u2m.trigger||!(c7QX.j4CX-T7QX.I4XX)!==u2m.trigger.apply(t2m,k2m))){if(!Z2m&&!u2m.noBubble&&!O1t.isWindow(t2m)){q2m=u2m.delegateType||z2m;for(E0Q.test(q2m+z2m)||(K2m=K2m.parentNode);K2m;K2m=K2m.parentNode){e2m.push(K2m),p2m=K2m;}p2m===(t2m.ownerDocument||H5Q)&&e2m.push(p2m.defaultView||p2m.parentWindow||T1t);}for(i2m=T7QX.I4XX;(K2m=e2m[i2m++])&&!a2m.isPropagationStopped();){a2m.type=c7QX.j4CX-T7QX.I4XXV5M||S1SX*J1QX.n4XX===V5M;if(m5M){d5M=t1m;for(var X5M=K1m,J5M,v5M,Q5M,S5M,x5M=d5M.contents,w5M=d5M.dataTypes;W2QX.W4UX===w5M[K2QX.k4CX|J1QX.I4XX];){w5M.shift(),void(K2QX.k4CX*J1QX.n4XX)===J5M&&(J5M=d5M.mimeType||X5M.getResponseHeader(Q1SX));}if(J5M)for(v5M in x5M)if(x5M[v5M]&&x5M[v5M].test(J5M)){w5M.unshift(v5M);break;}if(w5M[+K2QX.k4CX]in m5M){Q5M=w5M[+K2QX.k4CX];}else{for(v5M in m5M){if(!w5M[J1QX.I4XX]||d5M.converters[v5M+(B5CXV5M&&(V5M=K2QX.k4CX|J1QX.I4XX)));K1m.status=V5M;J1QX.F4XX(J1QX.W8CX);K1m.statusText=J1QX.z4XX(K2QX.e4CX,N5M||G5M);h5M?R1m.resolveWith(k1m,[c5M,G5M,K1m]):R1m.rejectWith(k1m,[K1m,G5M,I5M]);K1m.statusCode(e1m);J1QX.i4XX(J1QX.w4XX);e1m=void J1QX.z4XX(J1QX.I4XX,K2QX.k4CX);B1m&&y1m.trigger(h5M?s1SX:a1SX,[K1m,t1m,h5M?c5M:I5M]);s1m.fireWith(k1m,[K1m,G5M]);B1m&&(y1m.trigger(G1SX,[K1m,t1m]),--O1t.active||O1t.event.trigger(b1SX));}}t1m.hasContent=!r3Q.test(t1m.type);p1m=t1m.url.replace(d3Q,R6QX.e4CX);t1m.hasContent?t1m.data&&t1m.processData&&+R6QX.k4CX===(t1m.contentType||R6QX.e4CX).indexOf(U1SX)&&(t1m.data=t1m.data.replace(Y3Q,x3uX.m9uX)):(q1m=t1m.url.slice(p1m.length),t1m.data&&(p1m+=(q6Q.test(p1m)?X1RX.k3fX:X1RX.o4dX)+t1m.data,delete t1m.data),!W6QX.n4XX===t1m.cache&&(p1m=p1m.replace(S3Q,F5UX),q1m=(q6Q.test(p1m)?X1RX.k3fX:X1RX.o4dX)+p1SX+A0Q++ +q1m),t1m.url=p1m+q1m);t1m.ifModified&&(O1t.lastModified[p1m]&&K1m.setRequestHeader(C1SX,O1t.lastModified[p1m]),O1t.etag[p1m]&&K1m.setRequestHeader(v1SX,O1t.etag[p1m]));(t1m.data&&t1m.hasContent&&!+R6QX.j4CX!==t1m.contentType||u1m.contentType)&&K1m.setRequestHeader(Q1SX,t1m.contentType);K1m.setRequestHeader(H1SX,t1m.dataTypes[+R6QX.k4CX]&&t1m.accepts[t1m.dataTypes[+R6QX.k4CX]]?t1m.accepts[t1m.dataTypes[+R6QX.k4CX]]+(A0UX.W4UX!==t1m.dataTypes[R6QX.k4CX|W6QX.I4XX]?x3uX.E8dX+a0Q+A1SX:R6QX.e4CX):t1m.accepts[A0UX.W4UX]);for(P1m in t1m.headers){K1m.setRequestHeader(P1m,t1m.headers[P1m]);}if(t1m.beforeSend&&(!+R6QX.j4CX===t1m.beforeSend.call(k1m,K1m,t1m)||i1m)){return K1m.abort();}if(Y5M=o1SX,s1m.add(t1m.complete),K1m.done(t1m.success),K1m.fail(t1m.error),g1m=d9Q(F6Q,t1m,u1m,K1m)){if(K1m.readyState=R6QX.j4CX-W6QX.I4XX,B1m&&y1m.trigger(u1SX,[K1m,t1m]),i1m){return K1m;}t1m.async&&+R6QX.k4CX>>+a1RX.k4CX;if(+a1RX.k4CX===G3M){return-+a1RX.j4CX;}J3M=q6QX.I4XX;(a1RX.k4CX|q6QX.I4XX)=G3M){return-+a1RX.j4CX;}for(J3M=q6QX.I4XX<=J3M?J3M:Math.max(G3M-Math.abs(J3M),+a1RX.k4CX);J3Mf3M.__handjsGlobalRegisteredEvents[g3M]&&(f3M.__handjsGlobalRegisteredEvents[g3M]=+a1RX.k4CX));}if(!window.MSPointerEvent)switch(g3M){case c2SX:void+a1RX.k4CX!==f3M.onmouseenter&&a9M(f3M,T2SX,function(Z3M){l9M(Z3M,g3M);},e3M);break;case M2SX:void(a1RX.k4CX|H5ZZ.I4XX)!==f3M.onmouseleave&&a9M(f3M,N2SX,function(q3M){l9M(q3M,g3M);},e3M);}};X9M=function(F3M){var o3M,y3M;o3M=F3M.prototype?F3M.prototype.addEventListener:F3M.addEventListener;y3M=function(R3M,B3M,P3M){-(a1RX.j4CX-H5ZZ.I4XX)!=E9M.indexOf(R3M)&&n9M(this,R3M,!+a1RX.k4CX);void(a1RX.k4CX|H5ZZ.I4XX)===o3M?this.attachEvent(A0UX.p6SX+c9M(R3M),B3M):o3M.call(this,R3M,B3M,P3M);};F3M.prototype?F3M.prototype.addEventListener=y3M:F3M.addEventListener=y3M;};D9M=function(O3M){var s3M,T3M;s3M=O3M.prototype?O3M.prototype.removeEventListener:O3M.removeEventListener;T3M=function(H7M,U7M,Y7M){-H5ZZ.n4XX!=E9M.indexOf(H7M)&&n9M(this,H7M,!(a1RX.j4CX*H5ZZ.n4XX));void+a1RX.k4CX===s3M?this.detachEvent(c9M(H7M),U7M):s3M.call(this,H7M,U7M,Y7M);};O3M.prototype?O3M.prototype.removeEventListener=T3M:O3M.removeEventListener=T3M;};X9M(window);X9M(window.HTMLElement||window.Element);X9M(document);X9M(HTMLBodyElement);X9M(HTMLDivElement);X9M(HTMLImageElement);X9M(HTMLUListElement);X9M(HTMLAnchorElement);X9M(HTMLLIElement);X9M(HTMLTableElement);window.HTMLSpanElement&&X9M(HTMLSpanElement);window.HTMLCanvasElement&&X9M(HTMLCanvasElement);window.SVGElement&&X9M(SVGElement);D9M(window);D9M(window.HTMLElement||window.Element);D9M(document);D9M(HTMLBodyElement);D9M(HTMLDivElement);D9M(HTMLImageElement);D9M(HTMLUListElement);D9M(HTMLAnchorElement);D9M(HTMLLIElement);D9M(HTMLTableElement);window.HTMLSpanElement&&D9M(HTMLSpanElement);window.HTMLCanvasElement&&D9M(HTMLCanvasElement);window.SVGElement&&D9M(SVGElement);q1RX.F4XX(q1RX.w4XX);M9M=!q1RX.z4XX(q1RX.I4XX,a1RX.j4CX);L9M=-+a1RX.j4CX;window.MSPointerEvent?t9M(function(d7M){var h2SX="MS";d7M=E9M.indexOf(d7M);return h2SX+z9M[d7M];},N9M):(t9M(c9M,l9M),void(a1RX.k4CX*q1RX.n4XX)!==window.ontouchstart&&(window.addEventListener(A0UX.V2SX,function(m7M){var S7M;for(var r7M=a1RX.k4CX|H5ZZ.I4XX;r7Mh4M.x&&(h4M.x=Q4M.x);Q4M.xh4M.y&&(h4M.y=Q4M.y);Q4M.yh4M.z&&(h4M.z=Q4M.z);Q4M.zx4M&&(this.lowerBound.x=x4M);x4M=c4M.upperBound.x;this.upperBound.xx4M&&(this.lowerBound.y=x4M);x4M=c4M.upperBound.y;this.upperBound.yx4M&&(this.lowerBound.z=x4M);x4M=c4M.upperBound.z;this.upperBound.z=b4M.x&&n4M.y<=L4M.y&&C4M.y>=b4M.y&&n4M.z<=L4M.z&&C4M.z>=b4M.z;};r4M.prototype.getCorners=function(i4M,t4M,K4M,p4M,g4M,u4M,k4M,f4M){var a4M,z4M;a4M=this.lowerBound;z4M=this.upperBound;i4M.copy(a4M);t4M.set(z4M.x,a4M.y,a4M.z);K4M.set(z4M.x,z4M.y,a4M.z);p4M.set(a4M.x,z4M.y,z4M.z);g4M.set(z4M.x,a4M.y,a4M.z);u4M.set(a4M.x,z4M.y,a4M.z);k4M.set(a4M.x,a4M.y,z4M.z);f4M.copy(z4M);};S4M=[new m4M(),new m4M(),new m4M(),new m4M(),new m4M(),new m4M(),new m4M(),new m4M()];r4M.prototype.toLocalFrame=function(q4M,F4M){var W9QX=G3CX;var R9QX=H5ZZ;var Z4M;this.getCorners(S4M[R9QX.I4XX],S4M[W9QX.j4CX|R9QX.I4XX],S4M[W9QX.U4CX|R9QX.I4XX],S4M[W9QX.l4CX|R9QX.I4XX],S4M[W9QX.t4CX-R9QX.I4XX],S4M[+W9QX.V8uX],S4M[W9QX.O8uX*R9QX.n4XX],S4M[W9QX.n4CX|R9QX.I4XX]);for(var e4M=W9QX.k4CX*R9QX.n4XX;W9QX.Y4CX-R9QX.I4XX!==e4M;e4M++){Z4M=S4M[e4M];q4M.pointToLocal(Z4M,Z4M);}return F4M.setFromPoints(S4M);};r4M.prototype.toWorldFrame=function(R4M,B4M){var g9QX=H5ZZ;var d9QX=G3CX;var y4M;this.getCorners(S4M[+d9QX.k4CX],S4M[g9QX.n4XX],S4M[+d9QX.U4CX],S4M[+d9QX.l4CX],S4M[+d9QX.t4CX],S4M[d9QX.V8uX*g9QX.n4XX],S4M[+d9QX.O8uX],S4M[d9QX.n4CX*g9QX.n4XX]);for(var o4M=g9QX.I4XX;(d9QX.Y4CX|g9QX.I4XX)!==o4M;o4M++){y4M=S4M[o4M];R4M.pointToWorld(y4M,y4M);}return B4M.setFromPoints(S4M);};},{"../math/Vec3":j1RX.b8CX,"../utils/Utils":j1RX.n8CX}],4:[function(s4M,O4M){O4M.exports=P4M;P4M.prototype.get=function(T4M,H8M){var H2CX=294;var U8M;T4M=T4M.index;H8M=H8M.index;if(H8M>T4M){U8M=H8M;H8M=T4M;T4M=U8M;}H5ZZ.F4XX(H2CX);return this.matrix[H5ZZ.z4XX(H8M,T4M,G3CX.j4CX,T4M,G3CX.j4CX,G3CX.j4CX)];};P4M.prototype.set=function(Y8M,d8M,m8M){var O9QX=H5ZZ;var A2CX=295;var S8M;Y8M=Y8M.index;d8M=d8M.index;if(d8M>Y8M){S8M=d8M;d8M=Y8M;Y8M=S8M;}O9QX.F4XX(A2CX);this.matrix[O9QX.z4XX(d8M,G3CX.j4CX,Y8M,Y8M,G3CX.j4CX,O9QX.I4XX,O9QX.n4XX)]=m8M?O9QX.n4XX:G3CX.k4CX|O9QX.I4XX;};function P4M(){this.matrix=[];}P4M.prototype.reset=function(){for(var r8M=H5ZZ.I4XX,J8M=this.matrix.length;r8M!==J8M;r8M++){this.matrix[r8M]=H5ZZ.I4XX;}};P4M.prototype.setNumObjects=function(G8M){var o2CX=296;H5ZZ.i4XX(o2CX);this.matrix.length=H5ZZ.z4XX(G3CX.j4CX,G8M,G3CX.j4CX,G8M);};},{}],5:[function(h8M,x8M){var A0SX="../shapes/Plane";var V8M,Q8M,I8M,j8M,M8M,w8M,X8M,D8M,W8M;V8M=h8M(C0SX);Q8M=h8M(U0SX);I8M=h8M(v0SX);h8M(H0SX);h8M(A0SX);x8M.exports=v8M;v8M.prototype.collisionPairs=function(){var o0SX="collisionPairs not implemented for this BroadPhase class!";throw Error(o0SX);};j8M=V8M.STATIC|V8M.KINEMATIC;v8M.prototype.needBroadphaseCollision=function(c8M,N8M){var k9QX=G3CX;return+k9QX.k4CX===(c8M.collisionFilterGroup&N8M.collisionFilterMask)||+k9QX.k4CX===(N8M.collisionFilterGroup&c8M.collisionFilterMask)||(k9QX.k4CX-H5ZZ.I4XX!==(c8M.type&j8M)||c8M.sleepState===V8M.SLEEPING)&&((k9QX.k4CX|H5ZZ.I4XX)!==(N8M.type&j8M)||N8M.sleepState===V8M.SLEEPING)?!(k9QX.j4CX-H5ZZ.I4XX):!(k9QX.k4CX*H5ZZ.n4XX);};v8M.prototype.intersectionTest=function(E8M,l8M,A8M,b8M){this.useBoundingBoxes?this.doBoundingBoxBroadphase(E8M,l8M,A8M,b8M):this.doBoundingSphereBroadphase(E8M,l8M,A8M,b8M);};M8M=new Q8M();function v8M(){var Z9QX=H5ZZ;this.world=G3CX.X4CX;Z9QX.F4XX(Z9QX.n4XX);this.useBoundingBoxes=!Z9QX.r4XX(Z9QX.I4XX,G3CX.j4CX);Z9QX.i4XX(Z9QX.I4XX);this.dirty=!Z9QX.z4XX(Z9QX.n4XX,G3CX.k4CX);}new Q8M();new I8M();new Q8M();v8M.prototype.doBoundingSphereBroadphase=function(n8M,C8M,a8M,z8M){var L8M;C8M.position.vsub(n8M.position,M8M);L8M=Math.pow(n8M.boundingRadius+C8M.boundingRadius,+G3CX.U4CX);M8M.norm2()W8M.norm2();};v8M.prototype.aabbQuery=function(){var u0SX=".aabbQuery is not implemented in this Broadphase subclass.";console.warn(u0SX);return[];};},{"../math/Quaternion":+m1RX.o23X,"../math/Vec3":j1RX.b8CX,"../objects/Body":j1RX.U8CX,"../shapes/Plane":+m1RX.K8UX,"../shapes/Shape":Z1RX.q0SX*j1RX.n4XX}],6:[function(R8M,s8M){var B8M,y8M,P8M,O8M;s8M.exports=o8M;B8M=R8M(L0SX);y8M=R8M(U0SX);P8M=R8M(H0SX);function o8M(T8M,H2M,U2M,Y2M,d2M){var G9QX=H5ZZ;var a9QX=G3CX;var e0SX="GridBroadphase: Each dimension's n must be >0";B8M.apply(this);this.nx=U2M||a9QX.u3uX|G9QX.I4XX;this.ny=Y2M||a9QX.u3uX|G9QX.I4XX;this.nz=d2M||G9QX.y8CX;this.aabbMin=T8M||new y8M(x3uX.f5LX*G9QX.n4XX,a9QX.r3CX,+x3uX.f5LX);this.aabbMax=H2M||new y8M(-a9QX.r3CX,-(x3uX.f5LX|G9QX.I4XX),-(x3uX.f5LX-G9QX.I4XX));T8M=this.nx*this.ny*this.nz;if((a9QX.k4CX|G9QX.I4XX)>=T8M){throw e0SX;}this.bins=[];this.binLengths=[];this.bins.length=T8M;this.binLengths.length=T8M;for(H2M=a9QX.k4CX*G9QX.n4XX;H2Mo2M?o2M=G9NX.I4XX:o2M>=D2M&&(o2M=D2M-(b9NX.j4CX|G9NX.I4XX));+b9NX.k4CX>R2M?R2M=+b9NX.k4CX:R2M>=Q2M&&(R2M=Q2M-+b9NX.j4CX);+b9NX.k4CX>B2M?B2M=+b9NX.k4CX:B2M>=V2M&&(B2M=V2M-(b9NX.j4CX|G9NX.I4XX));+b9NX.k4CX>P2M?P2M=G9NX.I4XX:P2M>=D2M&&(P2M=D2M-(b9NX.j4CX-G9NX.I4XX));+b9NX.k4CX>y2M?y2M=b9NX.k4CX|G9NX.I4XX:y2M>=Q2M&&(y2M=Q2M-+b9NX.j4CX);+b9NX.k4CX>O2M?O2M=+b9NX.k4CX:O2M>=V2M&&(O2M=V2M-(b9NX.j4CX|G9NX.I4XX));o2M*=b2M;R2M*=A2M;B2M*=l2M;P2M*=b2M;y2M*=A2M;for(O2M*=l2M;o2M<=P2M;o2M+=b2M)for(var T2M=R2M;T2M<=y2M;T2M+=A2M)for(var s2M=B2M;s2M<=O2M;s2M+=l2M){G9NX.i4XX(G9NX.d8CX);H1M=G9NX.r4XX(o2M,T2M,s2M);n2M[H1M][E2M[H1M]++]=U1M;}}};},{"../math/Vec3":+B1RX.V8LX,"../shapes/Shape":Z1RX.q0SX-j1RX.I4XX,"./Broadphase":k1RX.V8uX|j1RX.I4XX}],7:[function(S1M,r1M){var c0SX="./AABB";var d1M,m1M;r1M.exports=Y1M;d1M=S1M(L0SX);m1M=S1M(c0SX);Y1M.prototype=new d1M();function Y1M(){d1M.apply(this);}Y1M.prototype.constructor=Y1M;Y1M.prototype.collisionPairs=function(J1M,h1M,D1M){var Q1M,G1M,v1M,w1M,V1M;J1M=J1M.bodies;Q1M=J1M.length;for(G1M=H5ZZ.I4XX;G1M!==Q1M;G1M++)for(v1M=+G3CX.k4CX;v1M!==G1M;v1M++){w1M=J1M[G1M],V1M=J1M[v1M],this.needBroadphaseCollision(w1M,V1M)&&this.intersectionTest(w1M,V1M,h1M,D1M);}};new m1M();Y1M.prototype.aabbQuery=function(M1M,I1M,W1M){var X1M;W1M=W1M||[];for(var j1M=H5ZZ.I4XX;j1ME1M){A1M=l1M;l1M=E1M;E1M=A1M;}return E1M+x3uX.y6uX+l1M in this.matrix;};x1M.prototype.set=function(b1M,n1M,L1M){var C1M;b1M=b1M.id;n1M=n1M.id;if(n1M>b1M){C1M=n1M;n1M=b1M;b1M=C1M;}L1M?this.matrix[b1M+x3uX.y6uX+n1M]=!(G3CX.k4CX-H5ZZ.I4XX):delete this.matrix[b1M+x3uX.y6uX+n1M];};x1M.prototype.reset=function(){this.matrix={};};x1M.prototype.setNumObjects=function(){};function x1M(){this.matrix={};}},{}],9:[function(Z1M,Q5D){var B3QX=H5ZZ;var z1M,V5D,p1M,T1M,q1M,S5D,w5D,U5D,F1M,H5D,y1M,r5D,t1M,K1M,i1M,u1M,m5D,g1M,f1M,P1M,k1M,R1M,Y5D,o1M,J5D,G5D,v5D,s1M,d5D,e1M,O1M;Q5D.exports=a1M;z1M=Z1M(U0SX);V5D=Z1M(v0SX);p1M=Z1M(T0SX);Z1M(M0SX);Z1M(N0SX);T1M=Z1M(h0SX);q1M=Z1M(H0SX);S5D=Z1M(V0SX);a1M.prototype.constructor=a1M;a1M.CLOSEST=B3QX.n4XX;a1M.ANY=+G3CX.U4CX;B3QX.i4XX(B3QX.I4XX);a1M.ALL=B3QX.z4XX(B3QX.n4XX,G3CX.t4CX);w5D=new S5D();U5D=[];a1M.prototype.intersectWorld=function(E5D,N5D){this.mode=N5D.mode||a1M.ANY;this.result=N5D.result||new T1M();this.skipBackfaces=!!N5D.skipBackfaces;this.collisionFilterMask=x3uX.o6uX!==typeof N5D.collisionFilterMask?N5D.collisionFilterMask:-B3QX.n4XX;this.collisionFilterGroup=x3uX.o6uX!==typeof N5D.collisionFilterGroup?N5D.collisionFilterGroup:-+G3CX.j4CX;N5D.from&&this.from.copy(N5D.from);N5D.to&&this.to.copy(N5D.to);this.callback=N5D.callback||function(){};this.hasHit=!B3QX.n4XX;this.result.reset();this._updateDirection();this.getAABB(w5D);U5D.length=B3QX.I4XX;E5D.broadphase.aabbQuery(E5D,w5D,U5D);this.intersectBodies(U5D);return this.hasHit;};F1M=new z1M();H5D=new z1M();function B1M(W5D,X5D,j5D,M5D){var I5D,x5D,c5D;M5D.vsub(X5D,e1M);j5D.vsub(X5D,F1M);W5D.vsub(X5D,H5D);W5D=e1M.dot(e1M);X5D=e1M.dot(F1M);j5D=e1M.dot(H5D);M5D=F1M.dot(F1M);I5D=F1M.dot(H5D);return+G3CX.k4CX<=(x5D=M5D*j5D-X5D*I5D)&&+G3CX.k4CX<=(c5D=W5D*I5D-X5D*j5D)&&x5D+c5Di5D.boundingSphereRadius||(p5D=this[i5D.type])&&p5D.call(this,i5D,g5D,u5D,e5D);};new z1M();new z1M();t1M=new z1M();K1M=new z1M();i1M=new z1M();u1M=new z1M();new z1M();new T1M();a1M.prototype.intersectBox=function(Z5D,q5D,F5D,o5D){return this.intersectConvex(Z5D.convexPolyhedronRepresentation,q5D,F5D,o5D);};a1M.prototype[q1M.types.BOX]=a1M.prototype.intersectBox;a1M.prototype.intersectPlane=function(U6D,B5D,s5D,Y6D){var O5D,P5D,H6D,R5D,y5D,T5D;O5D=this.from;P5D=this.to;H6D=this._direction;B3QX.i4XX(B3QX.w4XX);R5D=new z1M(B3QX.r4XX(B3QX.I4XX,G3CX.k4CX),+G3CX.k4CX,+G3CX.j4CX);B5D.vmult(R5D,R5D);y5D=new z1M();O5D.vsub(s5D,y5D);B5D=y5D.dot(R5D);P5D.vsub(s5D,y5D);y5D=y5D.dot(R5D);if(!((G3CX.k4CX|B3QX.I4XX)V6D){V6D=r6D[+J9QX.k4CX];}if(J9QX.X4CX===Q6D||r6D[+J9QX.j4CX]w6D){w6D=r6D[B3QX.n4XX];}}if(J9QX.X4CX!==v6D){G6D.getRectMinMax(v6D,Q6D,V6D,w6D,[]);for(J6D=v6D;J6D<=V6D;J6D++)for(r6D=Q6D;r6D<=w6D;r6D++){if(this.result._shouldStop){return;}B3QX.i4XX(B3QX.n4XX);G6D.getConvexTrianglePillar(J6D,r6D,!B3QX.r4XX(B3QX.I4XX,J9QX.j4CX));p1M.pointToWorldFrame(X6D,h6D,G6D.pillarOffset,D6D);this.intersectConvex(G6D.pillarConvex,h6D,D6D,W6D,m5D);if(this.result._shouldStop){return;}B3QX.i4XX(B3QX.n4XX);G6D.getConvexTrianglePillar(J6D,r6D,!B3QX.r4XX(B3QX.I4XX,J9QX.k4CX));p1M.pointToWorldFrame(X6D,h6D,G6D.pillarOffset,D6D);this.intersectConvex(G6D.pillarConvex,h6D,D6D,W6D,m5D);}}};a1M.prototype[q1M.types.HEIGHTFIELD]=a1M.prototype.intersectHeightfield;g1M=new z1M();f1M=new z1M();a1M.prototype.intersectSphere=function(E6D,j6D,I6D,A6D){var K0QX=G3CX;var M6D,x6D,c6D,l6D,N6D;j6D=this.from;M6D=this.to;x6D=E6D.radius;c6D=Math.pow(M6D.x-j6D.x,+K0QX.U4CX)+Math.pow(M6D.y-j6D.y,K0QX.U4CX-B3QX.I4XX)+Math.pow(M6D.z-j6D.z,K0QX.U4CX-B3QX.I4XX);l6D=(K0QX.U4CX-B3QX.I4XX)*((M6D.x-j6D.x)*(j6D.x-I6D.x)+(M6D.y-j6D.y)*(j6D.y-I6D.y)+(M6D.z-j6D.z)*(j6D.z-I6D.z));B3QX.F4XX(B3QX.w4XX);var g2RR=B3QX.z4XX(B3QX.l8CX,B3QX.j8CX);x6D=Math.pow(j6D.x-I6D.x,g2RR)+Math.pow(j6D.y-I6D.y,K0QX.U4CX-B3QX.I4XX)+Math.pow(j6D.z-I6D.z,+K0QX.U4CX)-Math.pow(x6D,+K0QX.U4CX);N6D=Math.pow(l6D,K0QX.U4CX-B3QX.I4XX)-+K0QX.t4CX*c6D*x6D;B3QX.I4XX>N6D||(+K0QX.k4CX===N6D?(j6D.lerp(M6D,N6D,g1M),g1M.vsub(I6D,f1M),f1M.normalize(),this.reportIntersection(f1M,g1M,E6D,A6D,-(K0QX.j4CX*B3QX.n4XX))):(x6D=(-l6D-Math.sqrt(N6D))/(K0QX.U4CX*B3QX.n4XX*c6D),c6D=(-l6D+Math.sqrt(N6D))/((K0QX.U4CX|B3QX.I4XX)*c6D),B3QX.I4XX<=x6D&&(K0QX.j4CX|B3QX.I4XX)>=x6D&&(j6D.lerp(M6D,x6D,g1M),g1M.vsub(I6D,f1M),f1M.normalize(),this.reportIntersection(f1M,g1M,E6D,A6D,-(K0QX.j4CX-B3QX.I4XX))),!this.result._shouldStop&&K0QX.k4CX-B3QX.I4XX<=c6D&&B3QX.n4XX>=c6D&&(j6D.lerp(M6D,c6D,g1M),g1M.vsub(I6D,f1M),f1M.normalize(),this.reportIntersection(f1M,g1M,E6D,A6D,-+K0QX.j4CX))));};a1M.prototype[q1M.types.SPHERE]=a1M.prototype.intersectSphere;P1M=new z1M();new z1M();new z1M();k1M=new z1M();a1M.prototype.intersectConvex=function(p6D,y6D,o6D,F6D,n6D){var W0QX=G3CX;var i6D,C6D,b6D,L6D,t6D,g6D;n6D=n6D&&n6D.faceList||W0QX.X4CX;for(var f6D=p6D.faces,K6D=p6D.vertices,e6D=p6D.faceNormals,u6D=this._direction,a6D=this.from,Z6D=a6D.distanceTo(this.to),q6D=n6D?n6D.length:f6D.length,k6D=this.result,z6D=W0QX.k4CX|B3QX.I4XX;!k6D._shouldStop&&z6Db6D))){u6D.mult(b6D,t1M);t1M.vadd(a6D,t1M);K1M.copy(K6D[C6D[+W0QX.k4CX]]);L6D.vmult(K1M,K1M);t6D.vadd(K1M,K1M);for(b6D=+W0QX.j4CX;!k6D._shouldStop&&b6DZ6D||this.reportIntersection(P1M,t1M,p6D,F6D,i6D);}}}};a1M.prototype[q1M.types.CONVEXPOLYHEDRON]=a1M.prototype.intersectConvex;R1M=new z1M();Y5D=new z1M();o1M=new z1M();J5D=new z1M();G5D=new z1M();v5D=new z1M();new S5D();s1M=[];d5D=new p1M();a1M.prototype.intersectTrimesh=function(B6D,P6D,T6D,d0D){var d0QX=G3CX;var U0D,H0D,s6D,Y0D,O6D,R6D;U0D=B6D.indices;H0D=this.from;s6D=this.to;Y0D=this._direction;d5D.position.copy(T6D);d5D.quaternion.copy(P6D);p1M.vectorToLocalFrame(T6D,P6D,Y0D,Y5D);p1M.pointToLocalFrame(T6D,P6D,H0D,o1M);p1M.pointToLocalFrame(T6D,P6D,s6D,J5D);H0D=o1M.distanceSquared(J5D);B6D.tree.rayQuery(this,d5D,s1M);s6D=+d0QX.k4CX;for(Y0D=s1M.length;!this.result._shouldStop&&s6D!==Y0D;s6D++){O6D=s1M[s6D];B6D.getNormal(O6D,R1M);B6D.getVertex(U0D[+d0QX.l4CX*O6D],K1M);K1M.vsub(o1M,k1M);R6D=Y5D.dot(R1M);R6D=R1M.dot(k1M)/R6D;(d0QX.k4CX|B3QX.I4XX)>R6D||(Y5D.scale(R6D,t1M),t1M.vadd(o1M,t1M),B6D.getVertex(U0D[+d0QX.l4CX*O6D+ +d0QX.j4CX],i1M),B6D.getVertex(U0D[d0QX.l4CX*B3QX.n4XX*O6D+ +d0QX.U4CX],u1M),R6D=t1M.distanceSquared(o1M),!B1M(t1M,i1M,K1M,u1M)&&!B1M(t1M,K1M,i1M,u1M)||R6D>H0D||(p1M.vectorToWorldFrame(P6D,R1M,G5D),p1M.pointToWorldFrame(T6D,P6D,t1M,v5D),this.reportIntersection(G5D,v5D,B6D,d0D,O6D)));}s1M.length=+d0QX.k4CX;};a1M.prototype[q1M.types.TRIMESH]=a1M.prototype.intersectTrimesh;a1M.prototype.reportIntersection=function(J0D,G0D,w0D,V0D,Q0D){var g0QX=G3CX;var m0D,v0D,r0D,S0D;m0D=this.from;v0D=this.to;r0D=m0D.distanceTo(G0D);S0D=this.result;if(!(this.skipBackfaces&&+g0QX.k4CXj9D?I9D>M9D?o0QX.I4XX:u0QX.U4CX-o0QX.I4XX:j9D>M9D?+u0QX.j4CX:+u0QX.U4CX;};l0D.prototype.aabbQuery=function(z9D,t9D,L9D){var C9D;L9D=L9D||[];this.dirty&&(this.sortList(),this.dirty=!+G3CX.j4CX);z9D=this.axisList;for(var a9D=+G3CX.k4CX;a9Dm1D;m1D++)for(var r1D=a4QX.I4XX;s4QX.l4CX-a4QX.I4XX>r1D;r1D++){for(var v1D=s4QX.k4CX-a4QX.I4XX,J1D=+s4QX.k4CX;s4QX.l4CX*a4QX.n4XX>J1D;J1D++){v1D+=w1D.elements[m1D+ +s4QX.l4CX*J1D]*this.elements[J1D+ +s4QX.l4CX*r1D];}a4QX.F4XX(s4QX.w3CX);G1D.elements[a4QX.r4XX(s4QX.l4CX,r1D,m1D,a4QX.I4XX)]=v1D;}return G1D;};f2D.prototype.scale=function(W1D,h1D){var b4QX=H5ZZ;var G4QX=G3CX;h1D=h1D||new f2D();for(var D1D=this.elements,X1D=h1D.elements,Q1D=+G4QX.k4CX;b4QX.P4XX!==Q1D;Q1D++){X1D[b4QX.P4XX*Q1D+G4QX.k4CX*b4QX.n4XX]=W1D.x*D1D[b4QX.P4XX*Q1D+G4QX.k4CX*b4QX.n4XX],X1D[b4QX.P4XX*Q1D+ +G4QX.j4CX]=W1D.y*D1D[+G4QX.l4CX*Q1D+ +G4QX.j4CX],X1D[(G4QX.l4CX-b4QX.I4XX)*Q1D+ +G4QX.U4CX]=W1D.z*D1D[(G4QX.l4CX-b4QX.I4XX)*Q1D+G4QX.U4CX*b4QX.n4XX];}return h1D;};f2D.prototype.solve=function(E1D,x1D){var C4QX=H5ZZ;var U4QX=G3CX;var j5SX="], A=[";var X5SX="], b=[";var l5SX="Could not solve equation! Got x=[";var l1D,A1D,N1D,c1D,b1D;x1D=x1D||new g2D();for(var j1D=[],M1D=+U4QX.k4CX;+x3uX.I3uX>M1D;M1D++){j1D.push(+U4QX.k4CX);}for(var I1D,M1D=+U4QX.k4CX;U4QX.l4CX-C4QX.I4XX>M1D;M1D++)for(I1D=U4QX.k4CX-C4QX.I4XX;C4QX.P4XX>I1D;I1D++){C4QX.i4XX(z2CX);j1D[C4QX.z4XX(I1D,M1D,U4QX.t4CX,C4QX.n4XX)]=this.elements[C4QX.r4XX(M1D,U4QX.l4CX,I1D,C4QX.i4XX(U4QX.a2CX))];}j1D[+U4QX.l4CX]=E1D.x;C4QX.F4XX(C4QX.w4XX);j1D[C4QX.z4XX(C4QX.I4XX,U4QX.n4CX)]=E1D.y;C4QX.i4XX(C4QX.I4XX);j1D[C4QX.z4XX(C4QX.n4XX,x3uX.c3uX)]=E1D.z;C4QX.F4XX(C4QX.w4XX);l1D=C4QX.z4XX(C4QX.I4XX,U4QX.l4CX);A1D=l1D;do{C4QX.i4XX(C4QX.w4XX);M1D=C4QX.z4XX(l1D,A1D);if((U4QX.k4CX|C4QX.I4XX)===j1D[M1D+(U4QX.t4CX-C4QX.I4XX)*M1D])for(I1D=M1D+(U4QX.j4CX|C4QX.I4XX);I1Dt1D;t1D++){K1D+=this.elements[t1D]+G3CX.N8uX;}return K1D;};f2D.prototype.reverse=function(e1D){var e4QX=H5ZZ;var L4QX=G3CX;var k5SX="Could not reverse! A=[";var i2CX=309;var r2CX=308;var Z1D,q1D,f1D,k1D,g1D;e1D=e1D||new f2D();for(var i1D=[],p1D=L4QX.k4CX*e4QX.n4XX;+x3uX.U2rX>p1D;p1D++){i1D.push(+L4QX.k4CX);}for(var u1D,p1D=L4QX.k4CX-e4QX.I4XX;L4QX.l4CX-e4QX.I4XX>p1D;p1D++)for(u1D=+L4QX.k4CX;e4QX.P4XX>u1D;u1D++){e4QX.F4XX(z2CX);i1D[e4QX.r4XX(u1D,p1D,L4QX.O8uX,e4QX.n4XX)]=this.elements[e4QX.r4XX(p1D,u1D,e4QX.P4XX,e4QX.i4XX(e4QX.f8CX))];}e4QX.F4XX(e4QX.I4XX);i1D[e4QX.r4XX(e4QX.n4XX,L4QX.l4CX)]=+L4QX.j4CX;i1D[+L4QX.Q4CX]=+L4QX.k4CX;e4QX.i4XX(e4QX.n4XX);i1D[e4QX.r4XX(e4QX.I4XX,L4QX.e3uX)]=+L4QX.k4CX;i1D[+L4QX.t4CX]=+L4QX.k4CX;i1D[+L4QX.u3uX]=+L4QX.j4CX;e4QX.i4XX(e4QX.w4XX);i1D[e4QX.r4XX(e4QX.I4XX,L4QX.S3uX)]=e4QX.I4XX;i1D[+L4QX.V8uX]=e4QX.I4XX;i1D[+x3uX.c3uX]=+L4QX.k4CX;e4QX.i4XX(e4QX.w4XX);i1D[e4QX.r4XX(e4QX.I4XX,x3uX.C2rX)]=e4QX.z4XX(e4QX.I4XX,L4QX.j4CX,e4QX.F4XX(e4QX.n4XX));Z1D=e4QX.P4XX;q1D=Z1D;do{e4QX.F4XX(e4QX.w4XX);p1D=e4QX.z4XX(Z1D,q1D);if(e4QX.I4XX===i1D[p1D+(L4QX.O8uX-e4QX.I4XX)*p1D])for(u1D=p1D+L4QX.j4CX*e4QX.n4XX;u1Dn5i?(b5i.x=this.x,b5i.y=this.y,b5i.z=this.z):(b5i.x=this.x/n5i,b5i.y=this.y/n5i,b5i.z=this.z/n5i);return[b5i,C5i];};V5i=new J5i();Q5i=new J5i();r5i.prototype.setFromVectors=function(L5i,a5i){var t8JX=H5ZZ;var z5i;if(L5i.isAntiparallelTo(a5i)){L5i.tangents(V5i,Q5i),this.setFromAxisAngle(V5i,Math.PI);}else{z5i=L5i.cross(a5i);this.x=z5i.x;this.y=z5i.y;this.z=z5i.z;t8JX.i4XX(t8JX.Q8CX);var U0RR=t8JX.z4XX(t8JX.d8CX,t8JX.q8CX,t8JX.j8CX);this.w=Math.sqrt(Math.pow(L5i.norm(),G3CX.U4CX*U0RR)*Math.pow(a5i.norm(),G3CX.U4CX-t8JX.I4XX))+L5i.dot(a5i);this.normalize();}};G5i=new J5i();v5i=new J5i();w5i=new J5i();r5i.prototype.mult=function(t5i,K5i){var p5i;K5i=K5i||new r5i();p5i=this.w;G5i.set(this.x,this.y,this.z);v5i.set(t5i.x,t5i.y,t5i.z);K5i.w=p5i*t5i.w-G5i.dot(v5i);G5i.cross(v5i,w5i);K5i.x=p5i*v5i.x+t5i.w*G5i.x+w5i.x;K5i.y=p5i*v5i.y+t5i.w*G5i.y+w5i.y;K5i.z=p5i*v5i.z+t5i.w*G5i.z+w5i.z;return K5i;};r5i.prototype.inverse=function(i5i){var n2CX=312;var u5i,k5i,f5i,g5i;u5i=this.x;k5i=this.y;f5i=this.z;g5i=this.w;i5i=i5i||new r5i();this.conjugate(i5i);H5ZZ.F4XX(n2CX);u5i=H5ZZ.z4XX(k5i,k5i,g5i,g5i,G3CX.j4CX,f5i,f5i,u5i,u5i);i5i.x*=u5i;i5i.y*=u5i;i5i.z*=u5i;i5i.w*=u5i;return i5i;};r5i.prototype.conjugate=function(e5i){e5i=e5i||new r5i();e5i.x=-this.x;e5i.y=-this.y;e5i.z=-this.z;e5i.w=this.w;return e5i;};r5i.prototype.normalize=function(){var Z5i;Z5i=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);G3CX.k4CX-H5ZZ.I4XX===Z5i?this.w=this.z=this.y=this.x=H5ZZ.I4XX:(Z5i=(G3CX.j4CX|H5ZZ.I4XX)/Z5i,this.x*=Z5i,this.y*=Z5i,this.z*=Z5i,this.w*=Z5i);};r5i.prototype.normalizeFast=function(){var p8JX=H5ZZ;var q5i;p8JX.i4XX(p8JX.c8CX);var q0RR=p8JX.r4XX(p8JX.w4XX,p8JX.O8CX,p8JX.y8CX);q5i=(G3CX.l4CX*q0RR-(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w))/+G3CX.U4CX;(G3CX.k4CX|p8JX.I4XX)===q5i?this.w=this.z=this.y=this.x=G3CX.k4CX*p8JX.n4XX:(this.x*=q5i,this.y*=q5i,this.z*=q5i,this.w*=q5i);};r5i.prototype.vmult=function(Y6i,P5i){var A8JX=H5ZZ;var P2CX=314;var w2CX=313;var F5i,O5i,s5i,o5i,y5i,R5i,B5i,U6i,T5i,H6i;P5i=P5i||new J5i();F5i=Y6i.x;O5i=Y6i.y;s5i=Y6i.z;o5i=this.x;y5i=this.y;R5i=this.z;B5i=this.w;A8JX.F4XX(w2CX);U6i=A8JX.r4XX(F5i,B5i,y5i,R5i,O5i,s5i);A8JX.i4XX(w2CX);T5i=A8JX.r4XX(O5i,B5i,R5i,o5i,s5i,F5i);A8JX.i4XX(w2CX);H6i=A8JX.r4XX(s5i,B5i,o5i,y5i,F5i,O5i);A8JX.i4XX(G3CX.c2CX);F5i=A8JX.z4XX(o5i,F5i,O5i,R5i,y5i,s5i);A8JX.i4XX(P2CX);P5i.x=A8JX.r4XX(y5i,F5i,U6i,H6i,B5i,o5i,T5i,R5i);A8JX.i4XX(P2CX);P5i.y=A8JX.r4XX(R5i,F5i,T5i,U6i,B5i,y5i,H6i,o5i);A8JX.i4XX(P2CX);P5i.z=A8JX.r4XX(o5i,F5i,H6i,T5i,B5i,R5i,U6i,y5i);return P5i;};r5i.prototype.copy=function(d6i){this.x=d6i.x;this.y=d6i.y;this.z=d6i.z;this.w=d6i.w;return this;};r5i.prototype.toEuler=function(D6i,w6i){var c8JX=G3CX;var x8JX=H5ZZ;var D5SX=" not supported yet.";var Z5SX="Euler order ";var m5SX="0.499";var W9CX=318;var R9CX=317;var K9CX=316;var v6i,V6i,m6i,S6i,r6i,J6i,G6i,Q6i,h6i;w6i=w6i||x3uX.i3uX;S6i=this.x;r6i=this.y;J6i=this.z;G6i=this.w;switch(w6i){case x3uX.i3uX:x8JX.F4XX(x8JX.b8CX);Q6i=x8JX.z4XX(J6i,G6i,r6i,S6i);m5SX-x8JX.I4XXQ6i&&(v6i=-(c8JX.U4CX-x8JX.I4XX)*Math.atan2(S6i,G6i),V6i=-Math.PI/+c8JX.U4CX,m6i=+c8JX.k4CX);if(isNaN(v6i)){x8JX.F4XX(x8JX.I4XX);m6i=x8JX.z4XX(S6i,S6i);x8JX.F4XX(x8JX.I4XX);h6i=x8JX.z4XX(J6i,J6i);x8JX.F4XX(c8JX.J2CX);v6i=Math.atan2(x8JX.r4XX(J6i,r6i,S6i,c8JX.U4CX,G6i,c8JX.U4CX),x8JX.r4XX(x8JX.I4XX,x8JX.w4XX,c8JX.U4CX,r6i,c8JX.j4CX,r6i,h6i,x8JX.F4XX(K9CX)));x8JX.F4XX(x8JX.R3CX);V6i=Math.asin(x8JX.r4XX(Q6i,x8JX.I4XX,c8JX.U4CX));x8JX.i4XX(R9CX);m6i=Math.atan2(x8JX.r4XX(c8JX.U4CX,c8JX.U4CX,S6i,G6i,x8JX.n4XX,J6i,r6i),x8JX.z4XX(c8JX.j4CX,m6i,h6i,x8JX.w4XX,c8JX.U4CX,x8JX.F4XX(W9CX)));}break;default:x8JX.F4XX(x8JX.d8CX);throw Error(x8JX.z4XX(Z5SX,w6i,D5SX));}D6i.y=v6i;D6i.z=V6i;D6i.x=m6i;};r5i.prototype.setFromEuler=function(X6i,W6i,j6i,c6i){var M8JX=G3CX;var T8JX=H5ZZ;var G5SX="XZY";var a5SX="ZYX";var s5SX="ZXY";var q5SX="YXZ";var E5SX="XYZ";var M6i,I6i,x6i;c6i=c6i||E5SX;T8JX.i4XX(M8JX.Z2CX);M6i=Math.cos(T8JX.r4XX(X6i,T8JX.I4XX,M8JX.U4CX));T8JX.i4XX(T8JX.l8CX);I6i=Math.cos(T8JX.r4XX(W6i,M8JX.U4CX,T8JX.I4XX));T8JX.i4XX(M8JX.Z2CX);x6i=Math.cos(T8JX.z4XX(j6i,T8JX.I4XX,M8JX.U4CX));T8JX.i4XX(T8JX.j8CX);X6i=Math.sin(T8JX.r4XX(X6i,M8JX.U4CX));T8JX.i4XX(M8JX.Z2CX);W6i=Math.sin(T8JX.r4XX(W6i,T8JX.I4XX,M8JX.U4CX));T8JX.i4XX(T8JX.j8CX);j6i=Math.sin(T8JX.r4XX(j6i,M8JX.U4CX));E5SX===c6i?(this.x=X6i*I6i*x6i+M6i*W6i*j6i,this.y=M6i*W6i*x6i-X6i*I6i*j6i,this.z=M6i*I6i*j6i+X6i*W6i*x6i,this.w=M6i*I6i*x6i-X6i*W6i*j6i):q5SX===c6i?(this.x=X6i*I6i*x6i+M6i*W6i*j6i,this.y=M6i*W6i*x6i-X6i*I6i*j6i,this.z=M6i*I6i*j6i-X6i*W6i*x6i,this.w=M6i*I6i*x6i+X6i*W6i*j6i):s5SX===c6i?(this.x=X6i*I6i*x6i-M6i*W6i*j6i,this.y=M6i*W6i*x6i+X6i*I6i*j6i,this.z=M6i*I6i*j6i+X6i*W6i*x6i,this.w=M6i*I6i*x6i-X6i*W6i*j6i):a5SX===c6i?(this.x=X6i*I6i*x6i-M6i*W6i*j6i,this.y=M6i*W6i*x6i+X6i*I6i*j6i,this.z=M6i*I6i*j6i-X6i*W6i*x6i,this.w=M6i*I6i*x6i+X6i*W6i*j6i):x3uX.i3uX===c6i?(this.x=X6i*I6i*x6i+M6i*W6i*j6i,this.y=M6i*W6i*x6i+X6i*I6i*j6i,this.z=M6i*I6i*j6i-X6i*W6i*x6i,this.w=M6i*I6i*x6i-X6i*W6i*j6i):G5SX===c6i&&(this.x=X6i*I6i*x6i-M6i*W6i*j6i,this.y=M6i*W6i*x6i-X6i*I6i*j6i,this.z=M6i*I6i*j6i+X6i*W6i*x6i,this.w=M6i*I6i*x6i+X6i*W6i*j6i);return this;};r5i.prototype.clone=function(){return new r5i(this.x,this.y,this.z,this.w);};},{"./Vec3":B1RX.V8LX*j1RX.n4XX}],29:[function(b6i,n6i){var b5SX="./Quaternion";var E6i,l6i,A6i;function N6i(C6i){C6i=C6i||{};this.position=new E6i();C6i.position&&this.position.copy(C6i.position);this.quaternion=new l6i();C6i.quaternion&&this.quaternion.copy(C6i.quaternion);}E6i=b6i(t5SX);l6i=b6i(b5SX);n6i.exports=N6i;A6i=new l6i();N6i.pointToLocalFrame=function(a6i,z6i,t6i,L6i){L6i=L6i||new E6i();t6i.vsub(a6i,L6i);z6i.conjugate(A6i);A6i.vmult(L6i,L6i);return L6i;};N6i.prototype.pointToLocal=function(K6i,p6i){return N6i.pointToLocalFrame(this.position,this.quaternion,K6i,p6i);};N6i.pointToWorldFrame=function(u6i,k6i,f6i,i6i){i6i=i6i||new E6i();k6i.vmult(f6i,i6i);i6i.vadd(u6i,i6i);return i6i;};N6i.prototype.pointToWorld=function(g6i,e6i){return N6i.pointToWorldFrame(this.position,this.quaternion,g6i,e6i);};N6i.prototype.vectorToWorldFrame=function(q6i,Z6i){Z6i=Z6i||new E6i();this.quaternion.vmult(q6i,Z6i);return Z6i;};N6i.vectorToWorldFrame=function(o6i,y6i,F6i){o6i.vmult(y6i,F6i);return F6i;};N6i.vectorToLocalFrame=function(O6i,B6i,P6i,R6i){R6i=R6i||new E6i();B6i.w*=-H5ZZ.n4XX;B6i.vmult(P6i,R6i);B6i.w*=-+G3CX.j4CX;return R6i;};},{"./Quaternion":m1RX.o23X*j1RX.n4XX,"./Vec3":B1RX.V8LX|j1RX.I4XX}],30:[function(d0i,S0i){var S58X=G3CX;var O58X=H5ZZ;var U5SX="./Mat3";var d9CX=319;var Y0i,T6i,H0i,U0i;S0i.exports=s6i;Y0i=d0i(U5SX);O58X.F4XX(O58X.I4XX);s6i.ZERO=new s6i(O58X.z4XX(O58X.n4XX,S58X.k4CX),O58X.I4XX,+S58X.k4CX);O58X.i4XX(O58X.w4XX);s6i.UNIT_X=new s6i(O58X.r4XX(O58X.I4XX,S58X.j4CX),+S58X.k4CX,O58X.z4XX(O58X.n4XX,S58X.k4CX,O58X.F4XX(O58X.I4XX)));s6i.UNIT_Y=new s6i(+S58X.k4CX,+S58X.j4CX,O58X.I4XX);s6i.UNIT_Z=new s6i(+S58X.k4CX,O58X.I4XX,O58X.n4XX);s6i.prototype.cross=function(v0i,G0i){var z8JX=H5ZZ;var w0i,V0i,Q0i,h0i,D0i,X0i;w0i=v0i.x;V0i=v0i.y;Q0i=v0i.z;h0i=this.x;D0i=this.y;X0i=this.z;G0i=G0i||new s6i();z8JX.i4XX(z8JX.J8CX);G0i.x=z8JX.z4XX(X0i,D0i,Q0i,V0i);z8JX.i4XX(z8JX.J8CX);G0i.y=z8JX.r4XX(h0i,X0i,w0i,Q0i);z8JX.i4XX(z8JX.J8CX);G0i.z=z8JX.r4XX(D0i,h0i,V0i,w0i);return G0i;};s6i.prototype.set=function(W0i,j0i,M0i){this.x=W0i;this.y=j0i;this.z=M0i;return this;};s6i.prototype.setZero=function(){H5ZZ.F4XX(H5ZZ.I4XX);this.x=this.y=this.z=H5ZZ.z4XX(H5ZZ.n4XX,S58X.k4CX);};function s6i(m0i,r0i,J0i){this.x=m0i||+S58X.k4CX;this.y=r0i||+S58X.k4CX;this.z=J0i||H5ZZ.I4XX;}s6i.prototype.vadd=function(I0i,x0i){if(x0i){x0i.x=I0i.x+this.x,x0i.y=I0i.y+this.y,x0i.z=I0i.z+this.z;}else{return new s6i(this.x+I0i.x,this.y+I0i.y,this.z+I0i.z);}};s6i.prototype.vsub=function(c0i,N0i){if(N0i){N0i.x=this.x-c0i.x,N0i.y=this.y-c0i.y,N0i.z=this.z-c0i.z;}else{return new s6i(this.x-c0i.x,this.y-c0i.y,this.z-c0i.z);}};s6i.prototype.crossmat=function(){H5ZZ.i4XX(H5ZZ.I4XX);return new Y0i([+S58X.k4CX,-this.z,this.y,this.z,+S58X.k4CX,-this.x,-this.y,this.x,H5ZZ.z4XX(H5ZZ.n4XX,S58X.k4CX)]);};s6i.prototype.normalize=function(){var E0i,l0i,A0i;E0i=this.x;l0i=this.y;A0i=this.z;H5ZZ.i4XX(H5ZZ.I8CX);E0i=Math.sqrt(H5ZZ.z4XX(l0i,A0i,E0i,E0i,A0i,l0i));+S58X.k4CXMath.abs(T6i.x)?H0i.set(+S58X.j4CX,f3JX.I4XX,+S58X.k4CX):H0i.set(S58X.k4CX*f3JX.n4XX,S58X.j4CX|f3JX.I4XX,f3JX.I4XX),T6i.cross(H0i,U9i),T6i.cross(U9i,Y9i)):(U9i.set(f3JX.n4XX,f3JX.I4XX,S58X.k4CX|f3JX.I4XX),Y9i.set(+S58X.k4CX,+S58X.j4CX,+S58X.k4CX));};s6i.prototype.toString=function(){var O3JX=H5ZZ;var A5SX=0x25aa;var H5SX="160.00";var v5SX="6890";var C5SX="3560";O3JX.F4XX(O3JX.w4XX);var d0RR=O3JX.z4XX(O3JX.Q8CX,O3JX.Y8CX);return this.x+(+C5SX<=v5SX*d0RR?S58X.N8uX:(H5SX*O3JX.n4XX,A5SX))+this.y+S58X.N8uX+this.z;};s6i.prototype.toArray=function(){return[this.x,this.y,this.z];};s6i.prototype.copy=function(d9i){this.x=d9i.x;this.y=d9i.y;this.z=d9i.z;return this;};s6i.prototype.lerp=function(S9i,m9i,r9i){var J9i,G9i,v9i;J9i=this.x;G9i=this.y;v9i=this.z;r9i.x=J9i+(S9i.x-J9i)*m9i;r9i.y=G9i+(S9i.y-G9i)*m9i;r9i.z=v9i+(S9i.z-v9i)*m9i;};s6i.prototype.almostEquals=function(V9i,w9i){void+S58X.k4CX===w9i&&(w9i=+o5SX);return Math.abs(this.x-V9i.x)>w9i||Math.abs(this.y-V9i.y)>w9i||Math.abs(this.z-V9i.z)>w9i?!(S58X.j4CX*H5ZZ.n4XX):!+S58X.k4CX;};s6i.prototype.almostZero=function(Q9i){var u5SX=1E-6;void H5ZZ.I4XX===Q9i&&(Q9i=u5SX);return Math.abs(this.x)>Q9i||Math.abs(this.y)>Q9i||Math.abs(this.z)>Q9i?!+S58X.j4CX:!(S58X.k4CX*H5ZZ.n4XX);};U0i=new s6i();s6i.prototype.isAntiparallelTo=function(h9i,D9i){this.negate(U0i);return U0i.almostEquals(h9i,D9i);};s6i.prototype.clone=function(){return new s6i(this.x,this.y,this.z);};},{"./Mat3":+Z1RX.Z0SX}],31:[function(j9i,f9i){var b08X=G3CX;var G08X=H5ZZ;var T5SX="sleep";var c5SX="sleepy";var n9i,W9i,M9i,I9i,C9i,k9i,c9i,A9i,N9i,x9i,L9i,a9i,z9i,t9i,K9i,p9i,E9i,l9i,i9i,u9i,b9i;f9i.exports=X9i;n9i=j9i(L5SX);j9i(H0SX);W9i=j9i(U0SX);M9i=j9i(f5SX);I9i=j9i(v0SX);j9i(e5SX);C9i=j9i(V0SX);k9i=j9i(N0SX);X9i.prototype=new n9i();X9i.prototype.constructor=X9i;G08X.F4XX(G08X.I4XX);X9i.DYNAMIC=G08X.r4XX(G08X.n4XX,b08X.j4CX);X9i.STATIC=+b08X.U4CX;G08X.F4XX(G08X.w4XX);X9i.KINEMATIC=G08X.r4XX(G08X.I4XX,b08X.t4CX);X9i.AWAKE=+b08X.k4CX;X9i.SLEEPY=+b08X.j4CX;X9i.SLEEPING=G08X.w4XX;X9i.idCounter=+b08X.k4CX;X9i.prototype.wakeUp=function(){var x5SX="wakeup";var Z9i;Z9i=this.sleepState;H5ZZ.F4XX(H5ZZ.n4XX);this.sleepState=H5ZZ.z4XX(H5ZZ.I4XX,b08X.k4CX);Z9i===X9i.SLEEPING&&this.dispatchEvent({type:x5SX});};X9i.prototype.sleep=function(){var t3JX=H5ZZ;this.sleepState=X9i.SLEEPING;t3JX.i4XX(t3JX.w4XX);this.velocity.set(t3JX.z4XX(t3JX.I4XX,b08X.k4CX),t3JX.I4XX,t3JX.I4XX);t3JX.i4XX(t3JX.I4XX);this.angularVelocity.set(+b08X.k4CX,t3JX.r4XX(t3JX.n4XX,b08X.k4CX),+b08X.k4CX);};X9i.sleepyEvent={type:c5SX};X9i.sleepEvent={type:T5SX};X9i.prototype.sleepTick=function(y9i){var q9i,F9i,o9i;if(this.allowSleep){q9i=this.sleepState;F9i=this.velocity.norm2()+this.angularVelocity.norm2();o9i=Math.pow(this.sleepSpeedLimit,H5ZZ.w4XX);q9i===X9i.AWAKE&&F9io9i?this.wakeUp():q9i===X9i.SLEEPY&&y9i-this.timeLastSleepy>this.sleepTimeLimit&&(this.sleep(),this.dispatchEvent(X9i.sleepEvent));}};X9i.prototype.updateSolveMassProperties=function(){this.sleepState===X9i.SLEEPING||this.type===X9i.KINEMATIC?(this.invMassSolve=H5ZZ.I4XX,this.invInertiaSolve.setZero(),this.invInertiaWorldSolve.setZero()):(this.invMassSolve=this.invMass,this.invInertiaSolve.copy(this.invInertia),this.invInertiaWorldSolve.copy(this.invInertiaWorld));};X9i.prototype.pointToLocalFrame=function(B9i,R9i){R9i=R9i||new W9i();B9i.vsub(this.position,R9i);this.quaternion.conjugate().vmult(R9i,R9i);return R9i;};X9i.prototype.vectorToLocalFrame=function(O9i,P9i){P9i=P9i||new W9i();this.quaternion.conjugate().vmult(O9i,P9i);return P9i;};X9i.prototype.pointToWorldFrame=function(T9i,s9i){s9i=s9i||new W9i();this.quaternion.vmult(T9i,s9i);s9i.vadd(this.position,s9i);return s9i;};X9i.prototype.vectorToWorldFrame=function(U3i,H3i){H3i=H3i||new W9i();this.quaternion.vmult(U3i,H3i);return H3i;};c9i=new W9i();A9i=new I9i();X9i.prototype.addShape=function(r3i,S3i,m3i){var Y3i,d3i;Y3i=new W9i();d3i=new I9i();S3i&&Y3i.copy(S3i);m3i&&d3i.copy(m3i);this.shapes.push(r3i);this.shapeOffsets.push(Y3i);this.shapeOrientations.push(d3i);this.updateMassProperties();this.updateBoundingRadius();this.aabbNeedsUpdate=!H5ZZ.I4XX;return this;};X9i.prototype.updateBoundingRadius=function(){var J3i,V3i;for(var w3i=this.shapes,Q3i=this.shapeOffsets,h3i=w3i.length,v3i=+b08X.k4CX,G3i=b08X.k4CX-H5ZZ.I4XX;G3i!==h3i;G3i++){J3i=w3i[G3i];J3i.updateBoundingSphereRadius();V3i=Q3i[G3i].norm();J3i=J3i.boundingSphereRadius;V3i+J3i>v3i&&(v3i=V3i+J3i);}this.boundingRadius=v3i;};N9i=new C9i();function X9i(g9i){var j82X=H5ZZ;var X82X=x3uX;var e9i;g9i=g9i||{};n9i.apply(this);this.id=X9i.idCounter++;this.postStep=this.preStep=this.world=b08X.X4CX;this.vlambda=new W9i();this.collisionFilterGroup=X82X.Z1rX===typeof g9i.collisionFilterGroup?g9i.collisionFilterGroup:+b08X.j4CX;this.collisionFilterMask=X82X.Z1rX===typeof g9i.collisionFilterMask?g9i.collisionFilterMask:b08X.j4CX-j82X.I4XX;this.collisionResponse=!+b08X.k4CX;this.position=new W9i();g9i.position&&this.position.copy(g9i.position);this.previousPosition=new W9i();this.initPosition=new W9i();this.velocity=new W9i();g9i.velocity&&this.velocity.copy(g9i.velocity);this.initVelocity=new W9i();this.force=new W9i();e9i=X82X.Z1rX===typeof g9i.mass?g9i.mass:b08X.k4CX|j82X.I4XX;this.mass=e9i;this.invMass=+b08X.k4CX=e9i?X9i.STATIC:X9i.DYNAMIC;typeof g9i.type===typeof X9i.STATIC&&(this.type=g9i.type);this.allowSleep=X82X.o6uX!==typeof g9i.allowSleep?g9i.allowSleep:!(b08X.k4CX*j82X.n4XX);j82X.i4XX(j82X.I4XX);this.sleepState=j82X.r4XX(j82X.n4XX,b08X.k4CX);this.sleepSpeedLimit=X82X.o6uX!==typeof g9i.sleepSpeedLimit?g9i.sleepSpeedLimit:+Z1RX.c8SX;this.sleepTimeLimit=X82X.o6uX!==typeof g9i.sleepTimeLimit?g9i.sleepTimeLimit:j82X.n4XX;this.timeLastSleepy=j82X.I4XX;this._wakeUpAfterNarrowphase=!+b08X.j4CX;this.torque=new W9i();this.quaternion=new I9i();g9i.quaternion&&this.quaternion.copy(g9i.quaternion);this.initQuaternion=new I9i();this.angularVelocity=new W9i();g9i.angularVelocity&&this.angularVelocity.copy(g9i.angularVelocity);this.initAngularVelocity=new W9i();this.interpolatedPosition=new W9i();this.interpolatedQuaternion=new I9i();this.shapes=[];this.shapeOffsets=[];this.shapeOrientations=[];this.inertia=new W9i();this.invInertia=new W9i();this.invInertiaWorld=new M9i();this.invMassSolve=+b08X.k4CX;this.invInertiaSolve=new W9i();this.invInertiaWorldSolve=new M9i();this.fixedRotation=X82X.o6uX!==typeof g9i.fixedRotation?g9i.fixedRotation:!j82X.n4XX;this.angularDamping=X82X.o6uX!==typeof g9i.angularDamping?g9i.angularDamping:Z1RX.N5SX*j82X.n4XX;this.aabb=new C9i();j82X.F4XX(j82X.w4XX);this.aabbNeedsUpdate=!j82X.r4XX(j82X.I4XX,b08X.k4CX);this.wlambda=new W9i();g9i.shape&&this.addShape(g9i.shape);this.updateMassProperties();}X9i.prototype.computeAABB=function(){var c3i;for(var X3i=this.shapes,j3i=this.shapeOffsets,M3i=this.shapeOrientations,I3i=X3i.length,x3i=this.quaternion,W3i=this.aabb,D3i=H5ZZ.I4XX;D3i!==I3i;D3i++){c3i=X3i[D3i];M3i[D3i].mult(x3i,A9i);A9i.vmult(j3i[D3i],c9i);c9i.vadd(this.position,c9i);c3i.calculateWorldAABB(c9i,A9i,N9i.lowerBound,N9i.upperBound);H5ZZ.I4XX===D3i?W3i.copy(N9i):W3i.extend(N9i);}this.aabbNeedsUpdate=!H5ZZ.n4XX;};x9i=new M9i();L9i=new M9i();new M9i();X9i.prototype.updateInertiaWorld=function(E3i){var N3i;N3i=this.invInertia;N3i.x===N3i.y&&N3i.y===N3i.z&&!E3i||(x9i.setRotationFromQuaternion(this.quaternion),x9i.transpose(L9i),x9i.scale(N3i,x9i),x9i.mmult(L9i,this.invInertiaWorld));};a9i=new W9i();z9i=new W9i();X9i.prototype.applyForce=function(l3i,A3i){this.type===X9i.DYNAMIC&&(A3i.vsub(this.position,a9i),a9i.cross(l3i,z9i),this.force.vadd(l3i,this.force),this.torque.vadd(z9i,this.torque));};t9i=new W9i();K9i=new W9i();X9i.prototype.applyLocalForce=function(b3i,n3i){this.type===X9i.DYNAMIC&&(this.vectorToWorldFrame(b3i,t9i),this.pointToWorldFrame(n3i,K9i),this.applyForce(t9i,K9i));};p9i=new W9i();E9i=new W9i();l9i=new W9i();X9i.prototype.applyImpulse=function(C3i,L3i){this.type===X9i.DYNAMIC&&(L3i.vsub(this.position,p9i),E9i.copy(C3i),E9i.mult(this.invMass,E9i),this.velocity.vadd(E9i,this.velocity),p9i.cross(C3i,l9i),this.invInertiaWorld.vmult(l9i,l9i),this.angularVelocity.vadd(l9i,this.angularVelocity));};i9i=new W9i();u9i=new W9i();X9i.prototype.applyLocalImpulse=function(a3i,z3i){this.type===X9i.DYNAMIC&&(this.vectorToWorldFrame(a3i,i9i),this.pointToWorldFrame(z3i,u9i),this.applyImpulse(i9i,u9i));};b9i=new W9i();X9i.prototype.updateMassProperties=function(){var q3JX=H5ZZ;var t3i,K3i;this.invMass=q3JX.I4XXK7i.dot(k7i.velocity)&&(this.currentVehicleSpeedKmHour*=-+G3JX.j4CX);for(K7i=+G3JX.k4CX;K7it7i.maxSuspensionForce&&(i7i=t7i.maxSuspensionForce);N98X.i4XX(N98X.I4XX);t7i.raycastResult.hitNormalWorld.scale(N98X.r4XX(e7i,i7i),u7i);t7i.raycastResult.hitPointWorld.vsub(k7i.position,p7i);k7i.applyImpulse(u7i,t7i.raycastResult.hitPointWorld);}this.updateFriction(e7i);u7i=new k3i();p7i=new k3i();i7i=new k3i();for(K7i=G3JX.k4CX-N98X.I4XX;K7iMath.abs(t7i.engineForce)&&(t7i.deltaRotation=N98X.I4XX);t7i.rotation+=t7i.deltaRotation;N98X.i4XX(N98X.w4XX);t7i.deltaRotation*=N98X.z4XX(N98X.I4XX,i5SX);}};f3i.prototype.updateSuspension=function(){var b3JX=G3CX;var F7i,R7i,B7i;for(var P7i=this.chassisBody.mass,y7i=this.wheelInfos,O7i=y7i.length,o7i=+b3JX.k4CX;o7iB7i?F7i.dampingCompression:F7i.dampingRelaxation)*B7i;N98X.F4XX(N98X.I4XX);F7i.suspensionForce=N98X.z4XX(P7i,R7i);+b3JX.k4CX>F7i.suspensionForce&&(F7i.suspensionForce=b3JX.k4CX*N98X.n4XX);}else{F7i.suspensionForce=+b3JX.k4CX;}}};f3i.prototype.removeFromWorld=function(s7i){s7i.remove(this.chassisBody);s7i.removeEventListener(k3dX.W23X,this.preStepCallback);this.world=G3CX.X4CX;};o3i=new k3i();y3i=new k3i();f3i.prototype.castRay=function(T7i){var C3JX=G3CX;var Y4i,d4i,U4i,H4i,S4i;this.updateWheelTransformWorld(T7i);Y4i=this.chassisBody;d4i=-+C3JX.j4CX;T7i.directionWorld.scale(T7i.suspensionRestLength+T7i.radius,o3i);U4i=T7i.chassisConnectionPointWorld;U4i.vadd(o3i,y3i);H4i=T7i.raycastResult;H4i.reset();S4i=Y4i.collisionResponse;N98X.F4XX(N98X.I4XX);Y4i.collisionResponse=!N98X.z4XX(N98X.n4XX,C3JX.j4CX);this.world.rayTest(U4i,y3i,H4i);Y4i.collisionResponse=S4i;U4i=H4i.body;N98X.F4XX(N98X.I4XX);T7i.raycastResult.groundObject=N98X.z4XX(N98X.n4XX,C3JX.k4CX);U4i?(d4i=H4i.distance,T7i.raycastResult.hitNormalWorld=H4i.hitNormalWorld,T7i.isInContact=!(C3JX.k4CX-N98X.I4XX),T7i.suspensionLength=H4i.distance-T7i.radius,H4i=T7i.suspensionRestLength-T7i.maxSuspensionTravel,U4i=T7i.suspensionRestLength+T7i.maxSuspensionTravel,T7i.suspensionLengthU4i&&(T7i.suspensionLength=U4i,T7i.raycastResult.reset()),H4i=T7i.raycastResult.hitNormalWorld.dot(T7i.directionWorld),U4i=new k3i(),Y4i.getVelocityAtWorldPoint(T7i.raycastResult.hitPointWorld,U4i),Y4i=T7i.raycastResult.hitNormalWorld.dot(U4i),-Z1RX.F5SX<=H4i?(T7i.suspensionRelativeVelocity=+C3JX.k4CX,T7i.clippedInvContactDotSuspension=C3JX.u3uX-N98X.I4XX):(H4i=-(C3JX.j4CX|N98X.I4XX)/H4i,T7i.suspensionRelativeVelocity=Y4i*H4i,T7i.clippedInvContactDotSuspension=H4i)):(T7i.suspensionLength=T7i.suspensionRestLength+N98X.I4XX*T7i.maxSuspensionTravel,T7i.suspensionRelativeVelocity=+C3JX.k4CX,T7i.directionWorld.scale(-(C3JX.j4CX|N98X.I4XX),T7i.raycastResult.hitNormalWorld),T7i.clippedInvContactDotSuspension=C3JX.j4CX-N98X.I4XX);return d4i;};f3i.prototype.updateWheelTransformWorld=function(m4i){var r4i;m4i.isInContact=!+G3CX.j4CX;r4i=this.chassisBody;r4i.pointToWorldFrame(m4i.chassisConnectionPointLocal,m4i.chassisConnectionPointWorld);r4i.vectorToWorldFrame(m4i.directionLocal,m4i.directionWorld);r4i.vectorToWorldFrame(m4i.axleLocal,m4i.axleWorld);};f3i.prototype.updateWheelTransform=function(J4i){var v4i,G4i,w4i;J4i=this.wheelInfos[J4i];this.updateWheelTransformWorld(J4i);J4i.directionLocal.scale(-+G3CX.j4CX,F3i);Z3i.copy(J4i.axleLocal);F3i.cross(Z3i,P3i);P3i.normalize();Z3i.normalize();v4i=J4i.steering;G4i=new R3i();G4i.setFromAxisAngle(F3i,v4i);v4i=new R3i();v4i.setFromAxisAngle(Z3i,J4i.rotation);w4i=J4i.worldTransform.quaternion;this.chassisBody.quaternion.mult(G4i,w4i);w4i.mult(v4i,w4i);w4i.normalize();G4i=J4i.worldTransform.position;G4i.copy(J4i.directionWorld);G4i.scale(J4i.suspensionLength,G4i);G4i.vadd(J4i.chassisConnectionPointWorld,G4i);};function f3i(Q7i){var A3JX=G3CX;this.chassisBody=Q7i.chassisBody;this.wheelInfos=[];N98X.F4XX(N98X.I4XX);this.sliding=!N98X.z4XX(N98X.n4XX,A3JX.j4CX);this.world=A3JX.X4CX;this.indexRightAxis=x3uX.o6uX!==typeof Q7i.indexRightAxis?Q7i.indexRightAxis:+A3JX.j4CX;this.indexForwardAxis=x3uX.o6uX!==typeof Q7i.indexForwardAxis?Q7i.indexForwardAxis:A3JX.k4CX-N98X.I4XX;this.indexUpAxis=x3uX.o6uX!==typeof Q7i.indexUpAxis?Q7i.indexUpAxis:A3JX.U4CX|N98X.I4XX;}N98X.F4XX(N98X.w4XX);O3i=[new k3i(N98X.z4XX(N98X.I4XX,G3CX.j4CX),N98X.I4XX,+G3CX.k4CX),new k3i(+G3CX.k4CX,+G3CX.j4CX,N98X.I4XX),new k3i(N98X.I4XX,N98X.I4XX,N98X.n4XX)];f3i.prototype.getWheelTransformWorld=function(V4i){return this.wheelInfos[V4i].worldTransform;};B3i=new k3i();q3i=[];g3i=[];f3i.prototype.updateFriction=function(I4i){var u3JX=G3CX;var Q4i,W4i,M4i,X4i,D4i,x4i,l4i,c4i,j4i,A4i,C4i,n4i;for(var N4i=this.wheelInfos,b4i=N4i.length,E4i=this.chassisBody,X4i=+u3JX.k4CX,h4i=+u3JX.k4CX;h4iX4i&&(this.sliding=!(u3JX.k4CX*N98X.n4XX),Q4i.sliding=!N98X.I4XX,X4i=W4i/Math.sqrt(D4i),Q4i.skidInfo*=X4i));}if(this.sliding)for(h4i=+u3JX.k4CX;h4iQ4i.skidInfo&&(Q4i.forwardImpulse*=Q4i.skidInfo,Q4i.sideImpulse*=Q4i.skidInfo);}for(h4i=+u3JX.k4CX;h4ithis.particles.length&&this.neighbors.pop());};L8i=new c8i();x8i.prototype.getNeighbors=function(i8i,g8i){var p8i;for(var u8i=this.particles.length,k8i=i8i.id,f8i=this.smoothingRadius*this.smoothingRadius,K8i=G3CX.k4CX-H5ZZ.I4XX;K8i!==u8i;K8i++){p8i=this.particles[K8i];p8i.position.vsub(i8i.position,L8i);k8i!==p8i.id&&L8i.norm2()x1i;x1i++){c1i=O2i[x1i];n1i.vmult(c1i,c1i);b1i.vadd(c1i,c1i);l1i=c1i.x;A1i=c1i.y;c1i=c1i.z;l1i>E1i.x&&(E1i.x=l1i);A1i>E1i.y&&(E1i.y=A1i);c1i>E1i.z&&(E1i.z=c1i);l1iN5q.dot(this.vertices[this.faces[E5q][L6JX.k4CX|H5ZZ.I4XX]])){console.error(f4SX+E5q+O4SX+N5q.toString()+S4SX);for(N5q=+L6JX.k4CX;N5qK5q&&(K5q=p5q,u5q=z5q);}for(var K5q=[],z5q=i5q.faces[u5q],p5q=z5q.length,k5q=G3CX.k4CX|H5ZZ.I4XX;k5qb6q)){l6q=this.faces[b6q];l6q.connectedFaces=[];for(x6q=l1JX.I4XX;x6q=E6q&&z6q.push({point:A6q,normal:a1i,depth:E6q}));}}};L1i.prototype.clipFaceAgainstPlane=function(u6q,f6q,q6q,Z6q){var j1JX=G3CX;var X1JX=H5ZZ;var p6q,i6q,e6q,k6q,K6q,t6q;e6q=u6q.length;if(X1JX.w4XX>e6q){return f6q;}k6q=u6q[u6q.length-+j1JX.j4CX];X1JX.F4XX(X1JX.w4XX);K6q=u6q[X1JX.z4XX(X1JX.I4XX,j1JX.k4CX)];p6q=q6q.dot(k6q)+Z6q;for(var g6q=j1JX.k4CX-X1JX.I4XX;g6qp6q){if(+j1JX.k4CX>i6q){t6q=new C1i();t6q.copy(K6q);}else{t6q=new C1i(),k6q.lerp(K6q,p6q/(p6q-i6q),t6q);}f6q.push(t6q);}else{+j1JX.k4CX>i6q&&(t6q=new C1i(),k6q.lerp(K6q,p6q/(p6q-i6q),t6q),f6q.push(t6q),f6q.push(K6q));}k6q=K6q;p6q=i6q;}return f6q;};L1i.prototype.computeWorldVertices=function(B6q,P6q){for(var y6q=this.vertices.length;this.worldVertices.lengthT6q.x&&(T6q.x=O6q.x);O6q.yT6q.y&&(T6q.y=O6q.y);O6q.zT6q.z&&(T6q.z=O6q.z);}};L1i.prototype.computeWorldFaceNormals=function(J0q){for(var S0q=this.faceNormals.length;this.worldFaceNormals.lengthG0q&&(G0q=V0q);}this.boundingSphereRadius=Math.sqrt(G0q);};u1i=new C1i();L1i.prototype.calculateWorldAABB=function(E0q,b0q,A0q,l0q){var s1JX=G3CX;var h0q;for(var N0q=this.vertices.length,c0q=this.vertices,D0q,x0q,I0q,M0q,j0q,W0q,X0q=+s1JX.k4CX;X0qM0q||void(s1JX.k4CX-H5ZZ.I4XX)===M0q){M0q=h0q.x;}if(h0q.yj0q||void+s1JX.k4CX===j0q){j0q=h0q.y;}if(h0q.zW0q||void+s1JX.k4CX===W0q){W0q=h0q.z;}}A0q.set(D0q,x0q,I0q);l0q.set(M0q,j0q,W0q);};function L1i(V5q,Q5q,w5q){var G1JX=H5ZZ;P1i.call(this);this.type=P1i.types.CONVEXPOLYHEDRON;this.vertices=V5q||[];this.worldVertices=[];this.worldVerticesNeedsUpdate=!G1JX.I4XX;this.faces=Q5q||[];this.faceNormals=[];this.computeNormals();G1JX.F4XX(G1JX.n4XX);this.worldFaceNormalsNeedsUpdate=!G1JX.r4XX(G1JX.I4XX,G3CX.k4CX);this.worldFaceNormals=[];this.uniqueEdges=[];this.uniqueAxes=w5q?w5q.slice():G3CX.X4CX;this.computeEdges();this.updateBoundingSphereRadius();}L1i.prototype.volume=function(){var U1JX=H5ZZ;var A0CX=569;U1JX.i4XX(G3CX.p1CX);var r0RR=U1JX.z4XX(U1JX.y8CX,A0CX,U1JX.P4XX,U1JX.j8CX);return G3CX.t4CX*r0RR*Math.PI*this.boundingSphereRadius/+G3CX.l4CX;};L1i.prototype.getAveragePointLocal=function(n0q){n0q=n0q||new C1i();for(var L0q=this.vertices.length,a0q=this.vertices,C0q=+G3CX.k4CX;C0qf0q&&u1JX.I4XXk0q){return!u1JX.n4XX;}}return-+G3CX.j4CX;};new C1i();g1i=new C1i();R1i=new C1i();L1i.project=function(T0q,H9q,s0q,O0q,Y9q){var e1JX=H5ZZ;var L1JX=G3CX;var U9q,B0q,P0q;U9q=T0q.vertices.length;B0q=+L1JX.k4CX;e1JX.i4XX(e1JX.n4XX);P0q=e1JX.z4XX(e1JX.I4XX,L1JX.k4CX);T0q=T0q.vertices;R1i.setZero();T1i.vectorToLocalFrame(s0q,O0q,H9q,g1i);T1i.pointToLocalFrame(s0q,O0q,R1i,R1i);H9q=R1i.dot(g1i);P0q=B0q=T0q[L1JX.k4CX-e1JX.I4XX].dot(g1i);for(s0q=+L1JX.j4CX;s0qB0q&&(B0q=O0q),O0qB0q&&(U9q=P0q,P0q=B0q,B0q=U9q);e1JX.i4XX(e1JX.I4XX);Y9q[e1JX.z4XX(e1JX.n4XX,L1JX.k4CX)]=B0q;Y9q[+L1JX.j4CX]=P0q;};},{"../math/Quaternion":m1RX.o23X-j1RX.I4XX,"../math/Transform":Z1RX.r0SX*j1RX.n4XX,"../math/Vec3":B1RX.V8LX|j1RX.I4XX,"./Shape":+Z1RX.q0SX}],39:[function(S9q,G9q){var J9q,d9q,m9q;G9q.exports=r9q;J9q=S9q(W4SX);d9q=S9q(U0SX);S9q(v0SX);m9q=S9q(d4SX);r9q.prototype=new m9q();function r9q(w9q,I9q,c9q,Q9q){var T1JX=x3uX;var c1JX=H5ZZ;var x1JX=G3CX;var h9q,x9q,V9q,W9q,M9q,X9q,D9q,j9q,N9q;h9q=[];x9q=[];V9q=[];W9q=[];M9q=[];X9q=Math.cos;D9q=Math.sin;h9q.push(new d9q(I9q*X9q(+x1JX.k4CX),I9q*D9q(c1JX.I4XX),+T1JX.V2LX*-c9q));c1JX.F4XX(c1JX.w4XX);W9q.push(c1JX.r4XX(c1JX.I4XX,x1JX.k4CX));h9q.push(new d9q(w9q*X9q(x1JX.k4CX*c1JX.n4XX),w9q*D9q(x1JX.k4CX|c1JX.I4XX),T1JX.V2LX*c1JX.n4XX*c9q));M9q.push(c1JX.n4XX);for(var v9q=x1JX.k4CX*c1JX.n4XX;v9qg9q&&(g9q=Z9q);}this.maxValue=g9q;};E9q.prototype.setHeightValueAtIndex=function(q9q,F9q,o9q){var F1JX=G3CX;var i1JX=H5ZZ;this.data[q9q][F9q]=o9q;this.clearCachedConvexTrianglePillar(q9q,F9q,!i1JX.n4XX);+F1JX.k4CXR9q&&(R9q=O9q);}I1JX.i4XX(I1JX.I4XX);y9q[I1JX.r4XX(I1JX.n4XX,G3CX.k4CX)]=this.minValue;y9q[I1JX.n4XX]=R9q;};E9q.prototype.getIndexOfPosition=function(Y3q,d3q,r3q,J3q){var P1JX=G3CX;var w1JX=H5ZZ;var m3q,S3q;m3q=this.elementSize;S3q=this.data;w1JX.F4XX(w1JX.y8CX);Y3q=Math.floor(w1JX.z4XX(m3q,Y3q));w1JX.F4XX(w1JX.y8CX);d3q=Math.floor(w1JX.z4XX(m3q,d3q));w1JX.i4XX(w1JX.n4XX);r3q[w1JX.r4XX(w1JX.I4XX,P1JX.k4CX)]=Y3q;r3q[+P1JX.j4CX]=d3q;J3q&&(P1JX.k4CX-w1JX.I4XX>Y3q&&(Y3q=w1JX.I4XX),+P1JX.k4CX>d3q&&(d3q=+P1JX.k4CX),Y3q>=S3q.length-P1JX.j4CX*w1JX.n4XX&&(Y3q=S3q.length-w1JX.n4XX),d3q>=S3q[P1JX.k4CX-w1JX.I4XX].length-w1JX.n4XX&&(d3q=S3q[+P1JX.k4CX].length-(P1JX.j4CX|w1JX.I4XX)));return P1JX.k4CX*w1JX.n4XX>Y3q||(P1JX.k4CX|w1JX.I4XX)>d3q||Y3q>=S3q.length-P1JX.j4CX*w1JX.n4XX||d3q>=S3q[P1JX.k4CX|w1JX.I4XX].length-+P1JX.j4CX?!+P1JX.j4CX:!w1JX.I4XX;};E9q.prototype.getHeightAt=function(v3q,w3q,V3q){var K2JX=H5ZZ;var J1JX=G3CX;var G3q;G3q=[];this.getIndexOfPosition(v3q,w3q,G3q,V3q);v3q=[];this.getRectMinMax(G3q[J1JX.k4CX-K2JX.I4XX],G3q[+J1JX.j4CX]+ +J1JX.j4CX,G3q[K2JX.I4XX],G3q[+J1JX.j4CX]+ +J1JX.j4CX,v3q);K2JX.F4XX(K2JX.Y8CX);var L0RR=K2JX.z4XX(K2JX.Y8CX,K2JX.Y8CX);return(v3q[+J1JX.k4CX]+v3q[+J1JX.j4CX])/(J1JX.U4CX*L0RR);};E9q.prototype.getCacheConvexTrianglePillarKey=function(Q3q,h3q,D3q){H5ZZ.F4XX(G3CX.b7CX);return H5ZZ.z4XX(D3q?+G3CX.j4CX:+G3CX.k4CX,h3q,Q3q,x3uX.k7uX,x3uX.k7uX);};E9q.prototype.getCachedConvexTrianglePillar=function(X3q,W3q,j3q){return this._cachedPillars[this.getCacheConvexTrianglePillarKey(X3q,W3q,j3q)];};E9q.prototype.setCachedConvexTrianglePillar=function(M3q,I3q,x3q,c3q,N3q){this._cachedPillars[this.getCacheConvexTrianglePillarKey(M3q,I3q,x3q)]={convex:c3q,offset:N3q};};E9q.prototype.clearCachedConvexTrianglePillar=function(E3q,l3q,A3q){delete this._cachedPillars[this.getCacheConvexTrianglePillarKey(E3q,l3q,A3q)];};E9q.prototype.getConvexTrianglePillar=function(t3q,z3q,i3q){var y2JX=G3CX;var g2JX=H5ZZ;var Y9CX=326;var K3q,p3q,L3q,n3q,b3q,C3q,a3q;K3q=this.pillarConvex;p3q=this.pillarOffset;if(this.cacheEnabled){L3q=this.getCachedConvexTrianglePillar(t3q,z3q,i3q);if(L3q){this.pillarConvex=L3q.convex;this.pillarOffset=L3q.offset;return;}K3q=new n9q();p3q=new l9q();this.pillarConvex=K3q;this.pillarOffset=p3q;}L3q=this.data;n3q=this.elementSize;b3q=K3q.faces;K3q.vertices.length=g2JX.R8CX;for(var C3q=+y2JX.k4CX;+y2JX.O8uX>C3q;C3q++){K3q.vertices[C3q]||(K3q.vertices[C3q]=new l9q());}g2JX.i4XX(g2JX.I4XX);b3q.length=g2JX.r4XX(g2JX.n4XX,y2JX.V8uX);for(C3q=+y2JX.k4CX;y2JX.V8uX-g2JX.I4XX>C3q;C3q++){b3q[C3q]||(b3q[C3q]=[]);}C3q=K3q.vertices;g2JX.i4XX(Y9CX);var V0RR=g2JX.z4XX(g2JX.K8CX,g2JX.y8CX,g2JX.a8CX,g2JX.S8CX);g2JX.i4XX(g2JX.y8CX);var f0RR=g2JX.z4XX(g2JX.S8CX,g2JX.S8CX);g2JX.F4XX(y2JX.U2CX);var P0RR=g2JX.r4XX(g2JX.Q8CX,g2JX.y8CX,y2JX.M7CX,g2JX.W8CX);g2JX.i4XX(g2JX.C8CX);var o0RR=g2JX.r4XX(g2JX.X8CX,g2JX.Q8CX,g2JX.w4XX);a3q=(Math.min(L3q[t3q][z3q],L3q[t3q+y2JX.j4CX*V0RR][z3q],L3q[t3q][z3q+y2JX.j4CX*f0RR],L3q[t3q+P0RR][z3q+ +y2JX.j4CX])-this.minValue)/o0RR+this.minValue;i3q?(p3q.set((t3q+ +Z1RX.l4SX)*n3q,(z3q+ +Z1RX.l4SX)*n3q,a3q),C3q[g2JX.I4XX].set(+Z1RX.X4SX*n3q,(Z1RX.X4SX-g2JX.I4XX)*n3q,L3q[t3q+y2JX.j4CX*g2JX.n4XX][z3q+(y2JX.j4CX|g2JX.I4XX)]-a3q),C3q[y2JX.j4CX-g2JX.I4XX].set(-(Z1RX.l4SX*g2JX.n4XX)*n3q,Z1RX.X4SX*g2JX.n4XX*n3q,L3q[t3q][z3q+g2JX.n4XX]-a3q),C3q[g2JX.w4XX].set(Z1RX.X4SX*g2JX.n4XX*n3q,-+Z1RX.l4SX*n3q,L3q[t3q+ +y2JX.j4CX][z3q]-a3q),C3q[y2JX.l4CX|g2JX.I4XX].set(Z1RX.X4SX*g2JX.n4XX*n3q,+Z1RX.X4SX*n3q,-a3q-g2JX.n4XX),C3q[g2JX.J4XX].set(-+Z1RX.l4SX*n3q,+Z1RX.X4SX*n3q,-a3q-(y2JX.j4CX|g2JX.I4XX)),C3q[+y2JX.V8uX].set(Z1RX.j4SX*n3q,-+Z1RX.l4SX*n3q,-a3q-(y2JX.j4CX-g2JX.I4XX)),b3q[g2JX.I4XX][y2JX.k4CX-g2JX.I4XX]=g2JX.I4XX,b3q[y2JX.k4CX*g2JX.n4XX][+y2JX.j4CX]=y2JX.j4CX*g2JX.n4XX,b3q[g2JX.I4XX][+y2JX.U4CX]=+y2JX.U4CX,b3q[y2JX.j4CX*g2JX.n4XX][g2JX.I4XX]=y2JX.V8uX|g2JX.I4XX,b3q[+y2JX.j4CX][y2JX.j4CX*g2JX.n4XX]=y2JX.t4CX*g2JX.n4XX,b3q[y2JX.j4CX|g2JX.I4XX][+y2JX.U4CX]=g2JX.P4XX,b3q[y2JX.U4CX-g2JX.I4XX][+y2JX.k4CX]=g2JX.w4XX,b3q[y2JX.U4CX-g2JX.I4XX][+y2JX.j4CX]=y2JX.V8uX|g2JX.I4XX,b3q[+y2JX.U4CX][+y2JX.U4CX]=y2JX.l4CX|g2JX.I4XX,b3q[g2JX.w4XX][y2JX.l4CX*g2JX.n4XX]=y2JX.k4CX-g2JX.I4XX,b3q[y2JX.l4CX|g2JX.I4XX][+y2JX.k4CX]=y2JX.l4CX|g2JX.I4XX,b3q[+y2JX.l4CX][+y2JX.j4CX]=+y2JX.t4CX,b3q[+y2JX.l4CX][g2JX.w4XX]=g2JX.n4XX,b3q[g2JX.P4XX][y2JX.l4CX-g2JX.I4XX]=g2JX.I4XX,b3q[y2JX.t4CX|g2JX.I4XX][y2JX.k4CX|g2JX.I4XX]=g2JX.n4XX,b3q[y2JX.t4CX-g2JX.I4XX][g2JX.n4XX]=y2JX.t4CX-g2JX.I4XX,b3q[g2JX.J4XX][g2JX.w4XX]=+y2JX.V8uX,b3q[y2JX.t4CX|g2JX.I4XX][+y2JX.l4CX]=+y2JX.U4CX):(p3q.set((t3q+(Z1RX.X4SX-g2JX.I4XX))*n3q,(z3q+ +Z1RX.X4SX)*n3q,a3q),C3q[+y2JX.k4CX].set(-(Z1RX.X4SX*g2JX.n4XX)*n3q,-Z1RX.j4SX*n3q,L3q[t3q][z3q]-a3q),C3q[g2JX.n4XX].set(+Z1RX.l4SX*n3q,-+Z1RX.X4SX*n3q,L3q[t3q+g2JX.n4XX][z3q]-a3q),C3q[y2JX.U4CX-g2JX.I4XX].set(-(Z1RX.X4SX-g2JX.I4XX)*n3q,+Z1RX.l4SX*n3q,L3q[t3q][z3q+ +y2JX.j4CX]-a3q),C3q[+y2JX.l4CX].set(-(Z1RX.X4SX-g2JX.I4XX)*n3q,-+Z1RX.X4SX*n3q,-a3q-(y2JX.j4CX|g2JX.I4XX)),C3q[y2JX.t4CX*g2JX.n4XX].set((Z1RX.l4SX-g2JX.I4XX)*n3q,-Z1RX.j4SX*n3q,-a3q-(y2JX.j4CX-g2JX.I4XX)),C3q[+y2JX.V8uX].set(-+Z1RX.X4SX*n3q,+Z1RX.l4SX*n3q,-a3q-+y2JX.j4CX),b3q[+y2JX.k4CX][y2JX.k4CX-g2JX.I4XX]=g2JX.I4XX,b3q[+y2JX.k4CX][+y2JX.j4CX]=y2JX.j4CX|g2JX.I4XX,b3q[+y2JX.k4CX][g2JX.w4XX]=+y2JX.U4CX,b3q[g2JX.n4XX][y2JX.k4CX*g2JX.n4XX]=+y2JX.V8uX,b3q[+y2JX.j4CX][y2JX.j4CX-g2JX.I4XX]=+y2JX.t4CX,b3q[y2JX.j4CX-g2JX.I4XX][y2JX.U4CX|g2JX.I4XX]=+y2JX.l4CX,b3q[y2JX.U4CX-g2JX.I4XX][g2JX.I4XX]=y2JX.k4CX-g2JX.I4XX,b3q[y2JX.U4CX-g2JX.I4XX][y2JX.j4CX*g2JX.n4XX]=+y2JX.U4CX,b3q[y2JX.U4CX|g2JX.I4XX][+y2JX.U4CX]=g2JX.K8CX,b3q[+y2JX.U4CX][g2JX.P4XX]=y2JX.l4CX-g2JX.I4XX,b3q[y2JX.l4CX*g2JX.n4XX][+y2JX.k4CX]=+y2JX.j4CX,b3q[y2JX.l4CX|g2JX.I4XX][y2JX.j4CX|g2JX.I4XX]=y2JX.k4CX-g2JX.I4XX,b3q[+y2JX.l4CX][y2JX.U4CX-g2JX.I4XX]=+y2JX.l4CX,b3q[g2JX.P4XX][y2JX.l4CX-g2JX.I4XX]=y2JX.t4CX|g2JX.I4XX,b3q[+y2JX.t4CX][+y2JX.k4CX]=+y2JX.t4CX,b3q[g2JX.J4XX][g2JX.n4XX]=g2JX.K8CX,b3q[+y2JX.t4CX][+y2JX.U4CX]=+y2JX.U4CX,b3q[y2JX.t4CX*g2JX.n4XX][y2JX.l4CX-g2JX.I4XX]=y2JX.j4CX|g2JX.I4XX);K3q.computeNormals();K3q.computeEdges();K3q.updateBoundingSphereRadius();this.setCachedConvexTrianglePillar(t3q,z3q,i3q,K3q,p3q);};E9q.prototype.calculateLocalInertia=function(k3q,u3q){u3q=u3q||new l9q();u3q.set(H5ZZ.I4XX,+G3CX.k4CX,+G3CX.k4CX);return u3q;};E9q.prototype.volume=function(){return Number.MAX_VALUE;};E9q.prototype.calculateWorldAABB=function(e3q,Z3q,f3q,g3q){f3q.set(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);g3q.set(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE);};E9q.prototype.updateBoundingSphereRadius=function(){var q3q,F3q;q3q=this.data;F3q=this.elementSize;this.boundingSphereRadius=new l9q(q3q.length*F3q,q3q[+G3CX.k4CX].length*F3q,Math.max(Math.abs(this.maxValue),Math.abs(this.minValue))).norm();};},{"../math/Vec3":B1RX.V8LX*j1RX.n4XX,"../utils/Utils":Z1RX.d5SX-j1RX.I4XX,"./ConvexPolyhedron":B1RX.H5LX|j1RX.I4XX,"./Shape":+Z1RX.q0SX}],41:[function(R3q,P3q){var y3q,B3q;P3q.exports=o3q;y3q=R3q(W4SX);B3q=R3q(U0SX);function o3q(){y3q.call(this);this.type=y3q.types.PARTICLE;}o3q.prototype=new y3q();o3q.prototype.constructor=o3q;o3q.prototype.calculateLocalInertia=function(s3q,O3q){var Q2JX=H5ZZ;O3q=O3q||new B3q();Q2JX.F4XX(Q2JX.n4XX);O3q.set(Q2JX.r4XX(Q2JX.I4XX,G3CX.k4CX),+G3CX.k4CX,Q2JX.z4XX(Q2JX.I4XX,G3CX.k4CX));return O3q;};o3q.prototype.volume=function(){return+G3CX.k4CX;};o3q.prototype.updateBoundingSphereRadius=function(){H5ZZ.F4XX(H5ZZ.I4XX);this.boundingSphereRadius=H5ZZ.z4XX(H5ZZ.n4XX,G3CX.k4CX);};o3q.prototype.calculateWorldAABB=function(T3q,Y7q,H7q,U7q){H7q.copy(T3q);U7q.copy(T3q);};},{"../math/Vec3":B1RX.V8LX-j1RX.I4XX,"./Shape":j1RX.T8CX}],42:[function(J7q,G7q){var m7q,r7q,d7q;G7q.exports=S7q;m7q=J7q(W4SX);r7q=J7q(U0SX);S7q.prototype=new m7q();S7q.prototype.constructor=S7q;S7q.prototype.computeWorldNormal=function(w7q){var k2JX=H5ZZ;var v7q;v7q=this.worldNormal;v7q.set(+G3CX.k4CX,k2JX.I4XX,+G3CX.j4CX);w7q.vmult(v7q,v7q);k2JX.i4XX(k2JX.w4XX);this.worldNormalNeedsUpdate=!k2JX.r4XX(k2JX.I4XX,G3CX.j4CX);};S7q.prototype.calculateLocalInertia=function(Q7q,V7q){return V7q||new r7q();};S7q.prototype.volume=function(){return Number.MAX_VALUE;};d7q=new r7q();S7q.prototype.calculateWorldAABB=function(D7q,h7q,X7q,W7q){var m2JX=G3CX;var B2JX=H5ZZ;B2JX.i4XX(B2JX.n4XX);d7q.set(B2JX.r4XX(B2JX.I4XX,m2JX.k4CX),+m2JX.k4CX,B2JX.r4XX(B2JX.n4XX,m2JX.j4CX,B2JX.F4XX(B2JX.I4XX)));h7q.vmult(d7q,d7q);h7q=Number.MAX_VALUE;X7q.set(-h7q,-h7q,-h7q);W7q.set(h7q,h7q,h7q);+m2JX.j4CX===d7q.x&&(W7q.x=D7q.x);+m2JX.j4CX===d7q.y&&(W7q.y=D7q.y);+m2JX.j4CX===d7q.z&&(W7q.z=D7q.z);-(m2JX.j4CX-B2JX.I4XX)===d7q.x&&(X7q.x=D7q.x);-B2JX.n4XX===d7q.y&&(X7q.y=D7q.y);-(m2JX.j4CX*B2JX.n4XX)===d7q.z&&(X7q.z=D7q.z);};S7q.prototype.updateBoundingSphereRadius=function(){this.boundingSphereRadius=Number.MAX_VALUE;};function S7q(){m7q.call(this);this.type=m7q.types.PLANE;this.worldNormal=new r7q();this.worldNormalNeedsUpdate=!+G3CX.k4CX;this.boundingSphereRadius=Number.MAX_VALUE;}},{"../math/Vec3":+B1RX.V8LX,"./Shape":Z1RX.q0SX*j1RX.n4XX}],43:[function(M7q,I7q){var a18X=H5ZZ;var s18X=G3CX;I7q.exports=j7q;j7q=M7q(W4SX);M7q(U0SX);M7q(v0SX);M7q(e5SX);j7q.prototype.constructor=j7q;j7q.prototype.updateBoundingSphereRadius=function(){var k4SX="computeBoundingSphereRadius() not implemented for shape type ";throw k4SX+this.type;};j7q.prototype.volume=function(){var B4SX="volume() not implemented for shape type ";throw B4SX+this.type;};j7q.prototype.calculateLocalInertia=function(){var m4SX="calculateLocalInertia() not implemented for shape type ";throw m4SX+this.type;};function j7q(){this.id=j7q.idCounter++;this.boundingSphereRadius=this.type=+G3CX.k4CX;this.collisionResponse=!a18X.I4XX;this.material=G3CX.X4CX;}j7q.idCounter=+s18X.k4CX;j7q.types={SPHERE:s18X.j4CX|a18X.I4XX,PLANE:s18X.U4CX|a18X.I4XX,BOX:+s18X.t4CX,COMPOUND:+s18X.Y4CX,CONVEXPOLYHEDRON:s18X.S3uX-a18X.I4XX,HEIGHTFIELD:s18X.b4CX|a18X.I4XX,PARTICLE:a18X.O3CX,CYLINDER:s18X.E7CX,TRIMESH:x3uX.H4uX|a18X.I4XX};},{"../material/Material":m1RX.A3fX|j1RX.I4XX,"../math/Quaternion":+m1RX.o23X,"../math/Vec3":B1RX.V8LX|j1RX.I4XX,"./Shape":Z1RX.q0SX|j1RX.I4XX}],44:[function(N7q,l7q){var c7q,E7q;l7q.exports=x7q;c7q=N7q(W4SX);E7q=N7q(U0SX);x7q.prototype=new c7q();x7q.prototype.constructor=x7q;x7q.prototype.calculateLocalInertia=function(C7q,b7q){var n7q;b7q=b7q||new E7q();n7q=G3CX.U4CX*H5ZZ.n4XX*C7q*this.radius*this.radius/(G3CX.V8uX|H5ZZ.I4XX);b7q.x=n7q;b7q.y=n7q;b7q.z=n7q;return b7q;};x7q.prototype.volume=function(){var s2JX=H5ZZ;s2JX.i4XX(t9CX);var Q0RR=s2JX.r4XX(s2JX.S8CX,s2JX.w4XX,s2JX.z8CX,s2JX.J4XX,s2JX.o8CX);return Q0RR*Math.PI*this.radius/+G3CX.l4CX;};x7q.prototype.updateBoundingSphereRadius=function(){this.boundingSphereRadius=this.radius;};function x7q(A7q){var Z4SX="The sphere radius cannot be negative.";c7q.call(this);this.radius=void+G3CX.k4CX!==A7q?Number(A7q):G3CX.j4CX*H5ZZ.n4XX;this.type=c7q.types.SPHERE;if((G3CX.k4CX|H5ZZ.I4XX)>this.radius){throw Error(Z4SX);}this.updateBoundingSphereRadius();}x7q.prototype.calculateWorldAABB=function(K7q,z7q,p7q,i7q){var L7q;z7q=this.radius;for(var t7q=[x3uX.m6uX,k3dX.t03X,k3dX.V7fX],a7q=G3CX.k4CX*H5ZZ.n4XX;a7qX8q.x&&(X8q.x=k7q.x),k7q.yX8q.y&&(X8q.y=k7q.y),k7q.zX8q.z&&(X8q.z=k7q.z);}};u7q.prototype.updateAABB=function(){this.computeLocalAABB(this.aabb);};u7q.prototype.updateBoundingSphereRadius=function(){var E8q;for(var x8q=G3CX.k4CX|H5ZZ.I4XX,I8q=this.vertices,N8q=new f7q(),c8q=H5ZZ.I4XX,I8q=I8q.length/(G3CX.l4CX-H5ZZ.I4XX);c8q!==I8q;c8q++){this.getVertex(c8q,N8q);E8q=N8q.norm2();E8q>x8q&&(x8q=E8q);}this.boundingSphereRadius=Math.sqrt(x8q);};new f7q();o7q=new Y4q();R7q=new e7q();u7q.prototype.calculateWorldAABB=function(l8q,A8q,b8q,n8q){o7q.position=l8q;o7q.quaternion=A8q;this.aabb.toWorldFrame(o7q,R7q);b8q.copy(R7q.lowerBound);n8q.copy(R7q.upperBound);};u7q.prototype.volume=function(){var Z9JX=H5ZZ;Z9JX.F4XX(Z9JX.o8CX);var E0RR=Z9JX.r4XX(Z9JX.P4XX,Z9JX.W8CX,Z9JX.Q8CX,G3CX.Z2CX,Z9JX.S8CX);return G3CX.t4CX*E0RR*Math.PI*this.boundingSphereRadius/(G3CX.l4CX|Z9JX.I4XX);};function u7q(r4q,m4q){var L9JX=H5ZZ;y7q.call(this);this.type=y7q.types.TRIMESH;this.vertices=new Float32Array(r4q);this.indices=new Int16Array(m4q);this.normals=new Float32Array(m4q.length);this.aabb=new e7q();this.edges=G3CX.X4CX;L9JX.i4XX(L9JX.w4XX);this.scale=new f7q(L9JX.r4XX(L9JX.I4XX,G3CX.j4CX),+G3CX.j4CX,L9JX.r4XX(L9JX.I4XX,G3CX.j4CX,L9JX.i4XX(L9JX.n4XX)));this.tree=new d4q();this.updateEdges();this.updateNormals();this.updateAABB();this.updateBoundingSphereRadius();this.updateTree();}u7q.createTorus=function(z8q,K8q,u8q,a8q,p8q){var N9JX=G3CX;var M9JX=H5ZZ;var i8q,t8q,g8q;z8q=z8q||M9JX.n4XX;K8q=K8q||Z1RX.x0SX;u8q=u8q||+N9JX.Y4CX;a8q=a8q||N9JX.O8uX*M9JX.n4XX;p8q=p8q||(N9JX.U4CX-M9JX.I4XX)*Math.PI;for(var f8q=[],k8q=[],L8q=M9JX.I4XX;L8q<=u8q;L8q++)for(var C8q=N9JX.k4CX-M9JX.I4XX;C8q<=a8q;C8q++){M9JX.F4XX(N9JX.J7CX);i8q=M9JX.z4XX(C8q,p8q,a8q);t8q=M9JX.w4XX*L8q/u8q*Math.PI;g8q=(z8q+K8q*Math.cos(t8q))*Math.cos(i8q);i8q=(z8q+K8q*Math.cos(t8q))*Math.sin(i8q);t8q=K8q*Math.sin(t8q);f8q.push(g8q,i8q,t8q);}for(L8q=N9JX.j4CX*M9JX.n4XX;L8q<=u8q;L8q++)for(C8q=+N9JX.j4CX;C8q<=a8q;C8q++){z8q=(a8q+(N9JX.j4CX|M9JX.I4XX))*(L8q-+N9JX.j4CX)+C8q-(N9JX.j4CX|M9JX.I4XX),K8q=(a8q+ +N9JX.j4CX)*(L8q-+N9JX.j4CX)+C8q,p8q=(a8q+(N9JX.j4CX|M9JX.I4XX))*L8q+C8q,k8q.push((a8q+ +N9JX.j4CX)*L8q+C8q-(N9JX.j4CX-M9JX.I4XX),z8q,p8q),k8q.push(z8q,K8q,p8q);}return new u7q(f8q,k8q);};},{"../collision/AABB":+k1RX.l4CX,"../math/Quaternion":+m1RX.o23X,"../math/Transform":Z1RX.r0SX|j1RX.I4XX,"../math/Vec3":B1RX.V8LX|j1RX.I4XX,"../utils/Octree":+B1RX.c4LX,"./Shape":Z1RX.q0SX-j1RX.I4XX}],46:[function(F8q,R8q){var y8q,e8q,Z8q,q8q;function o8q(){var E4SX=1E-7;y8q.call(this);this.iterations=H5ZZ.y8CX;this.tolerance=E4SX;}R8q.exports=o8q;F8q(U0SX);F8q(v0SX);y8q=F8q(q4SX);o8q.prototype=new y8q();e8q=[];Z8q=[];q8q=[];o8q.prototype.solve=function(v2q,w2q){var Q0JX=G3CX;var S0JX=H5ZZ;var T8q,d2q,U2q,r2q,H2q,S2q,m2q,O8q,J2q,B8q,G2q,Y2q,P8q;S0JX.i4XX(S0JX.w4XX);T8q=S0JX.z4XX(S0JX.I4XX,Q0JX.k4CX);d2q=this.iterations;U2q=this.tolerance*this.tolerance;r2q=this.equations;H2q=r2q.length;S2q=w2q.bodies;m2q=S2q.length;if(Q0JX.k4CX*S0JX.n4XX!==H2q)for(B8q=S0JX.I4XX;B8q!==m2q;B8q++){S2q[B8q].updateSolveMassProperties();}Z8q.length=H2q;q8q.length=H2q;e8q.length=H2q;for(B8q=+Q0JX.k4CX;B8q!==H2q;B8q++){P8q=r2q[B8q];e8q[B8q]=+Q0JX.k4CX;q8q[B8q]=P8q.computeB(v2q);Z8q[B8q]=+Q0JX.j4CX/P8q.computeC();}if(Q0JX.k4CX-S0JX.I4XX!==H2q){for(B8q=Q0JX.k4CX-S0JX.I4XX;B8q!==m2q;B8q++){P8q=S2q[B8q],T8q=P8q.wlambda,P8q.vlambda.set(S0JX.I4XX,+Q0JX.k4CX,+Q0JX.k4CX),T8q&&T8q.set(Q0JX.k4CX|S0JX.I4XX,+Q0JX.k4CX,S0JX.I4XX);}for(T8q=+Q0JX.k4CX;T8q!==d2q;T8q++){for(var s8q=B8q=S0JX.I4XX;s8q!==H2q;s8q++){P8q=r2q[s8q],O8q=q8q[s8q],J2q=Z8q[s8q],Y2q=e8q[s8q],G2q=P8q.computeGWlambda(),O8q=J2q*(O8q-G2q-P8q.eps*Y2q),Y2q+O8qP8q.maxForce&&(O8q=P8q.maxForce-Y2q),e8q[s8q]+=O8q,B8q+=+Q0JX.k4CXthis.nodePool.length;){this.nodePool.push(this.createNode());}}function l2q(K2q){var t2q;for(var p2q=K2q.length,z2q=+G3CX.k4CX;z2q!==p2q;z2q++){t2q=K2q[z2q];if(!t2q.visited&&!(t2q.body.type&b2q)){return t2q;}}return!+G3CX.j4CX;}function C2q(u2q,k2q,g2q){var f2q;k2q.push(u2q.body);k2q=u2q.eqs.length;for(var i2q=+G3CX.k4CX;i2q!==k2q;i2q++){f2q=u2q.eqs[i2q];-H5ZZ.n4XX===g2q.indexOf(f2q)&&g2q.push(f2q);}}function n2q(e2q,Z2q){return Z2q.id-e2q.id;}},{"../math/Quaternion":m1RX.o23X*j1RX.n4XX,"../math/Vec3":B1RX.V8LX|j1RX.I4XX,"../objects/Body":j1RX.U8CX,"./Solver":Z1RX.a0SX*j1RX.n4XX}],49:[function(Y1q,U1q){var H1q;H1q=function(){};U1q.exports=H1q;H1q.prototype={constructor:H1q,addEventListener:function(S1q,m1q){var d1q;void H5ZZ.I4XX===this._listeners&&(this._listeners={});d1q=this._listeners;void(G3CX.k4CX*H5ZZ.n4XX)===d1q[S1q]&&(d1q[S1q]=[]);-+G3CX.j4CX===d1q[S1q].indexOf(m1q)&&d1q[S1q].push(m1q);return this;},hasEventListener:function(J1q,G1q){var J4JX=G3CX;var r1q;if(void+J4JX.k4CX===this._listeners){return!H5ZZ.n4XX;}r1q=this._listeners;return void(J4JX.k4CX|H5ZZ.I4XX)!==r1q[J1q]&&-+J4JX.j4CX!==r1q[J1q].indexOf(G1q)?!(J4JX.k4CX-H5ZZ.I4XX):!+J4JX.j4CX;},removeEventListener:function(w1q,Q1q){var v1q,V1q;if(void(G3CX.k4CX|H5ZZ.I4XX)===this._listeners){return this;}v1q=this._listeners;if(void+G3CX.k4CX===v1q[w1q]){return this;}V1q=v1q[w1q].indexOf(Q1q);-+G3CX.j4CX!==V1q&&v1q[w1q].splice(V1q,G3CX.j4CX-H5ZZ.I4XX);return this;},dispatchEvent:function(X1q){var h1q;if(void(G3CX.k4CX*H5ZZ.n4XX)===this._listeners){return this;}h1q=this._listeners[X1q.type];if(void+G3CX.k4CX!==h1q){X1q.target=this;for(var D1q=+G3CX.k4CX,W1q=h1q.length;D1qG5J){v5J=G5J;G5J=J5J;J5J=v5J;}H5ZZ.i4XX(H5ZZ.d8CX);return this.data[H5ZZ.r4XX(J5J,x3uX.y6uX,G5J)];};function S5J(){this.data={keys:[]};}S5J.prototype.set=function(w5J,V5J,h5J){var Q5J;if(w5J>V5J){Q5J=V5J;V5J=w5J;w5J=Q5J;}H5ZZ.F4XX(H5ZZ.d8CX);Q5J=H5ZZ.r4XX(w5J,x3uX.y6uX,V5J);this.get(w5J,V5J)||this.data.keys.push(Q5J);this.data[Q5J]=h5J;};S5J.prototype.reset=function(){var W5J;for(var D5J=this.data,X5J=D5J.keys;(G3CX.k4CX|H5ZZ.I4XX)K0J.boundingSphereRadius+t0J.boundingSphereRadius)){i0J=e2PX.X4CX;K0J.material&&t0J.material&&(i0J=e0J.getContactMaterial(K0J.material,t0J.material)||e2PX.X4CX);this.currentContactMaterial=i0J||f0J||e0J.defaultContactMaterial;(i0J=this[K0J.type|t0J.type])&&(K0J.type=g5J.dot(A9J)){E9J=this.createContactEquation(L9J,a9J,K9J,C9J);E9J.ni.copy(g5J);b9J=B6J;g5J.scale(A9J.dot(g5J),b9J);l9J.vsub(b9J,b9J);E9J.ri.copy(b9J);E9J.ri.vsub(L9J.position,E9J.ri);E9J.rj.copy(l9J);E9J.rj.vsub(a9J.position,E9J.rj);this.result.push(E9J);this.createFrictionEquationsFromContact(E9J,this.frictionResult);}}};M6J=new C5J();Q6J=new C5J();new C5J();U6J=new C5J();n6J=new C5J();S6J=new C5J();X6J=new C5J();r6J=new C5J();v6J=new C5J();K5J=new C5J();z5J=new C5J();j6J=new C5J();z6J=new C5J();t6J=new C5J();W6J=new O6J();i5J=[];L5J.prototype[a5J.types.SPHERE|a5J.types.TRIMESH]=L5J.prototype.sphereTrimesh=function(e9J,k9J,f9J,o9J,u9J,Z9J,F9J,q9J){var Q9PX=H5ZZ;var S9PX=G3CX;var y9J,i9J;p5J.pointToLocalFrame(o9J,Z9J,f9J,K5J);u9J=e9J.radius;W6J.lowerBound.set(K5J.x-u9J,K5J.y-u9J,K5J.z-u9J);W6J.upperBound.set(K5J.x+u9J,K5J.y+u9J,K5J.z+u9J);k9J.getTrianglesInAABB(W6J,i5J);y9J=e9J.radius*e9J.radius;for(u9J=+S9PX.k4CX;u9Jg9J;g9J++)if(k9J.getVertex(k9J.indices[(S9PX.l4CX-Q9PX.I4XX)*i5J[u9J]+g9J],U6J),U6J.vsub(K5J,Q6J),Q6J.norm2()<=y9J){n6J.copy(U6J);p5J.pointToWorldFrame(o9J,Z9J,n6J,U6J);U6J.vsub(f9J,Q6J);i9J=this.createContactEquation(F9J,q9J,e9J,k9J);i9J.ni.copy(Q6J);i9J.ni.normalize();i9J.ri.copy(i9J.ni);i9J.ri.scale(e9J.radius,i9J.ri);i9J.ri.vadd(f9J,i9J.ri);i9J.ri.vsub(F9J.position,i9J.ri);i9J.rj.copy(U6J);i9J.rj.vsub(q9J.position,i9J.rj);this.result.push(i9J);this.createFrictionEquationsFromContact(i9J,this.frictionResult);}for(u9J=S9PX.k4CX*Q9PX.n4XX;u9Jg9J;g9J++){k9J.getVertex(k9J.indices[+S9PX.l4CX*i5J[u9J]+g9J],S6J),k9J.getVertex(k9J.indices[Q9PX.P4XX*i5J[u9J]+(g9J+S9PX.j4CX*Q9PX.n4XX)%Q9PX.P4XX],X6J),X6J.vsub(S6J,r6J),K5J.vsub(X6J,z5J),f9J=z5J.dot(r6J),K5J.vsub(S6J,z5J),i9J=z5J.dot(r6J),(S9PX.k4CX|Q9PX.I4XX)f9J&&(K5J.vsub(S6J,z5J),v6J.copy(r6J),v6J.normalize(),i9J=z5J.dot(v6J),v6J.scale(i9J,z5J),z5J.vadd(S6J,z5J),f9J=z5J.distanceTo(K5J),f9J-b3J&&(N3J-A3J)&&(S3J=Math.abs(S3J-Q3J-G3J),U9PX.X4CX===w3J||S3JK3J&&A9PX.k4CX*o9PX.n4XX=B3J&&!o9PX.n4XX===p3J){A9PX.X4CX===p3J&&(p3J=A9PX.k4CX*o9PX.n4XX=o5J.dot(E6J)){w7J=this.createContactEquation(j7J,M7J,x7J,D7J);V7J=Z6J;o5J.mult(o5J.dot(E6J),V7J);k5J.vsub(V7J,V7J);V7J.vsub(X7J,w7J.ri);w7J.ni.copy(o5J);k5J.vsub(W7J,w7J.rj);w7J.ri.vadd(X7J,w7J.ri);w7J.ri.vsub(j7J.position,w7J.ri);w7J.rj.vadd(W7J,w7J.rj);w7J.rj.vsub(M7J.position,w7J.rj);this.result.push(w7J);Q7J++;this.enableFrictionReduction||this.createFrictionEquationsFromContact(w7J,this.frictionResult);}this.enableFrictionReduction&&Q7J&&this.createFrictionFromAverage(Q7J);};D6J=new C5J();V6J=new C5J();L5J.prototype[a5J.types.CONVEXPOLYHEDRON]=L5J.prototype.convexConvex=function(a7J,L7J,n7J,C7J,b7J,c7J,t7J,z7J,p7J,K7J,l7J,A7J){var E7J,N7J;if(!(n7J.distanceTo(C7J)>a7J.boundingSphereRadius+L7J.boundingSphereRadius)&&a7J.findSeparatingAxis(L7J,n7J,b7J,C7J,c7J,D6J,l7J,A7J)){l7J=[];a7J.clipAgainstHull(n7J,b7J,L7J,C7J,c7J,D6J,-+x3uX.f5LX,G3CX.r3CX,l7J);for(c7J=b7J=H5ZZ.I4XX;c7J!==l7J.length;c7J++){A7J=this.createContactEquation(t7J,z7J,a7J,L7J,p7J,K7J);E7J=A7J.ri;N7J=A7J.rj;D6J.negate(A7J.ni);l7J[c7J].normal.negate(V6J);V6J.mult(l7J[c7J].depth,V6J);l7J[c7J].point.vadd(V6J,E7J);N7J.copy(l7J[c7J].point);E7J.vsub(n7J,E7J);N7J.vsub(C7J,N7J);E7J.vadd(n7J,E7J);E7J.vsub(t7J.position,E7J);N7J.vadd(C7J,N7J);N7J.vsub(z7J.position,N7J);this.result.push(A7J);b7J++;this.enableFrictionReduction||this.createFrictionEquationsFromContact(A7J,this.frictionResult);}this.enableFrictionReduction&&b7J&&this.createFrictionFromAverage(b7J);}};e5J=new C5J();a6J=new C5J();m6J=new C5J();L5J.prototype[a5J.types.PLANE|a5J.types.PARTICLE]=L5J.prototype.planeParticle=function(i7J,f7J,e7J,u7J,Z7J,q7J,k7J,g7J){var K0PX=G3CX;e5J.set(H5ZZ.I4XX,+K0PX.k4CX,+K0PX.j4CX);k7J.quaternion.vmult(e5J,e5J);u7J.vsub(k7J.position,a6J);H5ZZ.I4XX>=e5J.dot(a6J)&&(i7J=this.createContactEquation(g7J,k7J,f7J,i7J),i7J.ni.copy(e5J),i7J.ni.negate(i7J.ni),i7J.ri.set(K0PX.k4CX|H5ZZ.I4XX,K0PX.k4CX-H5ZZ.I4XX,+K0PX.k4CX),e5J.mult(e5J.dot(u7J),m6J),u7J.vsub(m6J,m6J),i7J.rj.copy(m6J),this.result.push(i7J),this.createFrictionEquationsFromContact(i7J,this.frictionResult));};T5J=new C5J();L5J.prototype[a5J.types.PARTICLE|a5J.types.SPHERE]=L5J.prototype.sphereParticle=function(o7J,F7J,y7J,R7J,O7J,s7J,B7J,P7J){T5J.set(H5ZZ.I4XX,+G3CX.k4CX,+G3CX.j4CX);R7J.vsub(y7J,T5J);T5J.norm2()<=o7J.radius*o7J.radius&&(F7J=this.createContactEquation(P7J,B7J,F7J,o7J),T5J.normalize(),F7J.rj.copy(T5J),F7J.rj.mult(o7J.radius,F7J.rj),F7J.ni.copy(T5J),F7J.ni.negate(F7J.ni),F7J.ri.set(+G3CX.k4CX,+G3CX.k4CX,H5ZZ.I4XX),this.result.push(F7J),this.createFrictionEquationsFromContact(F7J,this.frictionResult));};A6J=new N6J();O5J=new C5J();new C5J();x6J=new C5J();C6J=new C5J();P5J=new C5J();L5J.prototype[a5J.types.PARTICLE|a5J.types.CONVEXPOLYHEDRON]=L5J.prototype.convexParticle=function(T7J,Y4J,d4J,S4J,U4J,H4J,G4J,V4J){var x0PX=G3CX;var C4SX="Point found inside convex, but did not find penetrating face!";var r4J,v4J,J4J,m4J;r4J=-+x0PX.j4CX;H4J=x0PX.X4CX;v4J=+x0PX.k4CX;O5J.copy(S4J);O5J.vsub(d4J,O5J);U4J.conjugate(A6J);A6J.vmult(O5J,O5J);if(T7J.pointIsInside(O5J)){T7J.worldVerticesNeedsUpdate&&T7J.computeWorldVertices(d4J,U4J);T7J.worldFaceNormalsNeedsUpdate&&T7J.computeWorldFaceNormals(U4J);U4J=+x0PX.k4CX;for(var w4J=T7J.faces.length;U4J!==w4J;U4J++){J4J=T7J.worldFaceNormals[U4J];S4J.vsub(T7J.worldVertices[T7J.faces[U4J][+x0PX.k4CX]],C6J);m4J=-J4J.dot(C6J);if(x0PX.X4CX===H4J||Math.abs(m4J)b4J||n0PX.k4CX*w0PX.n4XX>c4J||N4J>x4J.length||A4J>x4J[w0PX.I4XX].length)){n0PX.k4CX-w0PX.I4XX>N4J&&(N4J=+n0PX.k4CX);+n0PX.k4CX>b4J&&(b4J=n0PX.k4CX|w0PX.I4XX);n0PX.k4CX-w0PX.I4XX>A4J&&(A4J=n0PX.k4CX|w0PX.I4XX);+n0PX.k4CX>c4J&&(c4J=n0PX.k4CX|w0PX.I4XX);N4J>=x4J.length&&(N4J=x4J.length-n0PX.j4CX*w0PX.n4XX);b4J>=x4J.length&&(b4J=x4J.length-+n0PX.j4CX);c4J>=x4J[n0PX.k4CX|w0PX.I4XX].length&&(c4J=x4J[w0PX.I4XX].length-+n0PX.j4CX);A4J>=x4J[n0PX.k4CX|w0PX.I4XX].length&&(A4J=x4J[w0PX.I4XX].length-n0PX.j4CX*w0PX.n4XX);x4J=[];l4J.getRectMinMax(N4J,A4J,b4J,c4J,x4J);t4J=x4J[+n0PX.k4CX];if(!(q5J.z-E4J>x4J[n0PX.j4CX|w0PX.I4XX]||q5J.z+E4Je4J||e5PX.k4CX-L5PX.I4XX>u4J||k4J>i4J.length||u4J>i4J[e5PX.k4CX*L5PX.n4XX].length)){+e5PX.k4CX>k4J&&(k4J=+e5PX.k4CX);+e5PX.k4CX>e4J&&(e4J=e5PX.k4CX*L5PX.n4XX);(e5PX.k4CX|L5PX.I4XX)>Z4J&&(Z4J=e5PX.k4CX*L5PX.n4XX);+e5PX.k4CX>u4J&&(u4J=+e5PX.k4CX);k4J>=i4J.length&&(k4J=i4J.length-+e5PX.j4CX);e4J>=i4J.length&&(e4J=i4J.length-(e5PX.j4CX-L5PX.I4XX));u4J>=i4J[+e5PX.k4CX].length&&(u4J=i4J[e5PX.k4CX|L5PX.I4XX].length-+e5PX.j4CX);Z4J>=i4J[e5PX.k4CX|L5PX.I4XX].length&&(Z4J=i4J[L5PX.I4XX].length-(e5PX.j4CX|L5PX.I4XX));i4J=[];f4J.getRectMinMax(k4J,Z4J,e4J,u4J,i4J);y4J=i4J[L5PX.I4XX];if(!(Z5J.z-g4J>i4J[+e5PX.j4CX]||Z5J.z+g4JZ1RX.m5UX*S2J);J2J++);this.time+=r2J;S2J=this.time%S2J/S2J;r2J=this.bodies;for(m2J=H5ZZ.I4XX;m2J!==r2J.length;m2J++){d2J=r2J[m2J],d2J.type!==H8J.STATIC&&d2J.sleepState!==H8J.SLEEPING?(d2J.position.vsub(d2J.previousPosition,G8J),G8J.scale(S2J,G8J),d2J.position.vadd(G8J,d2J.interpolatedPosition)):(d2J.interpolatedPosition.copy(d2J.position),d2J.interpolatedQuaternion.copy(d2J.quaternion));}}};I8J={type:k3dX.d23X};x8J={type:k3dX.W23X};S8J={type:k3dX.R23X,body:G3CX.X4CX,contact:G3CX.X4CX};h8J=[];D8J=[];Y8J=[];d8J=[];new U8J();new U8J();new U8J();new U8J();new U8J();new U8J();new U8J();new U8J();new U8J();new w8J();W8J=new w8J();m8J=new w8J();J8J=new U8J();s4J.prototype.internalStep=function(X2J){var q7kX=G3CX;var E7kX=H5ZZ;var h2J,N2J,c2J,M2J,v2J,j2J,l2J,A2J,I2J,W2J,V2J,Q2J,w2J,G2J,D2J,x2J,E2J,b2J,n2J;this.dt=X2J;h2J=this.contacts;N2J=this.numObjects();c2J=this.bodies;M2J=this.solver;v2J=this.gravity;j2J=this.doProfiling;l2J=this.profile;A2J=H8J.DYNAMIC;W2J=this.constraints;v2J.norm();V2J=v2J.x;Q2J=v2J.y;w2J=v2J.z;j2J&&(I2J=performance.now());for(v2J=E7kX.I4XX;v2J!==N2J;v2J++){G2J=c2J[v2J];if(G2J.type&A2J){D2J=G2J.force;G2J=G2J.mass;E7kX.i4XX(E7kX.I4XX);D2J.x+=E7kX.z4XX(V2J,G2J);E7kX.i4XX(E7kX.I4XX);D2J.y+=E7kX.r4XX(Q2J,G2J);E7kX.i4XX(E7kX.I4XX);D2J.z+=E7kX.z4XX(w2J,G2J);}}E7kX.i4XX(E7kX.n4XX);v2J=E7kX.z4XX(E7kX.I4XX,q7kX.k4CX);for(G2J=this.subsystems.length;v2J!==G2J;v2J++){this.subsystems[v2J].update();}j2J&&(I2J=performance.now());Y8J.length=E7kX.I4XX;d8J.length=E7kX.I4XX;this.broadphase.collisionPairs(this,Y8J,d8J);j2J&&(l2J.broadphase=performance.now()-I2J);G2J=W2J.length;for(v2J=+q7kX.k4CX;v2J!==G2J;v2J++)if(V2J=W2J[v2J],!V2J.collideConnected)for(Q2J=Y8J.length-E7kX.n4XX;E7kX.I4XX<=Q2J;Q2J-=E7kX.n4XX)if(V2J.bodyA===Y8J[Q2J]&&V2J.bodyB===d8J[Q2J]||V2J.bodyB===Y8J[Q2J]&&V2J.bodyA===d8J[Q2J]){Y8J.splice(Q2J,+q7kX.j4CX),d8J.splice(Q2J,E7kX.n4XX);}this.collisionMatrixTick();j2J&&(I2J=performance.now());G2J=h2J.length;for(v2J=q7kX.k4CX*E7kX.n4XX;v2J!==G2J;v2J++){h8J.push(h2J[v2J]);}h2J.length=E7kX.I4XX;G2J=this.frictionEquations.length;for(v2J=E7kX.I4XX;v2J!==G2J;v2J++){D8J.push(this.frictionEquations[v2J]);}this.frictionEquations.length=+q7kX.k4CX;this.narrowphase.getContacts(Y8J,d8J,this,h2J,h8J,this.frictionEquations,D8J);j2J&&(l2J.narrowphase=performance.now()-I2J);j2J&&(I2J=performance.now());for(v2J=E7kX.I4XX;v2J=(q7kX.U4CX|E7kX.I4XX)*x2J&&(G2J._wakeUpAfterNarrowphase=!+q7kX.k4CX);}w2J.allowSleep&&w2J.type===H8J.DYNAMIC&&(w2J.sleepState===H8J.SLEEPING&&G2J.sleepState===H8J.AWAKE&&G2J.type!==H8J.STATIC)&&(D2J=G2J.velocity.norm2()+G2J.angularVelocity.norm2(),x2J=Math.pow(G2J.sleepSpeedLimit,E7kX.w4XX),D2J>=q7kX.U4CX*E7kX.n4XX*x2J&&(w2J._wakeUpAfterNarrowphase=!(q7kX.k4CX|E7kX.I4XX)));this.collisionMatrix.set(G2J,w2J,!+q7kX.k4CX);this.collisionMatrixPrevious.get(G2J,w2J)||(S8J.body=w2J,S8J.contact=V2J,G2J.dispatchEvent(S8J),S8J.body=G2J,w2J.dispatchEvent(S8J));}j2J&&(l2J.makeContactConstraints=performance.now()-I2J,I2J=performance.now());for(v2J=q7kX.k4CX*E7kX.n4XX;v2J!==N2J;v2J++){G2J=c2J[v2J],G2J._wakeUpAfterNarrowphase&&(G2J.wakeUp(),G2J._wakeUpAfterNarrowphase=!+q7kX.j4CX);}G2J=W2J.length;for(v2J=+q7kX.k4CX;v2J!==G2J;v2J++){V2J=W2J[v2J];V2J.update();Q2J=E7kX.I4XX;for(h2J=V2J.equations.length;Q2J!==h2J;Q2J++){M2J.addEquation(V2J.equations[Q2J]);}}M2J.solve(X2J,this);j2J&&(l2J.solve=performance.now()-I2J);M2J.removeAllEquations();M2J=Math.pow;for(v2J=+q7kX.k4CX;v2J!==N2J;v2J++)if(G2J=c2J[v2J],G2J.type&A2J&&(W2J=M2J(+q7kX.j4CX-G2J.linearDamping,X2J),h2J=G2J.velocity,h2J.mult(W2J,h2J),W2J=G2J.angularVelocity)){h2J=M2J(+q7kX.j4CX-G2J.angularDamping,X2J),W2J.mult(h2J,W2J);}this.dispatchEvent(x8J);for(v2J=+q7kX.k4CX;v2J!==N2J;v2J++){G2J=c2J[v2J],G2J.preStep&&G2J.preStep.call(G2J);}j2J&&(I2J=performance.now());A2J=H8J.DYNAMIC|H8J.KINEMATIC;M2J=q7kX.k4CX-E7kX.I4XX===this.stepnumber%(this.quatNormalizeSkip+q7kX.j4CX*E7kX.n4XX);W2J=this.quatNormalizeFast;E7kX.F4XX(q7kX.k7CX);h2J=E7kX.r4XX(X2J,E7kX.n4XX,x3uX.V2LX);for(v2J=+q7kX.k4CX;v2J!==N2J;v2J++)if(G2J=c2J[v2J],V2J=G2J.force,Q2J=G2J.torque,G2J.type&A2J&&G2J.sleepState!==H8J.SLEEPING){w2J=G2J.velocity;D2J=G2J.angularVelocity;x2J=G2J.position;E2J=G2J.quaternion;b2J=G2J.invMass;n2J=G2J.invInertiaWorld;w2J.x+=V2J.x*b2J*X2J;w2J.y+=V2J.y*b2J*X2J;w2J.z+=V2J.z*b2J*X2J;G2J.angularVelocity&&(n2J.vmult(Q2J,J8J),J8J.mult(X2J,J8J),J8J.vadd(D2J,D2J));x2J.x+=w2J.x*X2J;x2J.y+=w2J.y*X2J;x2J.z+=w2J.z*X2J;G2J.angularVelocity&&(W8J.set(D2J.x,D2J.y,D2J.z,+q7kX.k4CX),W8J.mult(E2J,m8J),E2J.x+=h2J*m8J.x,E2J.y+=h2J*m8J.y,E2J.z+=h2J*m8J.z,E2J.w+=h2J*m8J.w,M2J&&(W2J?E2J.normalizeFast():E2J.normalize()));G2J.aabb&&(G2J.aabbNeedsUpdate=!(q7kX.k4CX|E7kX.I4XX));G2J.updateInertiaWorld&&G2J.updateInertiaWorld();}this.clearForces();this.broadphase.dirty=!+q7kX.k4CX;j2J&&(l2J.integrate=performance.now()-I2J);this.time+=X2J;E7kX.F4XX(E7kX.n4XX);this.stepnumber+=E7kX.r4XX(E7kX.I4XX,q7kX.j4CX);this.dispatchEvent(I8J);for(v2J=q7kX.k4CX*E7kX.n4XX;v2J!==N2J;v2J++){G2J=c2J[v2J],(X2J=G2J.postStep)&&X2J.call(G2J);}if(this.allowSleep)for(v2J=E7kX.I4XX;v2J!==N2J;v2J++){c2J[v2J].sleepTick(this.time);}};s4J.prototype.clearForces=function(){var U7kX=G3CX;var b7kX=H5ZZ;var a2J;for(var L2J=this.bodies,z2J=L2J.length,C2J=b7kX.I4XX;C2J!==z2J;C2J++){a2J=L2J[C2J];b7kX.i4XX(b7kX.I4XX);a2J.force.set(b7kX.z4XX(b7kX.n4XX,U7kX.k4CX),b7kX.r4XX(b7kX.I4XX,U7kX.k4CX,b7kX.i4XX(b7kX.w4XX)),+U7kX.k4CX);b7kX.F4XX(b7kX.w4XX);a2J.torque.set(+U7kX.k4CX,b7kX.z4XX(b7kX.I4XX,U7kX.k4CX),b7kX.I4XX);}};},{"../collision/AABB":j1RX.P4XX,"../collision/ArrayCollisionMatrix":+k1RX.t4CX,"../collision/NaiveBroadphase":+k1RX.n4CX,"../collision/Ray":+k1RX.Q4CX,"../collision/RaycastResult":k1RX.u3uX-j1RX.I4XX,"../equations/ContactEquation":j1RX.j8CX,"../equations/FrictionEquation":j1RX.B8CX,"../material/ContactMaterial":B1RX.Z2rX*j1RX.n4XX,"../material/Material":+m1RX.A3fX,"../math/Quaternion":j1RX.a8CX,"../math/Vec3":B1RX.V8LX|j1RX.I4XX,"../objects/Body":+B1RX.I1rX,"../shapes/Shape":+Z1RX.q0SX,"../solver/GSSolver":Z1RX.x4SX*j1RX.n4XX,"../utils/EventTarget":m1RX.Q93X|j1RX.I4XX,"../utils/TupleDictionary":j1RX.I8CX,"../utils/Vec3Pool":+m1RX.e93X,"./Narrowphase":j1RX.P8CX}]},{},[k1RX.U4CX-j1RX.I4XX])(+k1RX.U4CX);});ie=getInternetExplorerVersion();this.jukebox={};jukebox.Player=function(k2J,e2J){var u6RX=G3CX;var T4SX="Your browser can't playback the given resources - or you have missed to include jukebox.Manager";var c4SX="[object Function]";this.id=++jukebox.__jukeboxId;this.origin=e2J||u6RX.X4CX;this.settings={};for(var f2J in this.defaults){this.settings[f2J]=this.defaults[f2J];}if(A0UX.x5UX===Object.prototype.toString.call(k2J))for(var g2J in k2J){this.settings[g2J]=k2J[g2J];}c4SX===Object.prototype.toString.call(jukebox.Manager)&&(jukebox.Manager=new jukebox.Manager());this.resource=this.isPlaying=u6RX.X4CX;this.resource=A0UX.x5UX===Object.prototype.toString.call(jukebox.Manager)?jukebox.Manager.getPlayableResource(this.settings.resources):this.settings.resources[u6RX.k4CX|H5ZZ.I4XX]||u6RX.X4CX;if(u6RX.X4CX===this.resource){throw T4SX;}this.__init();return this;};jukebox.__jukeboxId=+G3CX.k4CX;jukebox.Player.prototype={defaults:{resources:[],autoplay:!(G3CX.j4CX-H5ZZ.I4XX),spritemap:{},flashMediaElement:A0UX.M4SX,timeout:A0UX.m5UX},__addToManager:function(){!(G3CX.k4CX|H5ZZ.I4XX)!==this.__wasAddedToManager&&(jukebox.Manager.add(this),this.__wasAddedToManager=!+G3CX.k4CX);},__init:function(){var C6RX=H5ZZ;var p6RX=G3CX;var i4SX="Your Browser does not support Flash Audio or HTML5 Audio.";var r4SX="file=";var z4SX="autoplay=";var V4SX="id=jukebox-flashstream-";var q2J,Z2J,F2J,o2J,y2J;q2J=this;Z2J=this.settings;F2J={};jukebox.Manager&&void(p6RX.k4CX*C6RX.n4XX)!==jukebox.Manager.features&&(F2J=jukebox.Manager.features);if(!C6RX.I4XX===F2J.html5audio){this.context=new Audio();this.context.src=this.resource;if(p6RX.X4CX===this.origin){y2J=function(R2J){q2J.__addToManager(R2J);};this.context.addEventListener(k3dX.u9dX,y2J,!+p6RX.k4CX);window.setTimeout(function(){C6RX.i4XX(C6RX.w4XX);q2J.context.removeEventListener(k3dX.u9dX,y2J,!C6RX.r4XX(C6RX.I4XX,G3CX.k4CX));y2J(A0UX.L1SX);},Z2J.timeout);}this.context.autobuffer=!+p6RX.k4CX;C6RX.i4XX(C6RX.w4XX);this.context.preload=!C6RX.r4XX(C6RX.I4XX,p6RX.k4CX);for(o2J in this.HTML5API){this[o2J]=this.HTML5API[o2J];}C6RX.n4XX=d1J[m1J].start&&S1J<=d1J[m1J].end){Y1J=m1J;break;}}void+k6RX.k4CX!==S1J&&A0UX.x5UX===Object.prototype.toString.call(d1J[Y1J])&&(this.isPlaying=this.settings.spritemap[Y1J],this.context.play&&this.context.play(),this.wasReady=this.setCurrentTime(S1J));}},stop:function(){this.__lastPosition=+G3CX.k4CX;this.isPlaying=G3CX.X4CX;this.backgroundMusic?this.backgroundHackForiOS():this.context.pause();return!+G3CX.k4CX;},pause:function(){this.isPlaying=G3CX.X4CX;this.__lastPosition=this.getCurrentTime();this.context.pause();return this.__lastPosition;},resume:function(J1J){J1J=x3uX.Z1rX===typeof J1J?J1J:this.__lastPosition;if(G3CX.X4CX!==J1J){return this.play(J1J),this.__lastPosition=G3CX.X4CX,!H5ZZ.I4XX;}this.context.play();return!+G3CX.j4CX;},HTML5API:{getVolume:function(){return this.context.volume||H5ZZ.n4XX;},setVolume:function(G1J){this.context.volume=G1J;return+A0UX.z0SX>Math.abs(this.context.volume-G1J)?!(G3CX.k4CX*H5ZZ.n4XX):!+G3CX.j4CX;},getCurrentTime:function(){return this.context.currentTime||G3CX.k4CX-H5ZZ.I4XX;},setCurrentTime:function(v1J){try{return this.context.currentTime=v1J,!(G3CX.k4CX*H5ZZ.n4XX);}catch(w1J){H5ZZ.i4XX(H5ZZ.w4XX);return!H5ZZ.r4XX(H5ZZ.I4XX,G3CX.j4CX);}}},FLASHAPI:{getVolume:function(){return this.context&&G3CX.d4CX===typeof this.context.getVolume?this.context.getVolume():G3CX.j4CX|H5ZZ.I4XX;},setVolume:function(V1J){return this.context&&G3CX.d4CX===typeof this.context.setVolume?(this.context.setVolume(V1J),!H5ZZ.I4XX):!(G3CX.j4CX|H5ZZ.I4XX);},getCurrentTime:function(){return this.context&&G3CX.d4CX===typeof this.context.getCurrentTime?this.context.getCurrentTime():+G3CX.k4CX;},setCurrentTime:function(Q1J){return this.context&&G3CX.d4CX===typeof this.context.setCurrentTime?this.context.setCurrentTime(Q1J):!+G3CX.j4CX;}}};if(void+G3CX.k4CX===this.jukebox){throw A0UX.f8WX;}jukebox.Manager=function(h1J){this.features={};this.codecs={};this.__players={};this.__playersLength=+G3CX.k4CX;this.__clones={};this.__queue=[];this.settings={};for(var D1J in this.defaults){this.settings[D1J]=this.defaults[D1J];}if(A0UX.x5UX===Object.prototype.toString.call(h1J))for(var X1J in h1J){this.settings[X1J]=h1J[X1J];}this.__detectFeatures();jukebox.Manager.__initialized=!+G3CX.j4CX===this.settings.useGameLoop?window.setInterval(function(){jukebox.Manager.loop();},x3uX.b2rX*H5ZZ.n4XX):!+G3CX.k4CX;};jukebox.Manager.prototype={defaults:{useFlash:!H5ZZ.n4XX,useGameLoop:!+G3CX.j4CX},__detectFeatures:function(){var z7RX=G3CX;var h7RX=A0UX;var N7RX=H5ZZ;var w8WX="ShockwaveFlash.ShockwaveFlash.10";var n8WX="Shockwave Flash";var I8WX=/iPhone|iPod|iPad/i;var F8WX=1E-4;var i8WX="0.1337";var z8WX="audio/webm";var h8WX="audio/x-pn-wav";var N8WX="audio/x-wav";var T8WX="audio/wav";var c8WX="audio/wave";var x8WX="wav";var e8WX='video/ogg; codecs="theora, vorbis"';var L8WX="video/ogg";var u8WX='audio/ogg; codecs="theora, vorbis"';var o8WX="audio/ogg";var A8WX="application/ogg";var v8WX="video/mp4";var C8WX="audio/mp4";var p8WX="mp4";var U8WX="video/mpeg";var b8WX="mpga";var G8WX="audio/mpa-robust";var a8WX="audio/MPA";var q8WX="audio/mp3";var D8WX='audio/mp4{audio/mp4; codecs="mp4a.40.2,avc1.42E01E"{audio/mpeg4{audio/mpeg4-generic{audio/mp4a-latm{audio/MP4A-LATM{audio/x-m4a';var m8WX='audio/x-aiff; codecs="IMA-ADPCM, ADPCM"';var B8WX="audio/x-adpcm";var k8WX="audio/IMA-ADPCM";var X8WX="amr";var l8WX="audio/aacp";var t8WX="audio/aac";var Y8WX="aac";var Q8WX="audio/amr";var S8WX="audio/3gpp";var O8WX="3gp";var M1J;M1J=window.Audio&&new Audio();if(M1J&&M1J.canPlayType&&!N7RX.n4XX===this.settings.useFlash){for(var j1J=[{e:O8WX,m:[S8WX,Q8WX]},{e:Y8WX,m:[t8WX,l8WX]},{e:X8WX,m:[Q8WX,S8WX]},{e:h7RX.j8WX,m:[k8WX,B8WX,m8WX]},{e:h7RX.Z8WX,m:D8WX.split(h7RX.n2SX)},{e:h7RX.E8WX,m:[q8WX,h7RX.s8WX,k3dX.O9dX,a8WX,G8WX]},{e:b8WX,m:[a8WX,G8WX,h7RX.s8WX,U8WX]},{e:p8WX,m:[C8WX,v8WX]},{e:h7RX.H8WX,m:[A8WX,o8WX,u8WX,L8WX,e8WX]},{e:x8WX,m:[c8WX,T8WX,h7RX.M8WX,N8WX,h8WX]},{e:h7RX.V8WX,m:[z8WX,h7RX.r8WX,k3dX.N1UX]}],c1J,I1J,W1J=z7RX.k4CX-N7RX.I4XX,N1J=j1J.length;W1JMath.abs(M1J.volume-+i8WX));navigator.userAgent.match(I8WX)&&(this.features.channels=z7RX.j4CX-N7RX.I4XX);}this.features.flashaudio=!!navigator.mimeTypes[h7RX.J4SX]||!!navigator.plugins[n8WX]||!(z7RX.j4CX-N7RX.I4XX);if(window.ActiveXObject)try{new ActiveXObject(w8WX);this.features.flashaudio=!N7RX.I4XX;}catch(l1J){}!N7RX.I4XX===this.settings.useFlash&&(this.features.flashaudio=!(z7RX.k4CX-N7RX.I4XX));!N7RX.I4XX===this.features.flashaudio&&!this.features.html5audio&&(this.codecs.mp3=q8WX,this.codecs.mpga=h7RX.s8WX,this.codecs.mp4=C8WX,this.codecs.m4a=C8WX,this.codecs[O8WX]=S8WX,this.codecs.amr=Q8WX,this.features.volume=!+z7RX.k4CX,this.features.channels=N7RX.n4XX);},__getPlayerById:function(A1J){return this.__players&&void+G3CX.k4CX!==this.__players[A1J]?this.__players[A1J]:G3CX.X4CX;},__getClone:function(a1J,L1J){var T7RX=H5ZZ;var C1J;for(var n1J in this.__clones){C1J=this.__clones[n1J];if(G3CX.X4CX===C1J.isPlaying&&C1J.origin===a1J){return C1J;}}if(A0UX.x5UX===Object.prototype.toString.call(L1J)){n1J={};for(var b1J in L1J){n1J[b1J]=L1J[b1J];}n1J.autoplay=!T7RX.n4XX;b1J=new jukebox.Player(n1J,a1J);T7RX.F4XX(T7RX.n4XX);b1J.isClone=!T7RX.z4XX(T7RX.I4XX,G3CX.k4CX);b1J.wasReady=!T7RX.n4XX;return this.__clones[b1J.id]=b1J;}return G3CX.X4CX;},loop:function(){var e7RX=H5ZZ;var L7RX=G3CX;var z1J,t1J,K1J;if(L7RX.k4CX*e7RX.n4XX!==this.__playersLength)if(this.__queue.length&&this.__playersLengthz1J.isPlaying.end&&(!(L7RX.k4CX|e7RX.I4XX)===z1J.isPlaying.loop?z1J.play(z1J.isPlaying.start,!+L7RX.k4CX):z1J.stop()):z1J.isClone&&L7RX.X4CX===z1J.isPlaying?this.remove(z1J):void e7RX.I4XX!==z1J.backgroundMusic&&L7RX.X4CX===z1J.isPlaying&&t1J>z1J.backgroundMusic.end&&z1J.backgroundHackForiOS();}},getPlayableResource:function(p1J){var J8WX=/\.([^\.]*)$/;var P8WX="[object Array]";var u1J,k1J;P8WX!==Object.prototype.toString.call(p1J)&&(p1J=[p1J]);for(var i1J=G3CX.k4CX-H5ZZ.I4XX,f1J=p1J.length;i1J=U5z){H5z._volume=U5z;if(H5z._muted){return H5z;}H5z.usingWebAudio&&H5z.masterGain.gain.setValueAtTime(U5z,F1J.ctx.currentTime);for(var Y5z=+G3CX.k4CX;Y5zparseInt(c5z[X38X.k4CX|H5ZZ.I4XX].split(X38X.J4CX)[+X38X.j4CX],+X38X.u3uX);x5z._codecs={mp3:!(c5z||!N5z&&!I5z.canPlayType(g3WX).replace(B38X.S9dX,X38X.e4CX)),mpeg:!!N5z,opus:!!I5z.canPlayType(k38X.y3WX).replace(B38X.S9dX,X38X.e4CX),ogg:!!I5z.canPlayType(B38X.Q9dX).replace(B38X.S9dX,X38X.e4CX),oga:!!I5z.canPlayType(B38X.Q9dX).replace(B38X.S9dX,X38X.e4CX),wav:!!I5z.canPlayType(A0UX.M8WX).replace(B38X.S9dX,X38X.e4CX),aac:!!I5z.canPlayType(k38X.f3WX).replace(B38X.S9dX,X38X.e4CX),caf:!!I5z.canPlayType(O3WX).replace(B38X.S9dX,X38X.e4CX),m4a:!!(I5z.canPlayType(k38X.S3WX)||I5z.canPlayType(k38X.Q3WX)||I5z.canPlayType(k38X.f3WX)).replace(B38X.S9dX,X38X.e4CX),mp4:!!(I5z.canPlayType(k38X.Y3WX)||I5z.canPlayType(k38X.t3WX)||I5z.canPlayType(k38X.f3WX)).replace(B38X.S9dX,X38X.e4CX),weba:!!I5z.canPlayType(A0UX.r8WX).replace(B38X.S9dX,X38X.e4CX),webm:!!I5z.canPlayType(A0UX.r8WX).replace(B38X.S9dX,X38X.e4CX),dolby:!!I5z.canPlayType(l3WX).replace(B38X.S9dX,X38X.e4CX),flac:!!(I5z.canPlayType(X3WX)||I5z.canPlayType(j3WX)).replace(B38X.S9dX,X38X.e4CX)};return x5z;},_unlockAudio:function(){var Q38X=G3CX;var S38X=H5ZZ;var B3WX="44100";var k3WX=/iPhone|iPad|iPod|Android|BlackBerry|BB10|Silk|Mobi|Chrome|Safari/i;var v5CX=22050;var l5z,b5z,A5z;l5z=this||F1J;b5z=k3WX.test(l5z._navigator&&l5z._navigator.userAgent);if(!l5z._audioUnlocked&&l5z.ctx&&b5z){l5z._audioUnlocked=!S38X.n4XX;l5z.autoUnlock=!+Q38X.j4CX;!l5z._mobileUnloaded&&+B3WX!==l5z.ctx.sampleRate&&(l5z._mobileUnloaded=!+Q38X.k4CX,l5z.unload());S38X.i4XX(S38X.w4XX);l5z._scratchBuffer=l5z.ctx.createBuffer(S38X.r4XX(S38X.I4XX,Q38X.j4CX),S38X.n4XX,v5CX);A5z=function(){var M7kX=H5ZZ;var L5z,a5z,C5z;for(var n5z=Q38X.k4CX*M7kX.n4XX;n5z=D6z){U6z._ended(Y6z);}else{d6z=Y6z._node;if(U6z._webAudio){m6z=function(){var a1kX=G3CX;var s1kX=H5ZZ;var T3WX="86400";s1kX.i4XX(s1kX.I4XX);U6z._playLock=!s1kX.z4XX(s1kX.n4XX,a1kX.j4CX);V6z();U6z._refreshBuffer(Y6z);d6z.gain.setValueAtTime(Y6z._muted||U6z._muted?s1kX.I4XX:Y6z._volume,F1J.ctx.currentTime);Y6z._playStart=F1J.ctx.currentTime;x3uX.o6uX===typeof d6z.bufferSource.start?Y6z._loop?d6z.bufferSource.noteGrainOn(+a1kX.k4CX,r6z,+T3WX):d6z.bufferSource.noteGrainOn(+a1kX.k4CX,r6z,v6z):Y6z._loop?d6z.bufferSource.start(+a1kX.k4CX,r6z,+T3WX):d6z.bufferSource.start(a1kX.k4CX|s1kX.I4XX,r6z,v6z);Infinity!==w6z&&(U6z._endTimers[Y6z._id]=setTimeout(U6z._ended.bind(U6z,Y6z),w6z));G6z||setTimeout(function(){U6z._emit(W3WX.G3WX,Y6z._id);U6z._loadQueue();},+a1kX.k4CX);},k3dX.t9dX===F1J.state?m6z():(U6z._playLock=!(v88X.k4CX-o88X.I4XX),U6z.once(A88X.q3WX,m6z),U6z._clearTimer(Y6z._id));}else{h6z=function(){var N3WX="Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.";var M3WX="playerror";var I6z;d6z.currentTime=r6z;d6z.muted=Y6z._muted||U6z._muted||F1J._muted||d6z.muted;d6z.volume=Y6z._volume*F1J.volume();d6z.playbackRate=Y6z._rate;try{I6z=d6z.play();I6z&&x3uX.o6uX!==typeof Promise&&(I6z instanceof Promise||G3CX.d4CX===typeof I6z.then)?(U6z._playLock=!H5ZZ.I4XX,V6z(),I6z.then(function(){H5ZZ.F4XX(H5ZZ.w4XX);U6z._playLock=!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.j4CX);d6z._unlocked=!+G3CX.k4CX;G6z||(U6z._emit(W3WX.G3WX,Y6z._id),U6z._loadQueue());}).catch(function(){H5ZZ.i4XX(H5ZZ.n4XX);U6z._playLock=!H5ZZ.r4XX(H5ZZ.I4XX,G3CX.j4CX);U6z._emit(M3WX,Y6z._id,N3WX);Y6z._ended=!+G3CX.k4CX;Y6z._paused=!+G3CX.k4CX;})):G6z||(U6z._playLock=!+G3CX.j4CX,V6z(),U6z._emit(W3WX.G3WX,Y6z._id),U6z._loadQueue());d6z.playbackRate=Y6z._rate;d6z.paused?U6z._emit(M3WX,Y6z._id,N3WX):c3WX!==S6z||Y6z._loop?U6z._endTimers[Y6z._id]=setTimeout(U6z._ended.bind(U6z,Y6z),w6z):(U6z._endTimers[Y6z._id]=function(){U6z._ended(Y6z);d6z.removeEventListener(W3WX.h3WX,U6z._endTimers[Y6z._id],!(G3CX.j4CX|H5ZZ.I4XX));},d6z.addEventListener(W3WX.h3WX,U6z._endTimers[Y6z._id],!+G3CX.j4CX));}catch(x6z){U6z._emit(M3WX,Y6z._id,x6z);}};m6z=window&&window.ejecta||!d6z.readyState&&F1J._navigator.isCocoonJS;if(+v88X.l4CX<=d6z.readyState||m6z){h6z();}else{o88X.F4XX(o88X.I4XX);U6z._playLock=!o88X.z4XX(o88X.n4XX,v88X.k4CX);X6z=function(){h6z();d6z.removeEventListener(F1J._canPlayEvent,X6z,!H5ZZ.n4XX);};d6z.addEventListener(F1J._canPlayEvent,X6z,!(v88X.j4CX*o88X.n4XX));U6z._clearTimer(Y6z._id);}}return Y6z._id;}},pause:function(A6z,b6z){var B88X=G3CX;var V3WX="pause";var N6z,c6z;N6z=this;if(W3WX.x3WX!==N6z._state||N6z._playLock){return N6z._queue.push({event:V3WX,action:function(){N6z.pause(A6z);}}),N6z;}for(var l6z=N6z._getSoundIds(A6z),E6z=B88X.k4CX*H5ZZ.n4XX;E6z=F6z){if(W3WX.x3WX!==g6z._state||g6z._playLock){return g6z._queue.push({event:k3dX.O0dX,action:function(){g6z.volume.apply(g6z,e6z);}}),g6z;}x3uX.o6uX===typeof q6z&&(g6z._volume=F6z);q6z=g6z._getSoundIds(q6z);for(var o6z=W88X.k4CX-d88X.I4XX;o6zG0z&&d0z>=m0z){clearInterval(S0z._interval),S0z._interval=I9kX.X4CX,S0z._fadeTo=I9kX.X4CX,r0z.volume(m0z,S0z._id),r0z._emit(i3WX,S0z._id);}},J0z);},_stopFade:function(X0z){var D0z;D0z=this._soundById(X0z);D0z&&D0z._interval&&(this._webAudio&&D0z._node.gain.cancelScheduledValues(F1J.ctx.currentTime),clearInterval(D0z._interval),D0z._interval=G3CX.X4CX,this.volume(D0z._fadeTo,X0z),D0z._fadeTo=G3CX.X4CX,this._emit(i3WX,X0z));return this;},loop:function(){var V4AX=G3CX;var W0z,M0z,j0z;W0z=arguments;if(H5ZZ.I4XX===W0z.length){return this._loop;}if(+V4AX.j4CX===W0z.length)if(x3uX.j3dX===typeof W0z[+V4AX.k4CX]){this._loop=M0z=W0z[+V4AX.k4CX];}else{return(W0z=this._soundById(parseInt(W0z[+V4AX.k4CX],H5ZZ.y8CX)))?W0z._loop:!+V4AX.j4CX;}else{(V4AX.U4CX|H5ZZ.I4XX)===W0z.length&&(M0z=W0z[V4AX.k4CX*H5ZZ.n4XX],j0z=parseInt(W0z[+V4AX.j4CX],+V4AX.u3uX));}j0z=this._getSoundIds(j0z);for(var I0z=+V4AX.k4CX;I0zf9z&&(g9z=W3WX.g7WX.test(F1J._navigator&&F1J._navigator.userAgent.toLowerCase()),F1J._navigator&&F1J._navigator.standalone&&!g9z||F1J._navigator&&!F1J._navigator.standalone&&!g9z)){F1J.usingWebAudio=!+D5AX.j4CX;}F1J.usingWebAudio&&(F1J.masterGain=x3uX.o6uX===typeof F1J.ctx.createGain?F1J.ctx.createGainNode():F1J.ctx.createGain(),F1J.masterGain.gain.setValueAtTime(F1J._muted?E5AX.I4XX:E5AX.n4XX,F1J.ctx.currentTime),F1J.masterGain.connect(F1J.ctx.destination));F1J._setup();}};G3CX.d4CX===typeof define&&define.amd&&define([],function(){return{Howler:F1J,Howl:y1J};});x3uX.o6uX!==typeof exports&&(exports.Howler=F1J,exports.Howl=y1J);x3uX.o6uX!==typeof window?(window.HowlerGlobal=B1J,window.Howler=F1J,window.Howl=y1J,window.Sound=R1J):x3uX.o6uX!==typeof global&&(global.HowlerGlobal=B1J,global.Howler=F1J,global.Howl=y1J,global.Sound=R1J);}());(function(){var s7RX=G3CX;var q7RX=H5ZZ;var S7WX="spatial";var q9z,F9z,o9z,Z9z;q7RX.F4XX(q7RX.w4XX);HowlerGlobal.prototype._pos=[q7RX.r4XX(q7RX.I4XX,s7RX.k4CX),+s7RX.k4CX,q7RX.r4XX(q7RX.n4XX,s7RX.k4CX,q7RX.F4XX(q7RX.I4XX))];q7RX.i4XX(q7RX.w4XX);HowlerGlobal.prototype._orientation=[q7RX.r4XX(q7RX.I4XX,s7RX.k4CX),+s7RX.k4CX,-q7RX.r4XX(q7RX.I4XX,s7RX.j4CX),+s7RX.k4CX,q7RX.n4XX,q7RX.z4XX(q7RX.I4XX,s7RX.k4CX)];HowlerGlobal.prototype.stereo=function(R9z){if(!this.ctx||!this.ctx.listener){return this;}for(var y9z=this._howls.length-(s7RX.j4CX|H5ZZ.I4XX);+s7RX.k4CX<=y9z;y9z--){this._howls[y9z].stereo(R9z);}return this;};HowlerGlobal.prototype.pos=function(O9z,B9z,P9z){var l5AX=H5ZZ;if(!this.ctx||!this.ctx.listener){return this;}B9z=x3uX.Z1rX!==typeof B9z?this._pos[l5AX.n4XX]:B9z;P9z=x3uX.Z1rX!==typeof P9z?this._pos[s7RX.U4CX*l5AX.n4XX]:P9z;if(x3uX.Z1rX===typeof O9z){this._pos=[O9z,B9z,P9z],x3uX.o6uX!==typeof this.ctx.listener.positionX?(this.ctx.listener.positionX.setTargetAtTime(this._pos[s7RX.k4CX|l5AX.I4XX],Howler.ctx.currentTime,A0UX.c8SX*l5AX.n4XX),this.ctx.listener.positionY.setTargetAtTime(this._pos[s7RX.j4CX*l5AX.n4XX],Howler.ctx.currentTime,A0UX.c8SX*l5AX.n4XX),this.ctx.listener.positionZ.setTargetAtTime(this._pos[+s7RX.U4CX],Howler.ctx.currentTime,A0UX.F5SX)):this.ctx.listener.setPosition(this._pos[s7RX.k4CX|l5AX.I4XX],this._pos[+s7RX.j4CX],this._pos[s7RX.U4CX-l5AX.I4XX]);}else{return this._pos;}return this;};HowlerGlobal.prototype.orientation=function(U3z,s9z,T9z,Y3z,d3z,S3z){var Y5AX=A0UX;var Q5AX=H5ZZ;var S5AX=x3uX;var H3z;if(!this.ctx||!this.ctx.listener){return this;}H3z=this._orientation;s9z=S5AX.Z1rX!==typeof s9z?H3z[Q5AX.n4XX]:s9z;T9z=S5AX.Z1rX!==typeof T9z?H3z[s7RX.U4CX|Q5AX.I4XX]:T9z;Y3z=S5AX.Z1rX!==typeof Y3z?H3z[+s7RX.l4CX]:Y3z;d3z=S5AX.Z1rX!==typeof d3z?H3z[Q5AX.J4XX]:d3z;S3z=S5AX.Z1rX!==typeof S3z?H3z[s7RX.V8uX|Q5AX.I4XX]:S3z;if(S5AX.Z1rX===typeof U3z){this._orientation=[U3z,s9z,T9z,Y3z,d3z,S3z],S5AX.o6uX!==typeof this.ctx.listener.forwardX?(this.ctx.listener.forwardX.setTargetAtTime(U3z,Howler.ctx.currentTime,Y5AX.c8SX-Q5AX.I4XX),this.ctx.listener.forwardY.setTargetAtTime(s9z,Howler.ctx.currentTime,Y5AX.F5SX),this.ctx.listener.forwardZ.setTargetAtTime(T9z,Howler.ctx.currentTime,+Y5AX.c8SX),this.ctx.listener.upX.setTargetAtTime(U3z,Howler.ctx.currentTime,+Y5AX.c8SX),this.ctx.listener.upY.setTargetAtTime(s9z,Howler.ctx.currentTime,Y5AX.c8SX-Q5AX.I4XX),this.ctx.listener.upZ.setTargetAtTime(T9z,Howler.ctx.currentTime,+Y5AX.c8SX)):this.ctx.listener.setOrientation(U3z,s9z,T9z,Y3z,d3z,S3z);}else{return H3z;}return this;};q9z=Howl.prototype.init;Howl.prototype.init=function(m3z){var f5AX=x3uX;var f7WX=1E4;var y7WX="inverse";this._orientation=m3z.orientation||[H5ZZ.n4XX,s7RX.k4CX*H5ZZ.n4XX,+s7RX.k4CX];this._stereo=m3z.stereo||s7RX.X4CX;this._pos=m3z.pos||s7RX.X4CX;this._pannerAttr={coneInnerAngle:f5AX.o6uX!==typeof m3z.coneInnerAngle?m3z.coneInnerAngle:+f5AX.Q7uX,coneOuterAngle:f5AX.o6uX!==typeof m3z.coneOuterAngle?m3z.coneOuterAngle:f5AX.Q7uX-H5ZZ.I4XX,coneOuterGain:f5AX.o6uX!==typeof m3z.coneOuterGain?m3z.coneOuterGain:+s7RX.k4CX,distanceModel:f5AX.o6uX!==typeof m3z.distanceModel?m3z.distanceModel:y7WX,maxDistance:f5AX.o6uX!==typeof m3z.maxDistance?m3z.maxDistance:f7WX,panningModel:f5AX.o6uX!==typeof m3z.panningModel?m3z.panningModel:k3dX.z9dX,refDistance:f5AX.o6uX!==typeof m3z.refDistance?m3z.refDistance:s7RX.j4CX|H5ZZ.I4XX,rolloffFactor:f5AX.o6uX!==typeof m3z.rolloffFactor?m3z.rolloffFactor:+s7RX.j4CX};this._onstereo=m3z.onstereo?[{fn:m3z.onstereo}]:[];this._onpos=m3z.onpos?[{fn:m3z.onpos}]:[];this._onorientation=m3z.onorientation?[{fn:m3z.onorientation}]:[];return q9z.call(this,m3z);};Howl.prototype.stereo=function(G3z,w3z){var d5AX=H5ZZ;var W5AX=x3uX;var O7WX="stereo";var J3z,V3z,r3z;J3z=this;if(!J3z._webAudio){return J3z;}if(W3WX.x3WX!==J3z._state){return J3z._queue.push({event:O7WX,action:function(){J3z.stereo(G3z,w3z);}}),J3z;}V3z=W5AX.o6uX===typeof Howler.ctx.createStereoPanner?S7WX:O7WX;if(W5AX.o6uX===typeof w3z)if(W5AX.Z1rX===typeof G3z){J3z._stereo=G3z,J3z._pos=[G3z,d5AX.I4XX,+s7RX.k4CX];}else{return J3z._stereo;}for(var Q3z=J3z._getSoundIds(w3z),v3z=+s7RX.k4CX;v3zW7z;W7z++){B3z(X7z,X7z._deferreds[W7z]);}X7z._deferreds=G3CX.X4CX;}Z3z.prototype.then=function(b7z,n7z){var A7z;A7z=new this.constructor(s3z);return B3z(this,new function(C7z,L7z,a7z){this.onFulfilled=G3CX.d4CX==typeof C7z?C7z:G3CX.X4CX;this.onRejected=G3CX.d4CX==typeof L7z?L7z:G3CX.X4CX;this.promise=a7z;}(b7z,n7z,A7z)),A7z;};Z3z.prototype[j7WX]=R3z;function B3z(S7z,m7z){for(;+G3CX.l4CX===S7z._state;){S7z=S7z._value;}+G3CX.k4CX!==S7z._state?(S7z._handled=!(G3CX.k4CX|H5ZZ.I4XX),Z3z._immediateFn(function(){var r7z,J7z;r7z=H5ZZ.n4XX===S7z._state?m7z.onFulfilled:m7z.onRejected;if(G3CX.X4CX!==r7z){try{J7z=r7z(S7z._value);}catch(G7z){return void F3z(m7z.promise,G7z);}o3z(m7z.promise,J7z);}else{(H5ZZ.n4XX===S7z._state?o3z:F3z)(m7z.promise,S7z._value);}})):S7z._deferreds.push(m7z);}function R3z(H7z){var T3z;T3z=this.constructor;return this.then(function(U7z){return T3z.resolve(H7z()).then(function(){return U7z;});},function(Y7z){return T3z.resolve(H7z()).then(function(){return T3z.reject(Y7z);});});}Z3z.all=function(z7z){return new Z3z(function(p7z,i7z){var k7WX="Promise.all accepts an array";var t7z;if(!z7z||x3uX.o6uX==typeof z7z.length){throw new TypeError(k7WX);}t7z=Array.prototype.slice.call(z7z);if(+G3CX.k4CX===t7z.length){return p7z([]);}function u7z(e7z,f7z){var g7z;try{if(f7z&&(G3CX.W4CX==typeof f7z||G3CX.d4CX==typeof f7z)){g7z=f7z.then;if(G3CX.d4CX==typeof g7z){return void g7z.call(f7z,function(Z7z){u7z(e7z,Z7z);},i7z);}}t7z[e7z]=f7z;H5ZZ.I4XX==--k7z&&p7z(t7z);}catch(q7z){i7z(q7z);}}for(var k7z=t7z.length,K7z=+G3CX.k4CX;t7z.length>K7z;K7z++){u7z(K7z,t7z[K7z]);}});};Z3z.resolve=function(F7z){return F7z&&G3CX.W4CX==typeof F7z&&F7z.constructor===Z3z?F7z:new Z3z(function(o7z){o7z(F7z);});};Z3z.reject=function(y7z){return new Z3z(function(B7z,R7z){R7z(y7z);});};function s3z(){}Z3z.race=function(P7z){return new Z3z(function(T7z,H4z){for(var O7z=H5ZZ.I4XX,s7z=P7z.length;s7z>O7z;O7z++){P7z[O7z].then(T7z,H4z);}});};Z3z._immediateFn=G3CX.d4CX==typeof setImmediate&&function(U4z){setImmediate(U4z);}||function(Y4z){O3z(Y4z,+G3CX.k4CX);};Z3z._unhandledRejectionFn=function(d4z){var B7WX="Possible Unhandled Promise Rejection:";void H5ZZ.I4XX!==console&&console&&console.warn(B7WX,d4z);};q3z=function(){var m7WX="unable to locate global object";if(x3uX.o6uX!=typeof self){return self;}if(x3uX.o6uX!=typeof window){return window;}if(x3uX.o6uX!=typeof global){return global;}throw Error(m7WX);}();function F3z(h7z,D7z){h7z._state=+G3CX.U4CX;h7z._value=D7z;y3z(h7z);}Z7WX in q3z?q3z.Promise.prototype[j7WX]||(q3z.Promise.prototype[j7WX]=R3z):q3z.Promise=Z3z;});(function(){var B7RX=G3CX;var w4z,r4z,v4z,J4z;function X4z(){B7RX.X4CX===J4z&&(J4z=!!document.fonts);return J4z;}function W4z(){var D7WX="condensed 100px sans-serif";var K4z;if(B7RX.X4CX===v4z){K4z=document.createElement(k3dX.f4dX);try{K4z.style.font=D7WX;}catch(p4z){}v4z=B7RX.e4CX!==K4z.style.font;}return v4z;}function G4z(z4z,t4z){var a4z;a4z=t4z||{};this.family=z4z;this.style=a4z.style||x3uX.Z7rX;this.weight=a4z.weight||x3uX.Z7rX;this.stretch=a4z.stretch||x3uX.Z7rX;}function h4z(N4z){var Q0AX=H5ZZ;var E4z,l4z;E4z=N4z.a.offsetWidth;Q0AX.i4XX(Q0AX.w8CX);l4z=Q0AX.r4XX(Q0AX.I4XX,E4z,x3uX.f5LX);Q0AX.F4XX(Q0AX.W8CX);N4z.f.style.width=Q0AX.z4XX(k3dX.q9dX,l4z);N4z.c.scrollLeft=l4z;N4z.b.scrollLeft=N4z.b.scrollWidth+ +x3uX.f5LX;return N4z.g!==E4z?(N4z.g=E4z,!(B7RX.k4CX*Q0AX.n4XX)):!+B7RX.j4CX;}w4z=B7RX.X4CX;r4z=B7RX.X4CX;v4z=B7RX.X4CX;J4z=B7RX.X4CX;function S4z(i4z,u4z){var E7WX="100px";return[i4z.style,i4z.weight,W4z()?i4z.stretch:B7RX.e4CX,E7WX,u4z].join(B7RX.W3uX);}function D4z(j4z,M4z){document.addEventListener?j4z.addEventListener(A0UX.G2SX,M4z,!H5ZZ.n4XX):j4z.attachEvent(A0UX.G2SX,M4z);}G4z.prototype.load=function(q4z,F4z){var s7WX="3E3";var q7WX="BESbswy";var k4z,g4z,e4z,f4z,Z4z;k4z=this;g4z=q4z||q7WX;e4z=+B7RX.k4CX;f4z=F4z||s7WX-H5ZZ.I4XX;Z4z=new Date().getTime();return new Promise(function(R4z,B4z){var x7WX="onreadystatechange";var U7WX="ms timeout exceeded";var b7WX="603";var G7WX=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/;var a7WX=/Apple/;var o4z,P4z,y4z;if(o4z=X4z()){B7RX.X4CX===r4z&&(X4z()&&a7WX.test(window.navigator.vendor)?(o4z=G7WX.exec(window.navigator.userAgent),r4z=!!o4z&&b7WX-H5ZZ.I4XX>parseInt(o4z[B7RX.j4CX*H5ZZ.n4XX],+B7RX.u3uX)):r4z=!+B7RX.j4CX),o4z=!r4z;}if(o4z){o4z=new Promise(function(T4z,O4z){s4z();function s4z(){new Date().getTime()-Z4z>=f4z?O4z(Error(B7RX.e4CX+f4z+U7WX)):document.fonts.load(S4z(k4z,k3dX.p93X+k4z.family+k3dX.p93X),g4z).then(function(H8z){(B7RX.j4CX|H5ZZ.I4XX)<=H8z.length?T4z():setTimeout(s4z,+k3dX.A3fX);},O4z);}});P4z=new Promise(function(Y8z,U8z){e4z=setTimeout(function(){U8z(Error(B7RX.e4CX+f4z+U7WX));},f4z);});Promise.race([P4z,o4z]).then(function(){clearTimeout(e4z);R4z(k4z);},B4z);}else{y4z=function(){var V92X=H5ZZ;var e7WX='",monospace';var o7WX='",serif';var A7WX='",sans-serif';var H7WX="monospace";var v7WX="serif";var C7WX="sans-serif";var p7WX="ltr";var v8z,J8z,G8z,S8z,r8z,m8z,w8z,V8z,Q8z,d8z;v8z=new V4z(g4z);J8z=new V4z(g4z);G8z=new V4z(g4z);V92X.i4XX(V92X.I4XX);S8z=-V92X.z4XX(V92X.n4XX,B7RX.j4CX);V92X.i4XX(V92X.n4XX);r8z=-V92X.z4XX(V92X.I4XX,B7RX.j4CX);V92X.F4XX(V92X.w4XX);m8z=-V92X.z4XX(V92X.I4XX,B7RX.j4CX);w8z=-+B7RX.j4CX;V92X.i4XX(V92X.n4XX);V8z=-V92X.z4XX(V92X.I4XX,B7RX.j4CX);V92X.F4XX(V92X.n4XX);Q8z=-V92X.r4XX(V92X.I4XX,B7RX.j4CX);d8z=document.createElement(k3dX.f4dX);d8z.dir=p7WX;m4z(v8z,S4z(k4z,C7WX));m4z(J8z,S4z(k4z,v7WX));m4z(G8z,S4z(k4z,H7WX));d8z.appendChild(v8z.a);d8z.appendChild(J8z.a);d8z.appendChild(G8z.a);document.body.appendChild(d8z);w8z=v8z.a.offsetWidth;V8z=J8z.a.offsetWidth;Q8z=G8z.a.offsetWidth;D8z();Q4z(v8z,function(j8z){S8z=j8z;h8z();});m4z(v8z,S4z(k4z,k3dX.p93X+k4z.family+A7WX));Q4z(J8z,function(M8z){r8z=M8z;h8z();});m4z(J8z,S4z(k4z,k3dX.p93X+k4z.family+o7WX));function D8z(){var c4NX=H5ZZ;var W8z;if(new Date().getTime()-Z4z>=f4z){d8z.parentNode&&d8z.parentNode.removeChild(d8z),B4z(Error(B7RX.e4CX+f4z+U7WX));}else{W8z=document.hidden;if(!c4NX.I4XX===W8z||void c4NX.I4XX===W8z){S8z=v8z.a.offsetWidth,r8z=J8z.a.offsetWidth,m8z=G8z.a.offsetWidth,h8z();}c4NX.i4XX(c4NX.n4XX);e4z=setTimeout(D8z,c4NX.r4XX(c4NX.I4XX,x3uX.c4LX));}}Q4z(G8z,function(I8z){m8z=I8z;h8z();});function h8z(){var M4NX=H5ZZ;var L7WX="536";var u7WX=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/;var X8z;if(X8z=-+B7RX.j4CX!=S8z&&-(B7RX.j4CX|M4NX.I4XX)!=r8z||-(B7RX.j4CX-M4NX.I4XX)!=S8z&&-(B7RX.j4CX-M4NX.I4XX)!=m8z||-(B7RX.j4CX*M4NX.n4XX)!=r8z&&-M4NX.n4XX!=m8z){(X8z=S8z!=r8z&&S8z!=m8z&&r8z!=m8z)||(B7RX.X4CX===w4z&&(X8z=u7WX.exec(window.navigator.userAgent),w4z=!!X8z&&(+L7WX>parseInt(X8z[B7RX.j4CX|M4NX.I4XX],M4NX.y8CX)||+L7WX===parseInt(X8z[B7RX.j4CX|M4NX.I4XX],B7RX.u3uX*M4NX.n4XX)&&x3uX.c3uX-M4NX.I4XX>=parseInt(X8z[+B7RX.U4CX],+B7RX.u3uX))),X8z=w4z&&(S8z==w8z&&r8z==w8z&&m8z==w8z||S8z==V8z&&r8z==V8z&&m8z==V8z||S8z==Q8z&&r8z==Q8z&&m8z==Q8z)),X8z=!X8z;}X8z&&(d8z.parentNode&&d8z.parentNode.removeChild(d8z),clearTimeout(e4z),R4z(k4z));}m4z(G8z,S4z(k4z,k3dX.p93X+k4z.family+e7WX));};document.body?y4z():document.addEventListener?document.addEventListener(A0UX.g3SX,function x8z(){document.removeEventListener(A0UX.g3SX,x8z);y4z();}):document.attachEvent(x7WX,function c8z(){var c7WX="interactive";if(c7WX==document.readyState||A0UX.Z3SX==document.readyState){document.detachEvent(x7WX,c8z),y4z();}});}});};function m4z(x4z,c4z){var T7WX="max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:";H5ZZ.i4XX(H5ZZ.d8CX);x4z.a.style.cssText=H5ZZ.z4XX(T7WX,c4z,W3WX.M7WX);}B7RX.W4CX===typeof module?module.exports=G4z:(window.FontFaceObserver=G4z,window.FontFaceObserver.prototype.load=G4z.prototype.load);function V4z(I4z){var z7WX="display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;";var V7WX="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";var h7WX="span";var N7WX="aria-hidden";this.a=document.createElement(k3dX.f4dX);this.a.setAttribute(N7WX,k3dX.B3dX);this.a.appendChild(document.createTextNode(I4z));this.b=document.createElement(h7WX);this.c=document.createElement(h7WX);this.h=document.createElement(h7WX);this.f=document.createElement(h7WX);this.g=-H5ZZ.n4XX;this.b.style.cssText=V7WX;this.c.style.cssText=V7WX;this.f.style.cssText=V7WX;this.h.style.cssText=z7WX;this.b.appendChild(this.h);this.c.appendChild(this.f);this.a.appendChild(this.b);this.a.appendChild(this.c);}function Q4z(A4z,C4z){var n4z;n4z=A4z;D4z(A4z.b,b4z);D4z(A4z.c,b4z);h4z(A4z);function b4z(){var L4z;L4z=n4z;h4z(L4z)&&L4z.a.parentNode&&C4z(L4z.g);}}}());(function(N8z){var k7RX=H5ZZ;var j7RX=G3CX;var p6WX=/.*/;var U6WX=/\bparent\b/;var b6WX=/xyz/;var G6WX="requestAnimationFrame";var F7WX="lib/";var i7WX="1.23";var b8z,E8z,l8z,A8z,n8z,C8z;Number.prototype.map=function(L8z,z8z,a8z,t8z){var B9CX=332;k7RX.i4XX(B9CX);return k7RX.r4XX(t8z,this,z8z,L8z,L8z,a8z,a8z);};Number.prototype.limit=function(K8z,p8z){return Math.min(p8z,Math.max(K8z,this));};Number.prototype.round=function(i8z){k7RX.i4XX(k7RX.n4XX);i8z=Math.pow(k7RX.r4XX(k7RX.I4XX,G3CX.u3uX),i8z||k7RX.I4XX);return Math.round(this*i8z)/ i8z;};Number.prototype.floor=function(){return Math.floor(this);};Number.prototype.ceil=function(){return Math.ceil(this);};Number.prototype.toInt=function(){var m9CX=333;k7RX.i4XX(m9CX);return k7RX.r4XX(this,G3CX.k4CX);};Number.prototype.toRad=function(){return this/(x3uX.W7uX-k7RX.I4XX)*Math.PI;};Number.prototype.toDeg=function(){k7RX.i4XX(G3CX.c3CX);var K0RR=k7RX.r4XX(G3CX.c6CX,k7RX.d8CX,k7RX.f8CX,k7RX.A8CX);return K0RR*this/Math.PI;};Array.prototype.erase=function(k8z){for(var u8z=this.length;u8z--;){this[u8z]===k8z&&this.splice(u8z,G3CX.j4CX|k7RX.I4XX);}return this;};Array.prototype.random=function(){return this[Math.floor(Math.random()*this.length)];};Function.prototype.bind=Function.prototype.bind||function(e8z){var r7WX="Function.prototype.bind - what is trying to be bound is not callable";var Z8z,q8z,f8z,g8z;if(G3CX.d4CX!==typeof this){throw new TypeError(r7WX);}Z8z=Array.prototype.slice.call(arguments,k7RX.n4XX);q8z=this;f8z=function(){};g8z=function(){return q8z.apply(this instanceof f8z&&e8z?this:e8z,Z8z.concat(Array.prototype.slice.call(arguments)));};f8z.prototype=this.prototype;g8z.prototype=new f8z();return g8z;};N8z.ig={game:j7RX.X4CX,debug:j7RX.X4CX,version:i7WX,global:N8z,modules:{},resources:[],ready:!(j7RX.j4CX*k7RX.n4XX),baked:!(j7RX.j4CX|k7RX.I4XX),nocache:j7RX.e4CX,ua:{},prefix:N8z.ImpactPrefix||j7RX.e4CX,lib:F7WX,_current:j7RX.X4CX,_loadQueue:[],_waitForOnload:j7RX.k4CX*k7RX.n4XX,$:function(F8z){return G3CX.q3uX==F8z.charAt(+G3CX.k4CX)?document.getElementById(F8z.substr(G3CX.j4CX|k7RX.I4XX)):document.getElementsByTagName(F8z);},$new:function(o8z){return document.createElement(o8z);},copy:function(y8z){if(!y8z||G3CX.W4CX!=typeof y8z||y8z instanceof HTMLElement||y8z instanceof ig.Class){return y8z;}if(y8z instanceof Array)for(var B8z=[],R8z=G3CX.k4CX-k7RX.I4XX,P8z=y8z.length;R8z=(K6WX|k7RX.I4XX)?U9AX.w7WX:+R6WX)+w2z]:v2z[V2z]||v2z[A0UX.V7SX+w2z]||v2z[U9AX.n7WX+w2z]||v2z[U9AX.P7WX+w2z]||v2z[U9AX.w7WX+w2z];},normalizeVendorAttribute:function(Q2z,h2z){var D2z;D2z=ig.getVendorAttribute(Q2z,h2z);!Q2z[h2z]&&D2z&&(Q2z[h2z]=D2z);},getImagePixels:function(j2z,c2z,N2z,E2z,l2z){var d6WX="getImageDataHD";var W6WX="backingStorePixelRatio";var X2z,W2z,M2z,x2z,I2z;X2z=ig.$new(x3uX.R6uX);X2z.width=j2z.width;X2z.height=j2z.height;W2z=X2z.getContext(x3uX.W6uX);ig.System.SCALE.CRISP(X2z,W2z);M2z=ig.getVendorAttribute(W2z,W6WX)||+G3CX.j4CX;ig.normalizeVendorAttribute(W2z,d6WX);x2z=j2z.width/M2z;I2z=j2z.height/M2z;X2z.width=Math.ceil(x2z);X2z.height=Math.ceil(I2z);k7RX.i4XX(k7RX.I4XX);W2z.drawImage(j2z,k7RX.z4XX(k7RX.n4XX,G3CX.k4CX),+G3CX.k4CX,x2z,I2z);return G3CX.j4CX*k7RX.n4XX===M2z?W2z.getImageData(c2z,N2z,E2z,l2z):W2z.getImageDataHD(c2z,N2z,E2z,l2z);},module:function(A2z){var f6WX="' is already defined";var y6WX="' defines nothing";var g6WX="Module '";if(ig._current){throw g6WX+ig._current.name+y6WX;}if(ig.modules[A2z]&&ig.modules[A2z].body){k7RX.F4XX(k7RX.d8CX);throw k7RX.z4XX(g6WX,A2z,f6WX);}ig._current={name:A2z,requires:[],loaded:!+G3CX.j4CX,body:G3CX.X4CX};ig.modules[A2z]=ig._current;ig._loadQueue.push(ig._current);return ig;},requires:function(){ig._current.requires=Array.prototype.slice.call(arguments);return ig;},defines:function(b2z){ig._current.body=b2z;ig._current=G3CX.X4CX;ig._initDOMReady();},addResource:function(n2z){ig.resources.push(n2z);},setNocache:function(C2z){ig.nocache=C2z?k3dX.o4dX+Date.now():G3CX.e4CX;},log:function(){},assert:function(){},show:function(){},mark:function(){},_loadScript:function(a2z,t2z){var O6WX=".js";var z2z,L2z;ig.modules[a2z]={name:a2z,requires:[],loaded:!(G3CX.j4CX*k7RX.n4XX),body:G3CX.X4CX};ig._waitForOnload++;z2z=ig.prefix+ig.lib+a2z.replace(/\./g,G3CX.J4CX)+O6WX+ig.nocache;L2z=ig.$new(x3uX.F7uX);L2z.type=x3uX.I7uX;L2z.src=z2z;L2z.onload=function(){ig._waitForOnload--;ig._execModules();};L2z.onerror=function(){var Q6WX=" required from ";var S6WX="Failed to load module ";k7RX.i4XX(G3CX.Z9CX);throw k7RX.z4XX(a2z,S6WX,t2z,Q6WX,z2z,W3WX.Y6WX);};ig.$(x3uX.i7uX)[G3CX.k4CX-k7RX.I4XX].appendChild(L2z);},_execModules:function(){var l9AX=G3CX;var l6WX="Unresolved (or circular?) dependencies. Most likely there's a name/path mismatch for one of the listed modules or a previous syntax error prevents a module from loading:\n";var t6WX=" (requires: ";var u2z;for(var f2z=!+l9AX.j4CX,K2z=l9AX.k4CX*k7RX.n4XX;K2zthis.width||p1z>this.height)){u1z=ig.system.scale;t7RX.F4XX(t7RX.I4XX);g1z=Math.floor(t7RX.z4XX(u1z,i1z));t7RX.i4XX(t7RX.I4XX);f1z=Math.floor(t7RX.r4XX(u1z,p1z));q1z=k1z?-t7RX.n4XX:t7RX.n4XX;Z1z=e1z?-t7RX.n4XX:G3CX.j4CX|t7RX.I4XX;if(k1z||e1z){ig.system.context.save(),ig.system.context.scale(q1z,Z1z);}ig.system.context.drawImage(this.data,Math.floor(F1z*i1z)%this.width*u1z,Math.floor(F1z*i1z/this.width)*p1z*u1z,g1z,f1z,ig.system.getDrawPos(o1z)*q1z-(k1z?g1z:+G3CX.k4CX),ig.system.getDrawPos(y1z)*Z1z-(e1z?f1z:+G3CX.k4CX),g1z,f1z);(k1z||e1z)&&ig.system.context.restore();ig.Image.drawCount++;}}});t7RX.i4XX(t7RX.I4XX);ig.Image.drawCount=t7RX.z4XX(t7RX.n4XX,Y7RX.k4CX);ig.Image.cache={};ig.Image.reloadCache=function(){for(var R1z in ig.Image.cache){ig.Image.cache[R1z].reload();}};});ig.baked=!H5ZZ.I4XX;ig.module(W3WX.A6WX).requires(W3WX.H6WX).defines(function(){var Q7RX=H5ZZ;var S7RX=G3CX;ig.Font=ig.Image.extend({widthMap:[],indices:[],firstChar:S7RX.b4CX|Q7RX.I4XX,alpha:+S7RX.j4CX,letterSpacing:S7RX.j4CX*Q7RX.n4XX,lineSpacing:Q7RX.I4XX,onload:function(B1z){this._loadMetrics(this.data);this.parent(B1z);},widthForString:function(P1z){if(-(G3CX.j4CX-Q7RX.I4XX)!==P1z.indexOf(G3CX.T4CX)){P1z=P1z.split(G3CX.T4CX);for(var O1z=Q7RX.I4XX,s1z=+G3CX.k4CX;s1zv5j||v5j>=this.indices.length){return+G3CX.k4CX;}w5j=ig.system.scale;V5j=this.widthMap[v5j]*w5j;Q7RX.F4XX(D9CX);var D0RR=Q7RX.z4XX(Q7RX.y8CX,Q7RX.Q8CX,Q7RX.y8CX,f5CX,Q7RX.Q8CX);Q5j=(this.height-G3CX.U4CX*D0RR)*w5j;ig.system.context.drawImage(this.data,this.indices[v5j]*w5j,G3CX.k4CX*Q7RX.n4XX,V5j,Q5j,ig.system.getDrawPos(h5j),ig.system.getDrawPos(D5j),V5j,Q5j);return this.widthMap[v5j]+this.letterSpacing;},_loadMetrics:function(j5j){var a2AX=G3CX;var I5j;Q7RX.F4XX(Q7RX.C8CX);var O0RR=Q7RX.r4XX(Q7RX.q8CX,Q7RX.d8CX,Q7RX.l8CX);this.height=j5j.height-a2AX.j4CX*O0RR;this.widthMap=[];this.indices=[];for(var M5j=ig.getImagePixels(j5j,Q7RX.I4XX,j5j.height-+a2AX.j4CX,j5j.width,+a2AX.j4CX),x5j=a2AX.k4CX-Q7RX.I4XX,X5j=Q7RX.I4XX,W5j=+a2AX.k4CX;W5jM5j.data[I5j]&&X5j&&(this.widthMap.push(X5j),this.indices.push(W5j-X5j),x5j++,X5j=Q7RX.I4XX);}this.widthMap.push(X5j);Q7RX.F4XX(Q7RX.w4XX);this.indices.push(Q7RX.z4XX(X5j,W5j));}});ig.Font.ALIGN={LEFT:S7RX.k4CX*Q7RX.n4XX,RIGHT:+S7RX.j4CX,CENTER:Q7RX.w4XX};});function getQueryVariable(u2J){var e6WX="0x145a";var L6WX="395.39";var u6WX="703.64";var o6WX="437.41";var i2J;for(var p2J=window.location.search.substring(+G3CX.j4CX).split(k3dX.k3fX),K2J=+G3CX.k4CX;K2J=y5j?(this.stop(),this.currentTrack.volume=this._volume,clearInterval(this._fadeInterval)):this.currentTrack.volume=y5j;},_endedCallback:function(){this._loop?this.play():this.next();}});ig.Sound=ig.Class.extend({path:R7RX.e4CX,volume:+R7RX.j4CX,currentClip:R7RX.X4CX,multiChannel:!+R7RX.k4CX,init:function(R5j,B5j){this.path=R5j;H5ZZ.F4XX(G3CX.E9CX);this.multiChannel=H5ZZ.z4XX(G3CX.j4CX,B5j);this.load();},load:function(P5j){ig.Sound.enabled?ig.ready?ig.soundManager.load(this.path,this.multiChannel,P5j):ig.addResource(this):P5j&&P5j(this.path,!+G3CX.k4CX);},play:function(){ig.Sound.enabled&&(this.currentClip=ig.soundManager.get(this.path),this.currentClip.volume=ig.soundManager.volume*this.volume,this.currentClip.play());},stop:function(){this.currentClip&&(this.currentClip.pause(),this.currentClip.currentTime=G3CX.k4CX-H5ZZ.I4XX);}});ig.Sound.FORMAT={MP3:{ext:d7RX.E8WX,mime:d7RX.s8WX},M4A:{ext:d7RX.Z8WX,mime:T6WX},OGG:{ext:d7RX.H8WX,mime:M6WX},WEBM:{ext:d7RX.V8WX,mime:N6WX},CAF:{ext:d7RX.j8WX,mime:h6WX}};ig.Sound.use=[ig.Sound.FORMAT.OGG,ig.Sound.FORMAT.MP3];W7RX.i4XX(W7RX.n4XX);ig.Sound.channels=W7RX.r4XX(W7RX.I4XX,R7RX.t4CX);ig.Sound.enabled=!+R7RX.k4CX;});ig.baked=!+G3CX.k4CX;ig.module(W3WX.V6WX).requires(W3WX.H6WX,W3WX.A6WX,W3WX.x6WX).defines(function(){var J3RX=G3CX;ig.Loader=ig.Class.extend({resources:[],gameClass:J3RX.X4CX,status:J3RX.k4CX|H5ZZ.I4XX,done:!+J3RX.j4CX,_unloaded:[],_drawStatus:J3RX.k4CX|H5ZZ.I4XX,_intervalId:J3RX.k4CX-H5ZZ.I4XX,_loadCallbackBound:J3RX.X4CX,init:function(s5j,T5j){this.gameClass=s5j;this.resources=T5j;this._loadCallbackBound=this._loadCallback.bind(this);for(var O5j=+J3RX.k4CX;O5jg6j?this.initMouse():+G3CX.k4CXig.system.width||E0j>ig.system.height||((G6AX.k4CX|c3RX.I4XX)>N0j+l0j||+G6AX.k4CX>E0j+l0j)||(G6AX.j4CX*c3RX.n4XX!=this.alpha&&(ig.system.context.globalAlpha=this.alpha),G6AX.k4CX-c3RX.I4XX==this.angle?this.sheet.image.drawTile(N0j,E0j,this.tile,this.sheet.width,this.sheet.height,this.flip.x,this.flip.y):(ig.system.context.save(),ig.system.context.translate(ig.system.getDrawPos(N0j+this.pivot.x),ig.system.getDrawPos(E0j+this.pivot.y)),ig.system.context.rotate(this.angle),this.sheet.image.drawTile(-this.pivot.x,-this.pivot.y,this.tile,this.sheet.width,this.sheet.height,this.flip.x,this.flip.y),ig.system.context.restore()),(G6AX.j4CX|c3RX.I4XX)!=this.alpha&&(ig.system.context.globalAlpha=G6AX.j4CX|c3RX.I4XX));}});});ig.baked=!+G3CX.k4CX;ig.module(W3WX.w1WX).requires(W3WX.n1WX,W3WX.I1WX).defines(function(){var u3RX=G3CX;var o3RX=H5ZZ;ig.Entity=ig.Class.extend({id:o3RX.I4XX,settings:{},size:{x:+u3RX.S3uX,y:u3RX.S3uX*o3RX.n4XX},offset:{x:u3RX.k4CX*o3RX.n4XX,y:+u3RX.k4CX},pos:{x:u3RX.k4CX-o3RX.I4XX,y:+u3RX.k4CX},last:{x:+u3RX.k4CX,y:u3RX.k4CX|o3RX.I4XX},vel:{x:u3RX.k4CX|o3RX.I4XX,y:o3RX.I4XX},accel:{x:+u3RX.k4CX,y:u3RX.k4CX|o3RX.I4XX},friction:{x:o3RX.I4XX,y:+u3RX.k4CX},maxVel:{x:x3uX.f5LX|o3RX.I4XX,y:u3RX.r3CX},zIndex:+u3RX.k4CX,gravityFactor:+u3RX.j4CX,standing:!(u3RX.j4CX|o3RX.I4XX),bounciness:u3RX.k4CX*o3RX.n4XX,minBounceVelocity:o3RX.e8CX,anims:{},animSheet:u3RX.X4CX,currentAnim:u3RX.X4CX,health:+u3RX.u3uX,type:+u3RX.k4CX,checkAgainst:u3RX.k4CX|o3RX.I4XX,collides:+u3RX.k4CX,_killed:!+u3RX.j4CX,slopeStanding:{min:o3RX.M8CX.toRad(),max:(k3dX.d13X-o3RX.I4XX).toRad()},init:function(A0j,b0j,n0j){this.id=++ig.Entity._lastId;this.pos.x=this.last.x=A0j;this.pos.y=this.last.y=b0j;ig.merge(this,n0j);},reset:function(L0j,a0j,z0j){var C0j;C0j=this.constructor.prototype;this.pos.x=L0j;this.pos.y=a0j;this.last.x=L0j;this.last.y=a0j;this.vel.x=C0j.vel.x;this.vel.y=C0j.vel.y;this.accel.x=C0j.accel.x;this.accel.y=C0j.accel.y;this.health=C0j.health;this._killed=C0j._killed;this.standing=C0j.standing;this.type=C0j.type;this.checkAgainst=C0j.checkAgainst;this.collides=C0j.collides;ig.merge(this,z0j);},addAnim:function(K0j,t0j,p0j,i0j){var J1WX=" to.";var P1WX="No animSheet to add the animation ";if(!this.animSheet){H5ZZ.F4XX(H5ZZ.d8CX);throw H5ZZ.r4XX(P1WX,K0j,J1WX);}t0j=new ig.Animation(this.animSheet,t0j,p0j,i0j);this.anims[K0j]=t0j;this.currentAnim||(this.currentAnim=t0j);return t0j;},update:function(){var u0j;this.last.x=this.pos.x;this.last.y=this.pos.y;this.vel.y+=ig.game.gravity*ig.system.tick*this.gravityFactor;this.vel.x=this.getNewVelocity(this.vel.x,this.accel.x,this.friction.x,this.maxVel.x);this.vel.y=this.getNewVelocity(this.vel.y,this.accel.y,this.friction.y,this.maxVel.y);u0j=ig.game.collisionMap.trace(this.pos.x,this.pos.y,this.vel.x*ig.system.tick,this.vel.y*ig.system.tick,this.size.x,this.size.y);this.handleMovementTrace(u0j);this.currentAnim&&this.currentAnim.update();},getNewVelocity:function(f0j,k0j,e0j,g0j){return k0j?(f0j+k0j*ig.system.tick).limit(-g0j,g0j):e0j?(k0j=e0j*ig.system.tick,u3RX.k4CX-H5ZZ.I4XXf0j+k0j?f0j+k0j:+u3RX.k4CX):f0j.limit(-g0j,g0j);},handleMovementTrace:function(F0j){var E6AX=H5ZZ;var Z0j,q0j;E6AX.F4XX(E6AX.n4XX);this.standing=!E6AX.z4XX(E6AX.I4XX,u3RX.j4CX);F0j.collision.y&&(u3RX.k4CX-E6AX.I4XXthis.minBounceVelocity?this.vel.y*=-this.bounciness:((u3RX.k4CX|E6AX.I4XX)this.minBounceVelocity?this.vel.x*-this.bounciness:u3RX.k4CX-E6AX.I4XX);if(F0j.collision.slope){Z0j=F0j.collision.slope;if((u3RX.k4CX|E6AX.I4XX)this.slopeStanding.min&&Z0j=this.health&&this.kill();},touches:function(y0j){return!(this.pos.x>=y0j.pos.x+y0j.size.x||this.pos.x+this.size.x<=y0j.pos.x||this.pos.y>=y0j.pos.y+y0j.size.y||this.pos.y+this.size.y<=y0j.pos.y);},distanceTo:function(R0j){var Z6AX=H5ZZ;var q9CX=337;var B0j;B0j=this.pos.x+this.size.x/+u3RX.U4CX-(R0j.pos.x+R0j.size.x/+u3RX.U4CX);Z6AX.F4XX(q9CX);var v0RR=Z6AX.r4XX(Z6AX.Q8CX,Z6AX.K8CX,Z6AX.y8CX,Z6AX.t8CX,Z6AX.R8CX,Z6AX.D8CX);R0j=this.pos.y+this.size.y/v0RR-(R0j.pos.y+R0j.size.y/+u3RX.U4CX);Z6AX.F4XX(Z6AX.b8CX);return Math.sqrt(Z6AX.z4XX(R0j,R0j,B0j,B0j));},angleTo:function(P0j){return Math.atan2(P0j.pos.y+P0j.size.y/(u3RX.U4CX|H5ZZ.I4XX)-(this.pos.y+this.size.y/(u3RX.U4CX*H5ZZ.n4XX)),P0j.pos.x+P0j.size.x/H5ZZ.w4XX-(this.pos.x+this.size.x/H5ZZ.w4XX));},check:function(){},collideWith:function(){},ready:function(){},erase:function(){}});o3RX.i4XX(o3RX.n4XX);ig.Entity._lastId=o3RX.z4XX(o3RX.I4XX,u3RX.k4CX);ig.Entity.COLLIDES={NEVER:u3RX.k4CX|o3RX.I4XX,LITE:o3RX.n4XX,PASSIVE:u3RX.U4CX-o3RX.I4XX,ACTIVE:u3RX.t4CX*o3RX.n4XX,FIXED:u3RX.Y4CX*o3RX.n4XX};ig.Entity.TYPE={NONE:o3RX.I4XX,A:u3RX.j4CX*o3RX.n4XX,B:u3RX.U4CX|o3RX.I4XX,BOTH:o3RX.P4XX};ig.Entity.checkPair=function(O0j,s0j){O0j.checkAgainst&s0j.type&&O0j.check(s0j);s0j.checkAgainst&O0j.type&&s0j.check(O0j);O0j.collides&&s0j.collides&&O0j.collides+s0j.collides>ig.Entity.COLLIDES.ACTIVE&&ig.Entity.solveCollision(O0j,s0j);};ig.Entity.solveCollision=function(T0j,H9j){var U9j;U9j=u3RX.X4CX;if(T0j.collides==ig.Entity.COLLIDES.LITE||H9j.collides==ig.Entity.COLLIDES.FIXED){U9j=T0j;}else if(H9j.collides==ig.Entity.COLLIDES.LITE||T0j.collides==ig.Entity.COLLIDES.FIXED){U9j=H9j;}T0j.last.x+T0j.size.x>H9j.last.x&&T0j.last.xH9j.last.y&&T0j.last.yr9j.minBounceVelocity?r9j.vel.y*=-r9j.bounciness:(r9j.standing=!+u3RX.k4CX,r9j.vel.y=X6AX.I4XX)):(J9j=(r9j.vel.y-G9j.vel.y)/(u3RX.U4CX*X6AX.n4XX),r9j.vel.y=-J9j,G9j.vel.y=J9j,w9j=G9j.vel.x*ig.system.tick,J9j=ig.game.collisionMap.trace(r9j.pos.x,r9j.pos.y,w9j,-v9j/+u3RX.U4CX,r9j.size.x,r9j.size.y),r9j.pos.y=J9j.pos.y,r9j=ig.game.collisionMap.trace(G9j.pos.x,G9j.pos.y,X6AX.I4XX,v9j/(u3RX.U4CX*X6AX.n4XX),G9j.size.x,G9j.size.y),G9j.pos.y=r9j.pos.y);}};});H5ZZ.i4XX(H5ZZ.n4XX);ig.baked=!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(W3WX.K2WX).defines(function(){ig.Map=ig.Class.extend({tilesize:G3CX.Y4CX|H5ZZ.I4XX,width:H5ZZ.n4XX,height:+G3CX.j4CX,data:[[]],name:G3CX.X4CX,init:function(Q9j,V9j){this.tilesize=Q9j;this.data=V9j;this.height=V9j.length;this.width=V9j[H5ZZ.I4XX].length;this.pxWidth=this.width*this.tilesize;this.pxHeight=this.height*this.tilesize;},getTile:function(X9j,W9j){var h9j,D9j;h9j=Math.floor(X9j/this.tilesize);D9j=Math.floor(W9j/this.tilesize);return+G3CX.k4CX<=h9j&&h9jthis.lastSlope&&(this.lastSlope=N9j|G3CX.k4CX*H5ZZ.n4XX);}},trace:function(t9j,z9j,n9j,C9j,i9j,u9j){var g6AX=H5ZZ;var d6AX=G3CX;var b9j,L9j;b9j={collision:{x:!(d6AX.j4CX-g6AX.I4XX),y:!(d6AX.j4CX-g6AX.I4XX),slope:!g6AX.n4XX},pos:{x:t9j,y:z9j},tile:{x:d6AX.k4CX-g6AX.I4XX,y:d6AX.k4CX|g6AX.I4XX}};L9j=Math.ceil(Math.max(Math.abs(n9j),Math.abs(C9j))/this.tilesize);if(d6AX.j4CX*g6AX.n4XXf9j?this.tilesize:R6AX.k4CX*W6AX.n4XX;k9j=Math.max(Math.floor(o9j/this.tilesize),R6AX.k4CX*W6AX.n4XX);Z9j=Math.min(Math.ceil((o9j+P9j)/this.tilesize),this.height);f9j=Math.floor((g9j.pos.x+F9j)/this.tilesize);q9j=Math.floor((y9j+F9j)/this.tilesize);if(+R6AX.k4CXq9j||q9j>=this.width){q9j=-+R6AX.j4CX;}if(+R6AX.k4CX<=f9j&&f9jthis.lastSlope||+R6AX.j4CXB9j?this.tilesize:+R6AX.k4CX;k9j=Math.max(Math.floor(g9j.pos.x/this.tilesize),W6AX.I4XX);s9j=Math.min(Math.ceil((g9j.pos.x+R9j)/this.tilesize),this.width);e9j=Math.floor((g9j.pos.y+F9j)/this.tilesize);Z9j=Math.floor((o9j+F9j)/this.tilesize);if(R6AX.k4CX-W6AX.I4XXZ9j||Z9j>=this.height){Z9j=-+R6AX.j4CX;}if(W6AX.I4XX<=e9j&&e9jthis.lastSlope||+R6AX.j4CXd3j?w3j:+J7AX.k4CX)-(m3j+U3j[J7AX.k4CX*K6AX.n4XX])*this.tilesize;v3j=h3j+J3j+(K6AX.I4XXr3j*-d3j+J3j*Y3j){return Q3j;}K6AX.F4XX(K6AX.b8CX);m3j=Math.sqrt(K6AX.z4XX(d3j,d3j,Y3j,Y3j));K6AX.F4XX(K6AX.y8CX);G3j=K6AX.z4XX(m3j,d3j);K6AX.i4XX(s9CX);m3j=K6AX.z4XX(m3j,Y3j);K6AX.F4XX(K6AX.b8CX);S3j=K6AX.r4XX(v3j,m3j,G3j,w3j);K6AX.i4XX(K6AX.I4XX);U3j=K6AX.z4XX(S3j,G3j);K6AX.F4XX(K6AX.I4XX);S3j=K6AX.r4XX(S3j,m3j);if(U3j*U3j+S3j*S3j>=r3j*r3j+J3j*J3j){return Q3j||C3RX.V2LX*K6AX.n4XX>Y3j*(v3j-J3j)-d3j*(w3j-r3j);}K6AX.F4XX(J7AX.a9CX);V3j.pos.x=K6AX.z4XX(D3j,U3j,r3j);K6AX.i4XX(J7AX.a9CX);V3j.pos.y=K6AX.z4XX(h3j,S3j,J3j);V3j.collision.slope={x:Y3j,y:d3j,nx:G3j,ny:m3j};return!+J7AX.k4CX;}return!+J7AX.j4CX;}});p3RX.i4XX(U3RX.D7CX);x9j=p3RX.z4XX(p3RX.n4XX,U3RX.j4CX,U3RX.l4CX);p3RX.i4XX(U3RX.f1CX);c9j=p3RX.r4XX(U3RX.U4CX,U3RX.l4CX);ig.CollisionMap.defaultTileDef={5:[U3RX.k4CX-p3RX.I4XX,U3RX.j4CX|p3RX.I4XX,U3RX.j4CX|p3RX.I4XX,c9j,!(U3RX.k4CX-p3RX.I4XX)],6:[U3RX.k4CX-p3RX.I4XX,c9j,U3RX.j4CX*p3RX.n4XX,x9j,!+U3RX.k4CX],7:[+U3RX.k4CX,x9j,+U3RX.j4CX,U3RX.k4CX-p3RX.I4XX,!p3RX.I4XX],3:[U3RX.k4CX|p3RX.I4XX,U3RX.j4CX*p3RX.n4XX,p3RX.n4XX,+C3RX.V2LX,!+U3RX.k4CX],4:[+U3RX.k4CX,+C3RX.V2LX,U3RX.j4CX*p3RX.n4XX,U3RX.k4CX*p3RX.n4XX,!+U3RX.k4CX],2:[p3RX.I4XX,p3RX.n4XX,p3RX.n4XX,+U3RX.k4CX,!+U3RX.k4CX],10:[+C3RX.V2LX,p3RX.n4XX,+U3RX.j4CX,+U3RX.k4CX,!+U3RX.k4CX],21:[+U3RX.k4CX,U3RX.j4CX-p3RX.I4XX,+C3RX.V2LX,+U3RX.k4CX,!(U3RX.k4CX*p3RX.n4XX)],32:[c9j,+U3RX.j4CX,+U3RX.j4CX,U3RX.k4CX|p3RX.I4XX,!(U3RX.k4CX-p3RX.I4XX)],43:[x9j,U3RX.j4CX|p3RX.I4XX,c9j,U3RX.k4CX|p3RX.I4XX,!+U3RX.k4CX],54:[U3RX.k4CX*p3RX.n4XX,p3RX.n4XX,x9j,p3RX.I4XX,!+U3RX.k4CX],27:[U3RX.k4CX*p3RX.n4XX,+U3RX.k4CX,+U3RX.j4CX,x9j,!+U3RX.k4CX],28:[+U3RX.k4CX,x9j,U3RX.j4CX-p3RX.I4XX,c9j,!(U3RX.k4CX-p3RX.I4XX)],29:[U3RX.k4CX*p3RX.n4XX,c9j,U3RX.j4CX*p3RX.n4XX,+U3RX.j4CX,!(U3RX.k4CX*p3RX.n4XX)],25:[U3RX.k4CX|p3RX.I4XX,p3RX.I4XX,U3RX.j4CX-p3RX.I4XX,+C3RX.V2LX,!+U3RX.k4CX],26:[p3RX.I4XX,+C3RX.V2LX,+U3RX.j4CX,U3RX.j4CX|p3RX.I4XX,!(U3RX.k4CX-p3RX.I4XX)],24:[U3RX.k4CX|p3RX.I4XX,+U3RX.k4CX,+U3RX.j4CX,U3RX.j4CX-p3RX.I4XX,!(U3RX.k4CX*p3RX.n4XX)],11:[U3RX.k4CX*p3RX.n4XX,U3RX.k4CX*p3RX.n4XX,+C3RX.V2LX,+U3RX.j4CX,!(U3RX.k4CX*p3RX.n4XX)],22:[C3RX.V2LX-p3RX.I4XX,+U3RX.k4CX,U3RX.j4CX*p3RX.n4XX,U3RX.j4CX*p3RX.n4XX,!(U3RX.k4CX*p3RX.n4XX)],33:[p3RX.I4XX,U3RX.k4CX*p3RX.n4XX,x9j,+U3RX.j4CX,!(U3RX.k4CX|p3RX.I4XX)],44:[x9j,U3RX.k4CX*p3RX.n4XX,c9j,U3RX.j4CX|p3RX.I4XX,!(U3RX.k4CX-p3RX.I4XX)],55:[c9j,+U3RX.k4CX,p3RX.n4XX,+U3RX.j4CX,!p3RX.I4XX],16:[p3RX.n4XX,x9j,p3RX.I4XX,p3RX.I4XX,!(U3RX.k4CX*p3RX.n4XX)],17:[+U3RX.j4CX,c9j,+U3RX.k4CX,x9j,!(U3RX.k4CX-p3RX.I4XX)],18:[U3RX.j4CX|p3RX.I4XX,+U3RX.j4CX,+U3RX.k4CX,c9j,!(U3RX.k4CX|p3RX.I4XX)],14:[U3RX.j4CX-p3RX.I4XX,A0UX.x0SX,U3RX.k4CX-p3RX.I4XX,+U3RX.k4CX,!(U3RX.k4CX-p3RX.I4XX)],15:[U3RX.j4CX-p3RX.I4XX,+U3RX.j4CX,p3RX.I4XX,C3RX.V2LX-p3RX.I4XX,!+U3RX.k4CX],13:[+U3RX.j4CX,U3RX.j4CX-p3RX.I4XX,+U3RX.k4CX,U3RX.k4CX|p3RX.I4XX,!(U3RX.k4CX|p3RX.I4XX)],8:[A0UX.x0SX,U3RX.j4CX-p3RX.I4XX,+U3RX.k4CX,+U3RX.k4CX,!p3RX.I4XX],19:[U3RX.j4CX*p3RX.n4XX,+U3RX.j4CX,+C3RX.V2LX,+U3RX.k4CX,!p3RX.I4XX],30:[x9j,U3RX.j4CX*p3RX.n4XX,p3RX.I4XX,+U3RX.k4CX,!+U3RX.k4CX],41:[c9j,+U3RX.j4CX,x9j,+U3RX.k4CX,!p3RX.I4XX],52:[U3RX.j4CX-p3RX.I4XX,p3RX.n4XX,c9j,U3RX.k4CX-p3RX.I4XX,!+U3RX.k4CX],38:[U3RX.j4CX|p3RX.I4XX,c9j,+U3RX.k4CX,U3RX.j4CX*p3RX.n4XX,!(U3RX.k4CX-p3RX.I4XX)],39:[U3RX.j4CX*p3RX.n4XX,x9j,+U3RX.k4CX,c9j,!(U3RX.k4CX-p3RX.I4XX)],40:[+U3RX.j4CX,U3RX.k4CX*p3RX.n4XX,U3RX.k4CX-p3RX.I4XX,x9j,!+U3RX.k4CX],36:[+U3RX.j4CX,A0UX.x0SX,+U3RX.k4CX,+U3RX.j4CX,!+U3RX.k4CX],37:[U3RX.j4CX-p3RX.I4XX,U3RX.k4CX-p3RX.I4XX,+U3RX.k4CX,C3RX.V2LX-p3RX.I4XX,!+U3RX.k4CX],35:[p3RX.n4XX,+U3RX.k4CX,p3RX.I4XX,U3RX.j4CX-p3RX.I4XX,!+U3RX.k4CX],9:[+U3RX.j4CX,U3RX.k4CX-p3RX.I4XX,C3RX.V2LX*p3RX.n4XX,U3RX.j4CX|p3RX.I4XX,!+U3RX.k4CX],20:[+C3RX.V2LX,p3RX.I4XX,p3RX.I4XX,+U3RX.j4CX,!(U3RX.k4CX-p3RX.I4XX)],31:[+U3RX.j4CX,+U3RX.k4CX,c9j,U3RX.j4CX-p3RX.I4XX,!(U3RX.k4CX*p3RX.n4XX)],42:[c9j,U3RX.k4CX|p3RX.I4XX,x9j,U3RX.j4CX*p3RX.n4XX,!+U3RX.k4CX],53:[x9j,+U3RX.k4CX,+U3RX.k4CX,U3RX.j4CX|p3RX.I4XX,!(U3RX.k4CX*p3RX.n4XX)],12:[+U3RX.k4CX,+U3RX.k4CX,+U3RX.j4CX,+U3RX.k4CX,!p3RX.n4XX],23:[+U3RX.j4CX,p3RX.n4XX,+U3RX.k4CX,+U3RX.j4CX,!+U3RX.j4CX],34:[+U3RX.j4CX,U3RX.k4CX*p3RX.n4XX,+U3RX.j4CX,+U3RX.j4CX,!+U3RX.j4CX],45:[p3RX.I4XX,+U3RX.j4CX,p3RX.I4XX,+U3RX.k4CX,!+U3RX.j4CX]};ig.CollisionMap.staticNoCollision={trace:function(X3j,W3j,j3j,M3j){return{collision:{x:!H5ZZ.n4XX,y:!(G3CX.j4CX|H5ZZ.I4XX),slope:!+G3CX.j4CX},pos:{x:X3j+j3j,y:W3j+M3j},tile:{x:G3CX.k4CX-H5ZZ.I4XX,y:+G3CX.k4CX}};}};});ig.baked=!+G3CX.k4CX;ig.module(W3WX.W2WX).requires(W3WX.K2WX,W3WX.H6WX).defines(function(){var G3RX=H5ZZ;var a3RX=G3CX;ig.BackgroundMap=ig.Map.extend({tiles:a3RX.X4CX,scroll:{x:G3RX.I4XX,y:a3RX.k4CX|G3RX.I4XX},distance:a3RX.j4CX|G3RX.I4XX,repeat:!+a3RX.j4CX,tilesetName:a3RX.e4CX,foreground:!G3RX.n4XX,enabled:!+a3RX.k4CX,preRender:!G3RX.n4XX,preRenderedChunks:a3RX.X4CX,chunkSize:+x3uX.f0uX,debugChunks:!G3RX.n4XX,anims:{},init:function(I3j,x3j,c3j){this.parent(I3j,x3j);this.setTileset(c3j);},setTileset:function(N3j){this.tilesetName=N3j instanceof ig.Image?N3j.path:N3j;this.tiles=new ig.Image(this.tilesetName);this.preRenderedChunks=G3CX.X4CX;},setScreenPos:function(E3j,l3j){this.scroll.x=E3j/this.distance;this.scroll.y=l3j/this.distance;},preRenderMapToChunks:function(){var n3j,C3j,L3j,a3j;n3j=this.width*this.tilesize*ig.system.scale;C3j=this.height*this.tilesize*ig.system.scale;this.chunkSize=Math.min(Math.max(n3j,C3j),this.chunkSize);L3j=Math.ceil(n3j/this.chunkSize);a3j=Math.ceil(C3j/this.chunkSize);this.preRenderedChunks=[];for(var A3j=G3CX.k4CX|G3RX.I4XX;A3j=this.height||+V7AX.k4CX>r7j){if(!this.repeat)continue;r7j=(r7j%this.height+this.height)%this.height;}for(var V7j=-+V7AX.j4CX,G7j=D7j;G7j=this.width||+V7AX.k4CX>S7j){if(!this.repeat)continue;S7j=(S7j%this.width+this.width)%this.width;}if(S7j=this.data[r7j][S7j]){(w7j=this.anims[S7j-G3RX.n4XX])?w7j.draw(G7j,m7j):this.tiles.drawTile(G7j,m7j,S7j-+V7AX.j4CX,this.tilesize);}}}}});});ig.baked=!+G3CX.k4CX;ig.module(W3WX.g2WX).requires(W3WX.I1WX,W3WX.w1WX,W3WX.R2WX,W3WX.W2WX).defines(function(){var q3RX=H5ZZ;var E3RX=G3CX;var y2WX="collision";ig.Game=ig.Class.extend({clearColor:A0UX.I4SX,gravity:E3RX.k4CX-q3RX.I4XX,screen:{x:+E3RX.k4CX,y:E3RX.k4CX|q3RX.I4XX},_rscreen:{x:E3RX.k4CX|q3RX.I4XX,y:E3RX.k4CX|q3RX.I4XX},entities:[],namedEntities:{},collisionMap:ig.CollisionMap.staticNoCollision,backgroundMaps:[],backgroundAnims:{},autoSort:!+E3RX.j4CX,sortBy:E3RX.X4CX,cellSize:+x3uX.U7uX,_deferredKill:[],_levelToLoad:E3RX.X4CX,_doSortEntities:!(E3RX.j4CX|q3RX.I4XX),staticInstantiate:function(){this.sortBy=this.sortBy||ig.Game.SORT.Z_INDEX;ig.game=this;return G3CX.X4CX;},loadLevel:function(I7j){var W7j,M7j;this.screen={x:q3RX.I4XX,y:G3CX.k4CX*q3RX.n4XX};this.entities=[];this.namedEntities={};for(var j7j=q3RX.I4XX;j7jh4j&&window.focus(),(A0UX.V2SX==D4j.type||W3WX.N1WX==D4j.type)&&this.mousemove(D4j),h4j=this.bindings[h4j]){this.actions[h4j]=!(G3CX.k4CX-H5ZZ.I4XX),this.locks[h4j]||(this.presses[h4j]=!+G3CX.k4CX,this.locks[h4j]=!+G3CX.k4CX),D4j.stopPropagation(),D4j.preventDefault();}}});});ig.baked=!+G3CX.k4CX;ig.module(W3WX.Q2WX).defines(function(){ig.Input.inject({move:new BABYLON.Vector2(G3CX.k4CX*H5ZZ.n4XX,H5ZZ.I4XX),initMouse:function(){var X7AX=G3CX;var l7AX=x3uX;var t7AX=H5ZZ;var X4j;if(!this.isUsingMouse){this.isUsingMouse=!t7AX.I4XX;X4j=this.mousewheel.bind(this);ig.system.canvas.addEventListener(l7AX.M3rX,X4j,!+X7AX.j4CX);ig.system.canvas.addEventListener(l7AX.N3rX,X4j,!+X7AX.j4CX);ig.system.canvas.addEventListener(l7AX.h5LX,this.contextmenu.bind(this),!(X7AX.j4CX*t7AX.n4XX));ig.system.canvas.addEventListener(W3WX.N1WX,this.keydown.bind(this),!t7AX.n4XX);ig.system.canvas.addEventListener(W3WX.h1WX,this.keyup.bind(this),!+X7AX.j4CX);ig.system.canvas.addEventListener(l7AX.j5LX,this.mousemove.bind(this),!+X7AX.j4CX);ig.ua.touchDevice&&(ig.system.canvas.addEventListener(A0UX.V2SX,this.keydown.bind(this),!(X7AX.j4CX-t7AX.I4XX)),ig.system.canvas.addEventListener(k3dX.D9dX,this.keyup.bind(this),!t7AX.n4XX),ig.system.canvas.addEventListener(A0UX.z2SX,this.mousemove.bind(this),!+X7AX.j4CX),ig.system.canvas.addEventListener(l7AX.V5LX,this.keydown.bind(this),!(X7AX.j4CX-t7AX.I4XX)),ig.system.canvas.addEventListener(W3WX.V1WX,this.keyup.bind(this),!(X7AX.j4CX-t7AX.I4XX)),ig.system.canvas.addEventListener(W3WX.z1WX,this.mousemove.bind(this),!+X7AX.j4CX),ig.system.canvas.style.msTouchAction=l7AX.Q6uX);}},mousemove:function(j4j){var Q7AX=G3CX;var W4j,M4j,I4j;W4j=parseInt(wgl.system.canvas.offsetWidth);parseInt(wgl.system.canvas.offsetHeight);ig.ua.mobile&&(W4j=ig.system.realWidth);W4j=ig.system.scale*(W4j/ ig.system.realWidth);M4j={left:Q7AX.k4CX|H5ZZ.I4XX,top:Q7AX.k4CX*H5ZZ.n4XX};ig.system.canvas.getBoundingClientRect&&(M4j=ig.system.canvas.getBoundingClientRect());I4j=j4j.touches?j4j.touches[+Q7AX.k4CX]:j4j;this.mouse.x=(I4j.clientX-M4j.left)/W4j;this.mouse.y=(I4j.clientY-M4j.top)/W4j;void(Q7AX.k4CX*H5ZZ.n4XX)!==typeof j4j.movementX?(this.move.x=j4j.movementX,this.move.y=j4j.movementY):(this.move.x=+Q7AX.k4CX,this.move.y=Q7AX.k4CX|H5ZZ.I4XX);}});});ig.baked=!H5ZZ.I4XX;ig.module(W3WX.Y2WX).defines(function(){var j2WX="px; left: ";var X2WX="px;";var l2WX="px; height:";var t2WX="width:";ig.DomHandler=ig.Class.extend({JQUERYAVAILABLE:!+G3CX.j4CX,init:function(){this.JQUERYAVAILABLE=this._jqueryAvailable();},_jqueryAvailable:function(){var b9CX=341;H5ZZ.F4XX(b9CX);return H5ZZ.z4XX(x3uX.o6uX,typeof jQuery);},addEvent:function(x4j,c4j,N4j,E4j){if(this.JQUERYAVAILABLE){x4j.on(c4j,N4j);}else{x4j.addEventListener(c4j,N4j,E4j);}},create:function(l4j){return this.JQUERYAVAILABLE?$(A0UX.w8SX+l4j+A0UX.P8SX):ig.$new(l4j);},getElementByClass:function(A4j){return this.JQUERYAVAILABLE?$(G3CX.P4CX+A4j):document.getElementsByClassName(A4j);},getElementById:function(b4j){return this.JQUERYAVAILABLE?G3CX.k4CX*H5ZZ.n4XX<$(b4j).length?$(b4j):G3CX.X4CX:ig.$(b4j);},appendChild:function(n4j,C4j){this.JQUERYAVAILABLE?n4j.append(C4j):n4j.appendChild(C4j);},appendToBody:function(L4j){this.JQUERYAVAILABLE?$(A0UX.T1SX).append(L4j):document.body.appendChild(L4j);},resize:function(a4j,z4j,t4j){var P3AX=H5ZZ;var K4j;if(this.JQUERYAVAILABLE){a4j.width(z4j.toFixed(+G3CX.U4CX)),a4j.height(t4j.toFixed(G3CX.U4CX*P3AX.n4XX));}else{K4j=a4j.style.visibility;P3AX.i4XX(G3CX.U9CX);var w0RR=P3AX.z4XX(P3AX.f8CX,P3AX.y8CX,P3AX.w4XX);z4j=t2WX+z4j.toFixed(w0RR)+l2WX+t4j.toFixed(G3CX.U4CX-P3AX.I4XX)+X2WX;this.attr(a4j,k3dX.m9dX,z4j);a4j.style.visibility=K4j;}},resizeOffsetLeft:function(p4j,i4j,u4j,k4j){var i3AX=G3CX;var f4j;if(this.JQUERYAVAILABLE){p4j.width(i4j.toFixed(+i3AX.U4CX)),p4j.height(u4j.toFixed(i3AX.U4CX*H5ZZ.n4XX)),p4j.css(x3uX.m1uX,k4j);}else{f4j=p4j.style.visibility;i4j=t2WX+i4j.toFixed(i3AX.U4CX-H5ZZ.I4XX)+l2WX+u4j.toFixed(i3AX.U4CX*H5ZZ.n4XX)+j2WX+k4j.toFixed(i3AX.U4CX|H5ZZ.I4XX)+X2WX;this.attr(p4j,k3dX.m9dX,i4j);p4j.style.visibility=f4j;}},resizeOffset:function(g4j,e4j,Z4j,q4j,F4j){var N3AX=G3CX;var k2WX="px; top: ";var o4j;if(this.JQUERYAVAILABLE){g4j.width(e4j.toFixed(N3AX.U4CX|H5ZZ.I4XX)),g4j.height(Z4j.toFixed(N3AX.U4CX|H5ZZ.I4XX)),g4j.css(x3uX.m1uX,q4j),g4j.css(A0UX.Q5UX,F4j);}else{o4j=g4j.style.visibility;e4j=t2WX+e4j.toFixed(+N3AX.U4CX)+l2WX+Z4j.toFixed(+N3AX.U4CX)+j2WX+q4j.toFixed(+N3AX.U4CX)+k2WX+F4j.toFixed(+N3AX.U4CX)+X2WX;this.attr(g4j,k3dX.m9dX,e4j);g4j.style.visibility=o4j;}},css:function(P4j,y4j){var R4j,B4j;if(this.JQUERYAVAILABLE){P4j.css(y4j);}else{R4j=G3CX.e4CX;for(B4j in y4j){R4j+=B4j+x3uX.a6uX+y4j[B4j]+W3WX.M7WX;}this.attr(P4j,k3dX.m9dX,R4j);}},getOffsets:function(O4j){return this.JQUERYAVAILABLE?(O4j=O4j.offset(),{left:O4j.left,top:O4j.top}):{left:O4j.offsetLeft,top:O4j.offsetTop};},attr:function(s4j,T4j,H8j){if(x3uX.o6uX===typeof H8j){return this.JQUERYAVAILABLE?s4j.attr(T4j):s4j.getAttribute(T4j);}this.JQUERYAVAILABLE?s4j.attr(T4j,H8j):s4j.setAttribute(T4j,H8j);},show:function(U8j){this.JQUERYAVAILABLE?(U8j.show(),U8j.css(x3uX.B5uX,W3WX.B2WX)):U8j&&(U8j.style?U8j.style.visibility=W3WX.B2WX:U8j[G3CX.k4CX-H5ZZ.I4XX]&&(U8j[H5ZZ.I4XX].style.visibility=W3WX.B2WX));},hide:function(Y8j){this.JQUERYAVAILABLE?(Y8j.hide(),Y8j.css(x3uX.B5uX,A0UX.w4UX)):Y8j&&(Y8j.style?Y8j.style.visibility=A0UX.w4UX:Y8j[H5ZZ.I4XX]&&(Y8j[+G3CX.k4CX].style.visibility=A0UX.w4UX));},getQueryVariable:function(r8j){var m8j;for(var S8j=window.location.search.substring(G3CX.j4CX*H5ZZ.n4XX).split(k3dX.k3fX),d8j=+G3CX.k4CX;d8jthis.maxScalingOnMobile&&(c8j=this.maxScalingOnMobile),c8jthis.maxScalingOnDesktop&&(c8j=this.maxScalingOnDesktop),c8jE8j&&(E8j=W3AX.k4CX*d3AX.n4XX);+W3AX.k4CX>l8j&&(l8j=+W3AX.k4CX);ig.domHandler.resizeOffset(A8j,Math.floor(ig.sizeHandler.mobile.actualSize.x),Math.floor(ig.sizeHandler.mobile.actualSize.y),E8j,l8j);d3AX.i4XX(d3AX.n4XX);b8j=!d3AX.r4XX(d3AX.I4XX,W3AX.j4CX);if(this.portraitMode?window.innerHeightwindow.innerWidth)if(this.enableStretchToFitOnAntiPortraitModeFlag){ig.domHandler.resizeOffset(A8j,Math.floor(window.innerWidth),Math.floor(window.innerHeight),+W3AX.k4CX,+W3AX.k4CX);}else{b8j=new BABYLON.Vector2(window.innerWidth/this.mobile.actualResolution.y,window.innerHeight/this.mobile.actualResolution.x);E8j=Math.min(b8j.x,b8j.y);b8j=this.mobile.actualResolution.y*E8j;L8j=this.mobile.actualResolution.x*E8j;E8j=Math.floor(ig.sizeHandler.windowSize.x/(W3AX.U4CX*d3AX.n4XX)-b8j/+W3AX.U4CX);l8j=Math.floor(ig.sizeHandler.windowSize.y/(W3AX.U4CX|d3AX.I4XX)-L8j/+W3AX.U4CX);+W3AX.k4CX>E8j&&(E8j=+W3AX.k4CX);(W3AX.k4CX|d3AX.I4XX)>l8j&&(l8j=d3AX.I4XX);ig.domHandler.resizeOffset(A8j,Math.floor(b8j),Math.floor(L8j),E8j,l8j);}}else{ig.domHandler.resize(A8j,Math.floor(ig.sizeHandler.mobile.actualSize.x),Math.floor(ig.sizeHandler.mobile.actualSize.y));}else{this.enableStretchToFitOnDesktopFlag?ig.domHandler.resize(A8j,Math.floor(ig.sizeHandler.desktop.actualSize.x),Math.floor(ig.sizeHandler.desktop.actualSize.y)):(E8j=Math.floor(ig.sizeHandler.windowSize.x/d3AX.w4XX-ig.sizeHandler.desktop.actualSize.x/+W3AX.U4CX),l8j=Math.floor(ig.sizeHandler.windowSize.y/(W3AX.U4CX-d3AX.I4XX)-ig.sizeHandler.desktop.actualSize.y/+W3AX.U4CX),+W3AX.k4CX>E8j&&(E8j=d3AX.I4XX),W3AX.k4CX*d3AX.n4XX>l8j&&(l8j=W3AX.k4CX|d3AX.I4XX),ig.domHandler.resizeOffset(A8j,Math.floor(ig.sizeHandler.desktop.actualSize.x),Math.floor(ig.sizeHandler.desktop.actualSize.y),E8j,l8j));}}for(var C8j in this.adsToResize){n8j=ig.domHandler.getElementById(W3AX.q3uX+C8j),A8j=ig.domHandler.getElementById(W3AX.q3uX+C8j+A0UX.d5UX),b8j=(window.innerWidth-this.adsToResize[C8j][N2WX])/(W3AX.U4CX*d3AX.n4XX)+y3AX.q9dX,E8j=(window.innerHeight-this.adsToResize[C8j][h2WX])/+W3AX.U4CX+y3AX.q9dX,n8j&&ig.domHandler.css(n8j,{width:window.innerWidth,height:window.innerHeight}),A8j&&ig.domHandler.css(A8j,{left:b8j,top:E8j});}n8j=this.dynamicClickableEntityDivs;for(C8j in n8j){A8j=Math.min(ig.sizeHandler.scaleRatioMultiplier.x,ig.sizeHandler.scaleRatioMultiplier.y);d3AX.i4XX(d3AX.W8CX);b8j=ig.domHandler.getElementById(d3AX.z4XX(C8j,W3AX.q3uX));z8j=n8j[C8j].entity_pos_x;L8j=n8j[C8j].entity_pos_y;l8j=n8j[C8j].width;E8j=n8j[C8j].height;t8j=ig.domHandler.getElementById(V0lX.e2WX);a8j=ig.domHandler.getOffsets(t8j);ig.ua.mobile?(t8j=a8j.left,a8j=a8j.top,ig.sizeHandler.disableStretchToFitOnMobileFlag?(z8j=Math.floor(t8j+z8j*ig.sizeHandler.scaleRatioMultiplier.x)+y3AX.q9dX,L8j=Math.floor(a8j+L8j*ig.sizeHandler.scaleRatioMultiplier.y)+y3AX.q9dX,l8j=Math.floor(l8j*ig.sizeHandler.scaleRatioMultiplier.x)+y3AX.q9dX,E8j=Math.floor(E8j*ig.sizeHandler.scaleRatioMultiplier.y)+y3AX.q9dX):(z8j=Math.floor(z8j*ig.sizeHandler.sizeRatio.x)+y3AX.q9dX,L8j=Math.floor(L8j*ig.sizeHandler.sizeRatio.y)+y3AX.q9dX,l8j=Math.floor(l8j*ig.sizeHandler.sizeRatio.x)+y3AX.q9dX,E8j=Math.floor(E8j*ig.sizeHandler.sizeRatio.y)+y3AX.q9dX)):(t8j=a8j.left,a8j=a8j.top,z8j=Math.floor(t8j+z8j*A8j)+y3AX.q9dX,L8j=Math.floor(a8j+L8j*A8j)+y3AX.q9dX,l8j=Math.floor(l8j*A8j)+y3AX.q9dX,E8j=Math.floor(E8j*A8j)+y3AX.q9dX);ig.domHandler.css(b8j,{"float":x3uX.m1uX,position:y3AX.W0dX,left:z8j,top:L8j,width:l8j,height:E8j,"z-index":W3AX.l4CX-d3AX.I4XX});n8j[C8j][V0lX.V2WX]&&ig.domHandler.css(b8j,{"font-size":n8j[C8j][V0lX.V2WX]*A8j+y3AX.q9dX});}},resize:function(){this.sizeCalcs();this.resizeLayers();},reorient:function(){var n2WX="Q";var I2WX="0xeff";var F2WX="1860";var i2WX="448.49";var r2WX="1160";var z2WX="changing orientation ...";var p8j,i8j,K8j,u8j,k8j;console.log(z2WX);if(ig.ua.mobile){p8j=BABYLON.Camera.FOVMODE_VERTICAL_FIXED;i8j=BABYLON.Camera.FOVMODE_VERTICAL_FIXED;K8j=!+G3CX.j4CX;this.portraitMode?(K8j=window.innerHeightwindow.innerWidth,p8j=BABYLON.Camera.FOVMODE_HORIZONTAL_FIXED,i8j=BABYLON.Camera.FOVMODE_VERTICAL_FIXED);u8j=this.domHandler.getElementById(T2WX);k8j=this.domHandler.getElementById(A0UX.g5UX);if(K8j){if(wgl.system&&wgl.system.engine.scene&&(K8j=wgl.system.engine.scene.activeCamera)){K8j.fovMode=i8j;}this.domHandler.show(u8j);this.domHandler.hide(k8j);console.log(V0lX.G2WX+window.innerWidth+G3CX.N8uX+window.innerHeight);}else{if(wgl.system&&wgl.system.engine.scene&&(K8j=wgl.system.engine.scene.activeCamera)){K8j.fovMode=p8j;}this.domHandler.show(k8j);this.domHandler.hide(u8j);console.log(V0lX.U2WX+window.innerWidth+((+r2WX,+i2WX)===+F2WX?(I2WX|H5ZZ.I4XX,n2WX):G3CX.N8uX)+window.innerHeight);}}ig.ua.mobile?(this.resize(),this.resizeAds()):this.resize();wgl.system.engine.setSize(ig.system.width,ig.system.height);wgl.system.engine.resize();},resizeAds:function(){var I8AX=H5ZZ;var p9CX=343;var g8j,e8j,Z8j,q8j;for(var f8j in this.adsToResize){I8AX.F4XX(I8AX.W8CX);g8j=ig.domHandler.getElementById(I8AX.z4XX(f8j,G3CX.q3uX));I8AX.F4XX(I8AX.d8CX);e8j=ig.domHandler.getElementById(I8AX.z4XX(G3CX.q3uX,f8j,A0UX.d5UX));Z8j=(window.innerWidth-this.adsToResize[f8j][N2WX])/(G3CX.U4CX-I8AX.I4XX)+k3dX.q9dX;I8AX.F4XX(p9CX);var l0RR=I8AX.r4XX(I8AX.Y8CX,I8AX.E8CX,I8AX.Q8CX,I8AX.J4XX);q8j=(window.innerHeight-this.adsToResize[f8j][h2WX])/(G3CX.U4CX*l0RR)+k3dX.q9dX;g8j&&ig.domHandler.css(g8j,{width:window.innerWidth,height:window.innerHeight});e8j&&ig.domHandler.css(e8j,{left:Z8j,top:q8j});}},samsungFix:function(){var r8AX=G3CX;var V8AX=H5ZZ;var R9WX="Firefox";var K9WX="Chrome";var J2WX="GT";var P2WX="Android";var w2WX="4.2";ig.ua.android&&!(w2WX*V8AX.n4XX>parseFloat(navigator.userAgent.slice(navigator.userAgent.indexOf(P2WX)+V8AX.d8CX,navigator.userAgent.indexOf(P2WX)+x3uX.c3uX*V8AX.n4XX)))&&(!((r8AX.k4CX|V8AX.I4XX)>navigator.userAgent.indexOf(J2WX))&&!(r8AX.k4CX*V8AX.n4XXS2j?B8AX.k4CX-H5ZZ.I4XX:isNaN(S2j)?+B8AX.j4CX:B8AX.j4CX*H5ZZ.n4XXh2j?G3CX.k4CX*H5ZZ.n4XX:isNaN(h2j)?+G3CX.j4CX:H5ZZ.n4XXE2j){R8AX.i4XX(R8AX.I4XX);this.soundList[N2j].volume(R8AX.z4XX(R8AX.n4XX,K8AX.k4CX));break;}isNaN(E2j)?this.soundList[N2j].volume(+K8AX.j4CX):+K8AX.j4CXu2j){this.soundList[i2j].volume(+G3CX.k4CX);break;}isNaN(u2j)?this.soundList[i2j].volume(H5ZZ.n4XX):+G3CX.j4CX=o2j?this.jukeboxPlayer.setVolume(this.minVolume):isNaN(o2j)?this.jukeboxPlayer.setVolume(G3CX.j4CX*H5ZZ.n4XX):H5ZZ.n4XX=s2j.indexOf(o9WX)&&(U1j=T2j),s2j.indexOf(u9WX)&&(U1j=T2j));H1j=new XMLHttpRequest();H1j.open(x3uX.x7uX,U1j,!+F8RX.k4CX);H1j.responseType=x3uX.c7uX;H1j.onload=function(){this.webaudio.context.decodeAudioData(H1j.response,function(m1j){this.webaudio.buffer=m1j;this.webaudio.source_loop={};this.bgmPlaying?this.play(F8RX.X4CX,!H5ZZ.I4XX):this.stop();}.bind(this),function(){var e9WX='".';var L9WX='Error decoding audio "';H5ZZ.i4XX(H5ZZ.d8CX);console.log(H5ZZ.r4XX(L9WX,U1j,e9WX));});}.bind(this);H1j.send();if((F8RX.t4CX|H5ZZ.I4XX)==H1j.readyState&&x3uX.o6uX!==typeof Audio){this.useHTML5Audio=!+F8RX.k4CX;try{new Audio();}catch(r1j){H5ZZ.F4XX(H5ZZ.w4XX);this.useHTML5Audio=!H5ZZ.r4XX(H5ZZ.I4XX,F8RX.j4CX);}this.useHTML5Audio&&(console.log(x9WX),this.webaudio=F8RX.X4CX,this.audio=new Audio(),this.isSupported=!(F8RX.k4CX*H5ZZ.n4XX),this.initHTML5Audio(d1j));}break;}},initIOSWebAudioUnlock:function(){var J1j;if(this.webaudio){webaudio=this.webaudio;J1j=function(){var p1qX=H5ZZ;var c9WX="22050";var v1j,w1j,G1j;v1j=webaudio.context;p1qX.F4XX(p1qX.w4XX);w1j=v1j.createBuffer(p1qX.z4XX(p1qX.I4XX,F8RX.j4CX),+F8RX.j4CX,p1qX.z4XX(p1qX.I4XX,c9WX,p1qX.i4XX(p1qX.n4XX)));G1j=v1j.createBufferSource();G1j.buffer=w1j;G1j.connect(v1j.destination);x3uX.o6uX===typeof G1j.start?G1j.noteOn(+F8RX.k4CX):G1j.start(+F8RX.k4CX);setTimeout(function(){(G1j.playbackState===G1j.PLAYING_STATE||G1j.playbackState===G1j.FINISHED_STATE)&&window.removeEventListener(k3dX.D9dX,J1j,!(F8RX.j4CX-H5ZZ.I4XX));}.bind(this),F8RX.k4CX*p1qX.n4XX);};H5ZZ.F4XX(H5ZZ.w4XX);window.addEventListener(k3dX.D9dX,J1j,!H5ZZ.r4XX(H5ZZ.I4XX,F8RX.j4CX));}},initHTML5Audio:function(D1j){var Q4ZX=H5ZZ;var f4ZX=k3dX;var y4ZX=W3WX;var V1j,Q1j,h1j,W1j;if(this.useHTML5Audio&&this.audio){V1j=this.audio;this.codecs={};this.codecs={mp3:!!V1j.canPlayType(y4ZX.d3WX).replace(f4ZX.S9dX,F8RX.e4CX),opus:!!V1j.canPlayType(y4ZX.y3WX).replace(f4ZX.S9dX,F8RX.e4CX),ogg:!!V1j.canPlayType(f4ZX.Q9dX).replace(f4ZX.S9dX,F8RX.e4CX),wav:!!V1j.canPlayType(A0UX.M8WX).replace(f4ZX.S9dX,F8RX.e4CX),aac:!!V1j.canPlayType(y4ZX.f3WX).replace(f4ZX.S9dX,F8RX.e4CX),m4a:!!(V1j.canPlayType(y4ZX.S3WX)||V1j.canPlayType(y4ZX.Q3WX)||V1j.canPlayType(y4ZX.f3WX)).replace(f4ZX.S9dX,F8RX.e4CX),mp4:!!(V1j.canPlayType(y4ZX.Y3WX)||V1j.canPlayType(y4ZX.t3WX)||V1j.canPlayType(y4ZX.f3WX)).replace(f4ZX.S9dX,F8RX.e4CX),weba:!!V1j.canPlayType(A0UX.r8WX).replace(f4ZX.S9dX,F8RX.e4CX)};this.is={ff:Boolean(F8RX.X4CX!=window.mozInnerScreenX&&y4ZX.T9WX.test(navigator.userAgent.toLowerCase())),ie:Boolean(document.all&&!window.opera),opera:Boolean(window.opera),chrome:Boolean(window.chrome),safari:Boolean(!window.chrome&&y4ZX.g7WX.test(navigator.userAgent.toLowerCase())&&window.getComputedStyle&&!window.globalStorage&&!window.opera)};this.playDelay=-+x3uX.B1uX;this.stopDelay=+x3uX.V8LX;this.is.chrome&&(this.playDelay=-(f4ZX.A3fX*Q4ZX.n4XX));this.is.chrome&&(this.stopDelay=Q4ZX.E8CX);this.is.ff&&(this.playDelay=-Q4ZX.E8CX);this.is.ff&&(this.stopDelay=y4ZX.Z1WX-Q4ZX.I4XX);this.is.opera&&(this.playDelay=F8RX.V8uX|Q4ZX.I4XX);this.is.opera&&(this.stopDelay=+F8RX.k4CX);for(var X1j in D1j){this.soundList[X1j]=X1j;Q1j=D1j[X1j].path;V1j=Q1j+F8RX.P4CX+ig.Sound.FORMAT.OGG.ext;Q1j=Q1j+F8RX.P4CX+ig.Sound.FORMAT.MP3.ext;h1j=F8RX.X4CX;this.codecs[ig.Sound.FORMAT.OGG.ext.toLowerCase()]?h1j=V1j:this.codecs[ig.Sound.FORMAT.MP3.ext.toLowerCase()]&&(h1j=Q1j);if(h1j){ig.ua.mobile?ig.ua.iOS&&(h1j=Q1j):(D1j=navigator.userAgent.toLowerCase(),-+F8RX.j4CX!=D1j.indexOf(A9WX)&&-(F8RX.j4CX-Q4ZX.I4XX)>=D1j.indexOf(o9WX)&&(h1j=Q1j));this.audio.addEventListener(x3uX.L7uX,function(){this.audio.error&&F8RX.t4CX-Q4ZX.I4XX===this.audio.error.code&&(this.isSupported=!(F8RX.j4CX-Q4ZX.I4XX));},!+F8RX.j4CX);this.audio.src=h1j;this.audio._pos=Q4ZX.I4XX;this.audio.preload=f4ZX.o9dX;this.audio.volume=this._volume;this.inactiveAudio=new Audio();this.inactiveAudio.src=h1j;this.inactiveAudio._pos=+F8RX.k4CX;this.inactiveAudio.preload=f4ZX.o9dX;this.inactiveAudio.volume=this._volume;this.inactiveAudio.load();W1j=function(){this._duration=this.audio.duration;this._loaded||(this._loaded=!+F8RX.k4CX);this.bgmPlaying?this.play(F8RX.X4CX,!+F8RX.k4CX):this.stop();this.audio.removeEventListener(k3dX.u9dX,W1j,!+F8RX.j4CX);}.bind(this);this.audio.addEventListener(f4ZX.u9dX,W1j,!+F8RX.j4CX);this.audio.load();break;}}}},play:function(j1j,E1j){var P5ZX=H5ZZ;var I1j,x1j,c1j,M1j,N1j;if(this.isSupported)if(this.bgmPlaying=!(F8RX.k4CX*P5ZX.n4XX),this.webaudio){if(!E1j&&this.reinitOnPlay&&this.webaudio.source_loop.buffer==this.webaudio.buffer){if(this.webaudio.source_loop._playing&&(this.webaudio.source_loop[this.webaudio.compatibility.stop](F8RX.k4CX|P5ZX.I4XX),this.webaudio.source_loop._playing=!+F8RX.j4CX,this.pausedTime+=this.webaudio.context.currentTime-this.webaudio.source_loop._startTime,this.pausedTime%=this.webaudio.source_loop.buffer.duration,this.webaudio.source_loop._startTime=F8RX.k4CX|P5ZX.I4XX,v9WX===this.webaudio.compatibility.start)){P5ZX.F4XX(P5ZX.I4XX);this.webaudio.source_once[this.webaudio.compatibility.stop](P5ZX.r4XX(P5ZX.n4XX,F8RX.k4CX));}try{this.webaudio.context.close();this.webaudio.context=new this.AudioContext();this.webaudio.gainNode=this.webaudio.context.createGain();this.webaudio.gainNode.connect(this.webaudio.context.destination);this.webaudio.gainNode.gain.value=this._volume;I1j=W3WX.C9WX;x1j=W3WX.z3WX;c1j=this.webaudio.context.createBufferSource();F8RX.d4CX!==typeof c1j.start&&(I1j=v9WX);this.webaudio.compatibility.start=I1j;F8RX.d4CX!==typeof c1j.stop&&(x1j=H9WX);this.webaudio.compatibility.stop=x1j;this.webaudio.source_loop={};P5ZX.F4XX(P5ZX.I4XX);this.play(F8RX.X4CX,!P5ZX.z4XX(P5ZX.n4XX,F8RX.k4CX));}catch(l1j){}}if(this.webaudio.buffer){if(!this.muteFlag&&(this.bgmPlaying=!+F8RX.k4CX,!this.webaudio.source_loop._playing)){this.webaudio.source_loop=this.webaudio.context.createBufferSource();this.webaudio.source_loop.buffer=this.webaudio.buffer;P5ZX.F4XX(P5ZX.I4XX);this.webaudio.source_loop.loop=!P5ZX.r4XX(P5ZX.n4XX,F8RX.k4CX);this.webaudio.source_loop.connect(this.webaudio.gainNode);if(F8RX.X4CX==j1j||isNaN(j1j)){j1j=+F8RX.k4CX,this.pausedTime&&(j1j=this.pausedTime);}this.webaudio.source_loop._startTime=this.webaudio.context.currentTime;if(v9WX===this.webaudio.compatibility.start){this.webaudio.source_once=this.webaudio.context.createBufferSource(),this.webaudio.source_once.buffer=this.webaudio.buffer,this.webaudio.source_once.connect(this.webaudio.gainNode),this.webaudio.source_once.noteGrainOn(+F8RX.k4CX,j1j,this.webaudio.buffer.duration-j1j),this.webaudio.source_loop[this.webaudio.compatibility.start](this.webaudio.context.currentTime+(this.webaudio.buffer.duration-j1j));}else{this.webaudio.source_loop[this.webaudio.compatibility.start](+F8RX.k4CX,j1j);}this.webaudio.source_loop._playing=!+F8RX.k4CX;}}else{this.bgmPlaying=!+F8RX.k4CX;}}else if(this.audio){M1j=this.audio;if(!this.muteFlag)if(this.bgmPlaying=!(F8RX.k4CX-P5ZX.I4XX),isNaN(j1j)&&(j1j=+F8RX.k4CX,this.pausedTime&&(j1j=this.pausedTime)),I1j=this._duration-j1j,this._onEndTimer&&(clearTimeout(this._onEndTimer),this._onEndTimer=F8RX.X4CX),this._onEndTimer=setTimeout(function(){var A1j;this.audio.currentTime=+F8RX.k4CX;this.audio.pause();P5ZX.i4XX(P5ZX.w4XX);this.pausedTime=P5ZX.z4XX(P5ZX.I4XX,F8RX.k4CX);if(this.inactiveAudio){A1j=this.audio;this.audio=this.inactiveAudio;this.inactiveAudio=A1j;}this.play();}.bind(this),A0UX.m5UX*I1j+this.playDelay),(F8RX.t4CX|P5ZX.I4XX)===M1j.readyState||!M1j.readyState&&navigator.isCocoonJS){M1j.readyState=P5ZX.J4XX,M1j.currentTime=j1j,M1j.muted=this.muteFlag||M1j.muted,M1j.volume=this._volume,setTimeout(function(){M1j.play();},+F8RX.k4CX);}else{clearTimeout(this._onEndTimer);this._onEndTimer=F8RX.X4CX;N1j=function(){typeof(F8RX.d4CX==this.play)&&(this.play(),M1j.removeEventListener(k3dX.u9dX,N1j,!+F8RX.j4CX));}.bind(this);P5ZX.F4XX(P5ZX.w4XX);M1j.addEventListener(k3dX.u9dX,N1j,!P5ZX.r4XX(P5ZX.I4XX,F8RX.j4CX));}}},stop:function(){var I5ZX=H5ZZ;var b1j;I5ZX.F4XX(I5ZX.I4XX);this.bgmPlaying=!I5ZX.r4XX(I5ZX.n4XX,F8RX.j4CX);if(this.isSupported)if(this.webaudio){if(this.webaudio.source_loop._playing&&(this.webaudio.source_loop[this.webaudio.compatibility.stop](F8RX.k4CX|I5ZX.I4XX),this.webaudio.source_loop._playing=!(F8RX.j4CX|I5ZX.I4XX),this.pausedTime+=this.webaudio.context.currentTime-this.webaudio.source_loop._startTime,this.pausedTime%=this.webaudio.source_loop.buffer.duration,this.webaudio.source_loop._startTime=+F8RX.k4CX,v9WX===this.webaudio.compatibility.start)){I5ZX.i4XX(I5ZX.n4XX);this.webaudio.source_once[this.webaudio.compatibility.stop](I5ZX.z4XX(I5ZX.I4XX,F8RX.k4CX));}}else if(this.audio){b1j=this.audio;+F8RX.t4CX==b1j.readyState&&(this.pausedTime=b1j.currentTime,b1j.currentTime=+F8RX.k4CX,b1j.pause(),clearTimeout(this._onEndTimer),this._onEndTimer=F8RX.X4CX);}},volume:function(n1j){if(isNaN(n1j)||F8RX.X4CX==n1j){return this.getVolume();}this.isSupported&&(this._volume=n1j,+F8RX.k4CX>this._volume?this._volume=F8RX.k4CX|H5ZZ.I4XX:H5ZZ.n4XX=q1j&&(q1j=e1j.settings.spritemap.music.start,ig.ua.android?this.forcelooped||(e1j.play(q1j,!q5ZX.I4XX),this.forcelooped=!(Z5ZX.k4CX-q5ZX.I4XX),setTimeout(function(){q5ZX.i4XX(q5ZX.w4XX);ig.soundHandler.forcelooped=!q5ZX.z4XX(q5ZX.I4XX,G3CX.j4CX);},Z1j)):e1j.setCurrentTime(q1j)));}else{D5ZX.t9WX==this.bgmPlayer.tagName&&(Z5ZX.X4CX!=window.mozInnerScreenX&&D5ZX.T9WX.test(navigator.userAgent.toLowerCase()),q1j=Boolean(window.chrome),!window.chrome&&D5ZX.g7WX.test(navigator.userAgent.toLowerCase()),Z1j=E5ZX.c8SX*q5ZX.n4XX,ig.ua.mobile&&(Z1j=+Q0WX,ig.ua.android&&(Z1j=+Y0WX,q1j&&(Z1j=+E5ZX.Y5SX))),e1j=Z5ZX.k4CX-q5ZX.I4XX,E5ZX.E8WX==ig.soundManager.format.ext&&(e1j=+D5ZX.F6WX),ig.music.currentTrack&&(q1j=ig.music.currentTrack.duration-Z1j,ig.music.currentTrack.currentTime>=q1j&&(ig.ua.android?this.forcelooped||(ig.music.currentTrack.pause(),ig.music.currentTrack.currentTime=e1j,ig.music.currentTrack.play(),this.forcelooped=!(Z5ZX.k4CX*q5ZX.n4XX),setTimeout(function(){q5ZX.i4XX(q5ZX.I4XX);ig.soundHandler.forcelooped=!q5ZX.r4XX(q5ZX.n4XX,G3CX.j4CX);},Z1j)):ig.music.currentTrack.currentTime=e1j)));}}}});});H5ZZ.F4XX(H5ZZ.w4XX);ig.baked=!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(W3WX.t0WX).defines(function(){ig.Storage=ig.Class.extend({staticInstantiate:function(){return!ig.Storage.instance?G3CX.X4CX:ig.Storage.instance;},init:function(){ig.Storage.instance=this;},isCapable:function(){return x3uX.o6uX!==typeof window.localStorage;},isSet:function(F1j){return G3CX.X4CX!==this.get(F1j);},initUnset:function(o1j,y1j){G3CX.X4CX===this.get(o1j)&&this.set(o1j,y1j);},get:function(R1j){if(!this.isCapable()){return G3CX.X4CX;}try{return JSON.parse(localStorage.getItem(R1j));}catch(B1j){return window.localStorage.getItem(R1j);}},getInt:function(P1j){return~~this.get(P1j);},getFloat:function(O1j){return parseFloat(this.get(O1j));},getBool:function(s1j){return!!this.get(s1j);},key:function(T1j){return this.isCapable()?window.localStorage.key(T1j):G3CX.X4CX;},set:function(H58,U58){if(!this.isCapable()){return G3CX.X4CX;}try{window.localStorage.setItem(H58,JSON.stringify(U58));}catch(Y58){console.log(Y58);}},setHighest:function(d58,S58){S58>this.getFloat(d58)&&this.set(d58,S58);},remove:function(m58){if(!this.isCapable()){return G3CX.X4CX;}window.localStorage.removeItem(m58);},clear:function(){if(!this.isCapable()){return G3CX.X4CX;}window.localStorage.clear();}});});ig.baked=!H5ZZ.I4XX;ig.module(W3WX.l0WX).defines(function(){Mouse=ig.Class.extend({bindings:{click:[ig.KEY.MOUSE1]},last:new BABYLON.Vector2.Zero(),init:function(){ig.input.initMouse();for(var r58 in this.bindings){this[r58]=r58;for(var J58=G3CX.k4CX|H5ZZ.I4XX;J58L58?L58:n58;},pollGamepads:function(){var I0ZX=G3CX;var a58,K58,p58;if(this.isSupported){z8RX.F4XX(z8RX.n4XX);this.leftStick.x=z8RX.z4XX(z8RX.I4XX,I0ZX.k4CX);this.leftStick.y=+I0ZX.k4CX;this.rightStick.x=+I0ZX.k4CX;this.rightStick.y=+I0ZX.k4CX;this.list=navigator.getGamepads();for(var t58 in this.bindings){for(var K58=!z8RX.n4XX,z58=+I0ZX.k4CX;z58this.getFloat(L68)&&this.set(L68,a68);},get:function(z68){return x3uX.o6uX==typeof this.tempData[z68]?G3CX.X4CX:JSON.parse(this.tempData[z68]);},getInt:function(t68){return~~this.get(t68);},getFloat:function(K68){return parseFloat(this.get(K68));},getBool:function(p68){return!!this.get(p68);},isSet:function(i68){return G3CX.X4CX!==this.get(i68);},remove:function(u68){delete this.tempData[u68];},clear:function(){this.tempData={};}});});H5ZZ.F4XX(H5ZZ.n4XX);ig.baked=!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(W3WX.Z0WX).requires(W3WX.t0WX,W3WX.l0WX,W3WX.X0WX,W3WX.k0WX,W3WX.B0WX,W3WX.j0WX,W3WX.m0WX).defines(function(){var T8RX=G3CX;var E0WX="test";var D0WX="SurviveTheRoom";IoManager=ig.Class.extend({storage:T8RX.X4CX,localStorageSupport:!(T8RX.j4CX-H5ZZ.I4XX),gamekey:D0WX,mouse:T8RX.X4CX,keyboard:T8RX.X4CX,multitouch:T8RX.X4CX,gamepad:T8RX.X4CX,init:function(){ig.multitouchInput=new ig.MultitouchInput();ig.gamepadInput=new ig.GamepadInput();this.unbindAll();this.initStorage();this.initMouse();this.initKeyboard();this.initMultitouch();},unbindAll:function(){ig.input.unbindAll();ig.gamepadInput.unbindAll();},initStorage:function(){try{window.localStorage.setItem(E0WX,E0WX);this.storage=new ig.Storage();}catch(k68){var q0WX="using fake storage";console.log(q0WX);this.storage=new ig.FakeStorage();}},initMouse:function(){this.mouse=new Mouse();},initKeyboard:function(){this.keyboard=new Keyboard();},initMultitouch:function(){ig.multitouchInput.start();},initGamepad:function(){this.gamepad=new Gamepad();},press:function(f68){return ig.input.pressed(f68)||this.gamepad&&this.gamepad.press(f68)?!(T8RX.k4CX-H5ZZ.I4XX):!+T8RX.j4CX;},held:function(g68){return ig.input.state(g68)||this.gamepad&&this.gamepad.state(g68)?!(T8RX.k4CX|H5ZZ.I4XX):!H5ZZ.n4XX;},release:function(e68){return ig.input.released(e68)||this.gamepad&&this.gamepad.released(e68)?!+T8RX.k4CX:!(T8RX.j4CX-H5ZZ.I4XX);},getClickPos:function(){return this.mouse.getPos();},getLastClickPos:function(){return this.mouse.getLast();},getTouchesPos:function(){return this.multitouch.getTouchesPos();},checkOverlap:function(Z68,q68,F68,o68,y68){return Z68.x>q68+o68||Z68.xF68+y68||Z68.yM08&&(M08=F9ZX.k8CX);F9ZX.F4XX(F9ZX.n4XX);ig.drawRoundRect(j08,+w9ZX.b0SX,+z0WX,M08,+x3uX.b2rX,F9ZX.z4XX(F9ZX.I4XX,i9ZX.u3uX),!F9ZX.I4XX,!F9ZX.n4XX);j08.globalAlpha=+i9ZX.j4CX;j08.font=r0WX;F9ZX.i4XX(F9ZX.n4XX);j08.fillText(i0WX,+w9ZX.t5UX,F9ZX.r4XX(F9ZX.I4XX,w9ZX.t5UX));j08.restore();+w9ZX.X4SX(i98*=+G3CX.U4CX)?A0UX.x0SX*i98*i98:-(x3uX.V2LX-H5ZZ.I4XX)*(--i98*(i98-H5ZZ.w4XX)-H5ZZ.n4XX);};ig.Tween.Easing.Cubic.EaseIn=function(u98){H5ZZ.i4XX(G3CX.k7CX);return H5ZZ.z4XX(u98,u98,u98);};ig.Tween.Easing.Cubic.EaseOut=function(k98){var v9CX=345;H5ZZ.F4XX(v9CX);return H5ZZ.z4XX(--k98,k98,k98,G3CX.j4CX);};ig.Tween.Easing.Cubic.EaseInOut=function(f98){return G3CX.j4CX-H5ZZ.I4XX>(f98*=+G3CX.U4CX)?(x3uX.V2LX-H5ZZ.I4XX)*f98*f98*f98:x3uX.V2LX*H5ZZ.n4XX*((f98-=+G3CX.U4CX)*f98*f98+H5ZZ.w4XX);};ig.Tween.Easing.Quartic.EaseIn=function(g98){H5ZZ.i4XX(G3CX.H6CX);return H5ZZ.r4XX(g98,g98,g98,g98);};ig.Tween.Easing.Quartic.EaseOut=function(e98){var H9CX=346;H5ZZ.F4XX(H9CX);return-H5ZZ.r4XX(--e98,e98,e98,e98,G3CX.j4CX,H5ZZ.n4XX);};ig.Tween.Easing.Quartic.EaseInOut=function(Z98){return H5ZZ.n4XX>(Z98*=G3CX.U4CX-H5ZZ.I4XX)?+x3uX.V2LX*Z98*Z98*Z98*Z98:-(x3uX.V2LX*H5ZZ.n4XX)*((Z98-=H5ZZ.w4XX)*Z98*Z98*Z98-+G3CX.U4CX);};ig.Tween.Easing.Quintic.EaseIn=function(q98){H5ZZ.i4XX(G3CX.A6CX);return H5ZZ.r4XX(q98,q98,q98,q98,q98);};ig.Tween.Easing.Quintic.EaseOut=function(F98){var A9CX=347;H5ZZ.i4XX(A9CX);return H5ZZ.z4XX(F98-=+G3CX.j4CX,F98,F98,F98,F98,G3CX.j4CX);};ig.Tween.Easing.Quintic.EaseInOut=function(o98){return G3CX.j4CX-H5ZZ.I4XX>(o98*=G3CX.U4CX-H5ZZ.I4XX)?+x3uX.V2LX*o98*o98*o98*o98*o98:A0UX.x0SX*((o98-=+G3CX.U4CX)*o98*o98*o98*o98+(G3CX.U4CX|H5ZZ.I4XX));};ig.Tween.Easing.Sinusoidal.EaseIn=function(y98){return-Math.cos(y98*Math.PI/+G3CX.U4CX)+ +G3CX.j4CX;};ig.Tween.Easing.Sinusoidal.EaseOut=function(R98){return Math.sin(R98*Math.PI/+G3CX.U4CX);};ig.Tween.Easing.Sinusoidal.EaseInOut=function(B98){return-(x3uX.V2LX-H5ZZ.I4XX)*(Math.cos(Math.PI*B98)-+G3CX.j4CX);};ig.Tween.Easing.Exponential.EaseIn=function(P98){return+G3CX.k4CX==P98?+G3CX.k4CX:Math.pow(H5ZZ.w4XX,+G3CX.u3uX*(P98-H5ZZ.n4XX));};ig.Tween.Easing.Exponential.EaseOut=function(O98){return+G3CX.j4CX==O98?+G3CX.j4CX:-Math.pow(H5ZZ.w4XX,-+G3CX.u3uX*O98)+H5ZZ.n4XX;};ig.Tween.Easing.Exponential.EaseInOut=function(s98){var Y2ZX=H5ZZ;var Q2ZX=G3CX;return+Q2ZX.k4CX==s98?+Q2ZX.k4CX:Y2ZX.n4XX==s98?+Q2ZX.j4CX:+Q2ZX.j4CX>(s98*=+Q2ZX.U4CX)?+x3uX.V2LX*Math.pow(Y2ZX.w4XX,(Q2ZX.u3uX|Y2ZX.I4XX)*(s98-(Q2ZX.j4CX|Y2ZX.I4XX))):+x3uX.V2LX*(-Math.pow(+Q2ZX.U4CX,-+Q2ZX.u3uX*(s98-Y2ZX.n4XX))+ +Q2ZX.U4CX);};ig.Tween.Easing.Circular.EaseIn=function(T98){return-(Math.sqrt(+G3CX.j4CX-T98*T98)-+G3CX.j4CX);};ig.Tween.Easing.Circular.EaseOut=function(H38){H5ZZ.F4XX(H5ZZ.J8CX);return Math.sqrt(H5ZZ.z4XX(--H38,G3CX.j4CX,H5ZZ.n4XX,H38));};ig.Tween.Easing.Circular.EaseInOut=function(U38){var d2ZX=G3CX;return d2ZX.j4CX-H5ZZ.I4XX>(U38/=+x3uX.V2LX)?-+x3uX.V2LX*(Math.sqrt(+d2ZX.j4CX-U38*U38)-+d2ZX.j4CX):x3uX.V2LX*H5ZZ.n4XX*(Math.sqrt(+d2ZX.j4CX-(U38-=d2ZX.U4CX|H5ZZ.I4XX)*U38)+ +d2ZX.j4CX);};ig.Tween.Easing.Elastic.EaseIn=function(S38){var W2ZX=G3CX;var K2ZX=H5ZZ;var m38,Y38,d38;Y38=+A0UX.c8SX;K2ZX.F4XX(K2ZX.I4XX);d38=K2ZX.r4XX(K2ZX.n4XX,W3WX.I0WX);if(+W2ZX.k4CX==S38){return+W2ZX.k4CX;}if(+W2ZX.j4CX==S38){return+W2ZX.j4CX;}d38||(d38=A0UX.Y5SX-K2ZX.I4XX);!Y38||+W2ZX.j4CX>Y38?(Y38=+W2ZX.j4CX,m38=d38/+W2ZX.t4CX):m38=d38/(+W2ZX.U4CX*Math.PI)*Math.asin(K2ZX.n4XX/Y38);K2ZX.i4XX(K2ZX.E8CX);var g0RR=K2ZX.r4XX(K2ZX.X8CX,K2ZX.k8CX,K2ZX.g8CX);return-(Y38*Math.pow(+W2ZX.U4CX,g0RR*(S38-=+W2ZX.j4CX))*Math.sin(+W2ZX.U4CX*(S38-m38)*Math.PI/d38));};ig.Tween.Easing.Elastic.EaseOut=function(G38){var P1ZX=G3CX;var I1ZX=H5ZZ;var v38,r38,J38;I1ZX.i4XX(I1ZX.w4XX);r38=I1ZX.z4XX(I1ZX.I4XX,A0UX.c8SX);J38=+W3WX.I0WX;if(P1ZX.k4CX-I1ZX.I4XX==G38){I1ZX.F4XX(I1ZX.w4XX);return I1ZX.z4XX(I1ZX.I4XX,P1ZX.k4CX);}if(P1ZX.j4CX*I1ZX.n4XX==G38){return+P1ZX.j4CX;}J38||(J38=+A0UX.Y5SX);!r38||P1ZX.j4CX-I1ZX.I4XX>r38?(r38=I1ZX.n4XX,v38=J38/I1ZX.J4XX):v38=J38/(I1ZX.w4XX*Math.PI)*Math.asin(+P1ZX.j4CX/r38);I1ZX.i4XX(I1ZX.C8CX);var J0RR=I1ZX.r4XX(I1ZX.X8CX,I1ZX.E8CX,I1ZX.P4XX);I1ZX.F4XX(I1ZX.Q8CX);var R0RR=I1ZX.z4XX(I1ZX.W8CX,I1ZX.k8CX,I1ZX.Q8CX);return r38*Math.pow(+P1ZX.U4CX,J0RR*G38)*Math.sin((P1ZX.U4CX|I1ZX.I4XX)*(G38-v38)*Math.PI/J38)+P1ZX.j4CX*R0RR;};ig.Tween.Easing.Elastic.EaseInOut=function(w38){var i1ZX=H5ZZ;var r1ZX=G3CX;var h38,V38,Q38;V38=+A0UX.c8SX;Q38=+W3WX.I0WX;if(r1ZX.k4CX-i1ZX.I4XX==w38){i1ZX.F4XX(i1ZX.I4XX);return i1ZX.z4XX(i1ZX.n4XX,r1ZX.k4CX);}if(+r1ZX.j4CX==w38){return+r1ZX.j4CX;}Q38||(Q38=+A0UX.Y5SX);!V38||r1ZX.j4CX*i1ZX.n4XX>V38?(V38=+r1ZX.j4CX,h38=Q38/(r1ZX.t4CX*i1ZX.n4XX)):h38=Q38/((r1ZX.U4CX-i1ZX.I4XX)*Math.PI)*Math.asin(+r1ZX.j4CX/V38);return+r1ZX.j4CX>(w38*=+r1ZX.U4CX)?-(x3uX.V2LX*i1ZX.n4XX)*V38*Math.pow(r1ZX.U4CX-i1ZX.I4XX,(r1ZX.u3uX|i1ZX.I4XX)*(w38-=r1ZX.j4CX-i1ZX.I4XX))*Math.sin(+r1ZX.U4CX*(w38-h38)*Math.PI/Q38):x3uX.V2LX*i1ZX.n4XX*V38*Math.pow(i1ZX.w4XX,-+r1ZX.u3uX*(w38-=i1ZX.n4XX))*Math.sin(+r1ZX.U4CX*(w38-h38)*Math.PI/Q38)+ +r1ZX.j4CX;};ig.Tween.Easing.Back.EaseIn=function(D38){var Y5WX="1.70158";var Q5WX=2.70158;var o9CX=348;H5ZZ.F4XX(o9CX);return H5ZZ.z4XX(Q5WX,Y5WX,D38,D38,D38);};ig.Tween.Easing.Back.EaseOut=function(X38){var l5WX=1.70158;var t5WX="2.70158";var u9CX=349;H5ZZ.F4XX(u9CX);return H5ZZ.z4XX(X38-=+G3CX.j4CX,X38,t5WX,H5ZZ.n4XX,X38,l5WX,G3CX.j4CX,H5ZZ.I4XX);};ig.Tween.Easing.Back.EaseInOut=function(W38){var x1ZX=H5ZZ;var j5WX="2.5949095";var X5WX="3.5949095";return(G3CX.j4CX|x1ZX.I4XX)>(W38*=G3CX.U4CX*x1ZX.n4XX)?A0UX.x0SX*W38*W38*(+X5WX*W38-+j5WX):x3uX.V2LX*x1ZX.n4XX*((W38-=G3CX.U4CX*x1ZX.n4XX)*W38*(+X5WX*W38+ +j5WX)+G3CX.U4CX*x1ZX.n4XX);};ig.Tween.Easing.Bounce.EaseIn=function(j38){var u1ZX=H5ZZ;u1ZX.i4XX(G3CX.M3CX);var t0RR=u1ZX.r4XX(u1ZX.l8CX,u1ZX.d8CX,u1ZX.S8CX,u1ZX.p8CX);u1ZX.F4XX(G3CX.L9CX);var B0RR=u1ZX.z4XX(G3CX.b3CX,u1ZX.Q8CX,u1ZX.y8CX,u1ZX.y8CX,u1ZX.K8CX,u1ZX.y8CX);return t0RR-ig.Tween.Easing.Bounce.EaseOut(G3CX.j4CX*B0RR-j38);};ig.Tween.Easing.Bounce.EaseOut=function(M38){var v1ZX=H5ZZ;var s5WX="0.984375";var q5WX="2.625";var E5WX="0.9375";var D5WX=2.25;var m5WX="2.75";var B5WX="7.5625";var k5WX=2.75;return(M38/=G3CX.j4CX-v1ZX.I4XX)<(G3CX.j4CX|v1ZX.I4XX)/k5WX?+B5WX*M38*M38:M38<(G3CX.U4CX-v1ZX.I4XX)/+m5WX?B5WX*v1ZX.n4XX*(M38-=+x3uX.M2LX/+m5WX)*M38+A0UX.l4SX*v1ZX.n4XX:M38I38?+x3uX.V2LX*ig.Tween.Easing.Bounce.EaseIn(+G3CX.U4CX*I38):x3uX.V2LX*H5ZZ.n4XX*ig.Tween.Easing.Bounce.EaseOut((G3CX.U4CX-H5ZZ.I4XX)*I38-+G3CX.j4CX)+(x3uX.V2LX-H5ZZ.I4XX);};});ig.baked=!+G3CX.k4CX;ig.module(f5WX.a5WX).defines(function(){ig.UrlParameters=ig.Class.extend({init:function(){var o5WX="ad";var A5WX="stats";var H5WX="wgl debug mode";var v5WX="debugwgl";var C5WX="debug mode";var p5WX="debug";var U5WX="webview mode";var b5WX="iPhone mode";var G5WX="iphone";var x38;switch(getQueryVariable(G5WX)){case k3dX.B3dX:ig.ua.iPhone=!(G3CX.k4CX-H5ZZ.I4XX),console.log(b5WX);}x38=getQueryVariable(W3WX.d0WX);if(x38)switch(x38){case k3dX.B3dX:ig.ua.is_uiwebview=!(G3CX.k4CX|H5ZZ.I4XX),console.log(U5WX);}if(x38=getQueryVariable(p5WX))switch(x38){case k3dX.B3dX:ig.game.showDebugMenu(),console.log(C5WX);}if(x38=getQueryVariable(v5WX))switch(x38){case k3dX.B3dX:wgl.debug.debug=!+G3CX.k4CX,console.log(H5WX);}switch(getQueryVariable(x3uX.c3rX)){case A5WX:ig.game.resetPlayerStats(),ig.game.endGame();}getQueryVariable(o5WX);}});});H5ZZ.i4XX(H5ZZ.w4XX);ig.baked=!H5ZZ.r4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(f5WX.u5WX).requires(W3WX.I1WX).defines(function(){ig.Director=ig.Class.extend({init:function(c38,N38){this.game=c38;this.levels=[];H5ZZ.i4XX(H5ZZ.w4XX);this.currentLevel=H5ZZ.r4XX(H5ZZ.I4XX,G3CX.k4CX);this.append(N38);},loadLevel:function(E38){var k1ZX=H5ZZ;var A38;for(var l38 in ig.sizeHandler.dynamicClickableEntityDivs){k1ZX.i4XX(k1ZX.W8CX);A38=ig.domHandler.getElementById(k1ZX.z4XX(l38,G3CX.q3uX));ig.domHandler.hide(A38);}this.currentLevel=E38;this.game.loadLevel(this.levels[E38]);k1ZX.i4XX(k1ZX.I4XX);return!k1ZX.r4XX(k1ZX.n4XX,G3CX.k4CX);},loadLevelWithoutEntities:function(b38){this.currentLevel=b38;this.game.loadLevelWithoutEntities(this.levels[b38]);H5ZZ.i4XX(H5ZZ.I4XX);return!H5ZZ.z4XX(H5ZZ.n4XX,G3CX.k4CX);},append:function(n38){newLevels=[];return G3CX.W4CX===typeof n38?(n38.constructor===[].constructor?newLevels=n38:newLevels[+G3CX.k4CX]=n38,this.levels=this.levels.concat(newLevels),!+G3CX.k4CX):!(G3CX.j4CX-H5ZZ.I4XX);},nextLevel:function(){return this.currentLevel+H5ZZ.n4XXthis.getFloat(q38)&&this.set(q38,F38);},remove:function(o38){if(!this.isCapable()){return G3CX.X4CX;}window.localStorage.removeItem(o38);},clear:function(){if(!this.isCapable()){return G3CX.X4CX;}window.localStorage.clear();}});});H5ZZ.i4XX(H5ZZ.n4XX);ig.baked=!H5ZZ.r4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(f5WX.e5WX).requires(W3WX.g2WX,W3WX.g1WX).defines(function(){var y38;y38=function(R38,B38,P38,O38){this.x=R38;this.y=B38;this.id=P38;this.state=O38;};ig.Input.inject({touches:{},delayedTouchUp:[],fingerCount:[],initMouse:function(){var h6ZX=H5ZZ;var N6ZX=x3uX;var M6ZX=G3CX;var s38;if(!this.isUsingMouse)if(this.isUsingMouse=!+M6ZX.k4CX,N6ZX.o6uX!=typeof ios&&ios){this._touchInput=new native.TouchInput(),this._touchInput.touchStart(this.multitouchstart.bind(this)),this._touchInput.touchEnd(this.multitouchend.bind(this)),this._touchInput.touchMove(this.multitouchmove.bind(this));}else{s38=this.mousewheel.bind(this);h6ZX.F4XX(h6ZX.w4XX);ig.system.canvas.addEventListener(N6ZX.M3rX,s38,!h6ZX.z4XX(h6ZX.I4XX,M6ZX.j4CX));h6ZX.F4XX(h6ZX.n4XX);ig.system.canvas.addEventListener(N6ZX.N3rX,s38,!h6ZX.r4XX(h6ZX.I4XX,M6ZX.j4CX));ig.system.canvas.addEventListener(N6ZX.h5LX,this.contextmenu.bind(this),!(M6ZX.j4CX*h6ZX.n4XX));ig.system.canvas.addEventListener(W3WX.N1WX,this.keydown.bind(this),!+M6ZX.j4CX);ig.system.canvas.addEventListener(W3WX.h1WX,this.keyup.bind(this),!+M6ZX.j4CX);ig.system.canvas.addEventListener(N6ZX.j5LX,this.mousemove.bind(this),!(M6ZX.j4CX|h6ZX.I4XX));ig.system.canvas.addEventListener(A0UX.V2SX,this.touchEvent.bind(this),!(M6ZX.j4CX-h6ZX.I4XX));ig.system.canvas.addEventListener(A0UX.z2SX,this.touchEvent.bind(this),!(M6ZX.j4CX*h6ZX.n4XX));ig.system.canvas.addEventListener(k3dX.D9dX,this.touchEvent.bind(this),!+M6ZX.j4CX);ig.system.canvas.addEventListener(A0UX.r2SX,this.touchEvent.bind(this),!(M6ZX.j4CX|h6ZX.I4XX));}},keydown:function(T38){this.parent(T38);W3WX.N1WX==T38.type&&!this.touches.mouse&&(this.touches.mouse=new y38(this.mouse.x,this.mouse.y,x3uX.v7uX,x3uX.F3rX));},keyup:function(H78){this.parent(H78);if(W3WX.h1WX==H78.type&&!this.actions[this.bindings[H5ZZ.w4XX==H78.button?ig.KEY.MOUSE1:ig.KEY.MOUSE2]]&&this.touches.mouse){this.touches.mouse.state=x3uX.M0uX,this.touches.mouse.x=this.mouse.x,this.touches.mouse.y=this.mouse.y,this.delayedTouchUp.push(x3uX.v7uX);}},mousemove:function(U78){this.parent(U78);this.state(x3uX.Y6uX)&&this.touches.mouse&&(this.touches.mouse.x=this.mouse.x,this.touches.mouse.y=this.mouse.y);},clearPressed:function(){this.parent();this.ent=ig.game.entities;for(var Y78=this.delayedTouchUp.length;Y78--;){delete this.touches[ig.input.delayedTouchUp[Y78]];}this.delayedTouchUp=[];this.multitouchState();},touchedEntity:function(){var m78,r78;for(var d78=G3CX.k4CX*H5ZZ.n4XX;d78this.ent[d78].pos.x&&m78this.ent[d78].pos.y&&r78this.ent[h78].pos.x&&X78this.ent[h78].pos.y&&W78this.ent[j78].pos.x&&I78this.ent[j78].pos.y&&M78this.ent[A78].pos.x&&n78this.ent[A78].pos.y&&L78=ig.system.width?(this.size.x=+k3dX.K0dX,this.size.y=+x3uX.D2rX):(this.size.x=+k3dX.W5dX,this.size.y=G3CX.C1CX);this.pos.x=(ig.system.width-this.size.x)/+G3CX.U4CX;this.pos.y=-this.size.y-+x3uX.D2rX;this.endPosY=(ig.system.height-this.size.y)/+G3CX.U4CX;i78=this.tween({pos:{y:this.endPosY}},+x3uX.V2LX,{easing:ig.Tween.Easing.Bounce.EaseIn});u78=this.tween({},+f5WX.M5WX,{onComplete:function(){ig.game.director.loadLevel(ig.game.director.currentLevel);}});i78.chain(u78);i78.start();this.currentAnim=this.anims.idle;},createClickableLayer:function(){var h5WX="branding-splash";var N5WX="Build clickable layer";console.log(N5WX);this.checkClickableLayer(h5WX,_SETTINGS.Branding.Logo.Link,_SETTINGS.Branding.Logo.NewWindow);},doesClickableLayerExist:function(f78){for(k in dynamicClickableEntityDivs)if(k==f78){return!+G3CX.k4CX;}H5ZZ.i4XX(H5ZZ.n4XX);return!H5ZZ.r4XX(H5ZZ.I4XX,G3CX.j4CX);},checkClickableLayer:function(g78,e78,Z78){x3uX.o6uX==typeof wm&&(this.doesClickableLayerExist(g78)?(ig.game.showOverlay([g78]),$(G3CX.q3uX+g78).find(f5WX.V5WX).attr(A0UX.N8SX,e78)):this.createClickableOutboundLayer(g78,e78,f5WX.z5WX,Z78));},createClickableOutboundLayer:function(F78,R78,B78,P78){var d6ZX=f5WX;var J7ZX=G3CX;var P7ZX=k3dX;var q78,o78,y78;q78=ig.$new(P7ZX.f4dX);q78.id=F78;document.body.appendChild(q78);q78=$(J7ZX.q3uX+q78.id);q78.css(P7ZX.t7fX,x3uX.m1uX);q78.css(x3uX.L0uX,P7ZX.W0dX);if(ig.ua.mobile){o78=window.innerHeight/mobileHeight;y78=window.innerWidth/mobileWidth;q78.css(x3uX.m1uX,this.pos.x*y78);q78.css(A0UX.Q5UX,this.pos.y*o78);q78.css(P7ZX.T8UX,this.size.x*y78);q78.css(P7ZX.s6dX,this.size.y*o78);}else{o78=w/(J7ZX.U4CX*H5ZZ.n4XX)-destW/(J7ZX.U4CX-H5ZZ.I4XX),y78=h/(J7ZX.U4CX-H5ZZ.I4XX)-destH/(J7ZX.U4CX*H5ZZ.n4XX),console.log(o78,y78),q78.css(x3uX.m1uX,o78+this.pos.x*multiplier),q78.css(A0UX.Q5UX,y78+this.pos.y*multiplier),q78.css(P7ZX.T8UX,this.size.x*multiplier),q78.css(P7ZX.s6dX,this.size.y*multiplier);}P78?q78.html(d6ZX.r5WX+R78+d6ZX.i5WX+B78+d6ZX.F5WX):q78.html(d6ZX.I5WX+R78+d6ZX.i5WX+B78+d6ZX.F5WX);dynamicClickableEntityDivs[F78]={};dynamicClickableEntityDivs[F78].width=this.size.x*multiplier;dynamicClickableEntityDivs[F78].height=this.size.y*multiplier;dynamicClickableEntityDivs[F78].entity_pos_x=this.pos.x;dynamicClickableEntityDivs[F78].entity_pos_y=this.pos.y;},draw:function(){var w5WX="powered by MarketJS.com";var n5WX="12px Arial";ig.system.context.fillStyle=k3dX.P43X;ig.system.context.fillRect(H5ZZ.I4XX,+G3CX.k4CX,ig.system.width,ig.system.height);ig.system.context.fillStyle=W3WX.z6WX;ig.system.context.font=n5WX;ig.system.context.textAlign=x3uX.m1uX;(k3dX.K0dX|H5ZZ.I4XX)>=ig.system.width?ig.system.context.fillText(w5WX,ig.system.width-+x3uX.n3rX,ig.system.height-+G3CX.e3uX):ig.system.context.fillText(w5WX,ig.system.width-f5WX.P5WX*H5ZZ.n4XX,ig.system.height-+G3CX.e3uX);this.parent();this.splash&&ig.system.context.drawImage(this.splash.data,+G3CX.k4CX,H5ZZ.I4XX,this.splash.data.width,this.splash.data.height,this.pos.x,this.pos.y,this.size.x,this.size.y);}});});this.END_BRANDING_SPLASH;ig.baked=!+G3CX.k4CX;ig.module(f5WX.J5WX).defines(function(){var K4WX="BinaryHeap";BinaryHeap=ig.Class.extend({content:[],getValue:G3CX.X4CX,minHeap:!H5ZZ.I4XX,tagName:K4WX,init:function(O78,s78){this.getValue=O78;s78&&(this.minHeap=!(G3CX.j4CX-H5ZZ.I4XX));},push:function(T78){this.content.push(T78);this.sinkDown(this.content.length-(G3CX.j4CX-H5ZZ.I4XX));},pop:function(){var H48,U48;H48=this.content[H5ZZ.I4XX];U48=this.content.pop();+G3CX.k4CXthis.getValue(S48)?this.sinkDown(Y48):this.bubbleUp(Y48));},size:function(){return this.content.length;},rescoreElement:function(m48){this.sinkDown(this.content.indexOf(m48));},sinkDown:function(r48){var u7ZX=H5ZZ;var e9CX=351;var J48,v48;for(var G48=this.content[r48];G3CX.k4CX*u7ZX.n4XXthis.getValue(v48)){this.content[J48]=G48,this.content[r48]=v48,r48=J48;}else break;}},bubbleUp:function(X48){var A7ZX=G3CX;var H7ZX=H5ZZ;var x9CX=352;var Q48,V48,w48,D48;for(var W48=this.content.length,j48=this.content[X48],h48=this.getValue(j48);;){H7ZX.i4XX(x9CX);Q48=H7ZX.z4XX(A7ZX.j4CX,H7ZX.n4XX,X48,A7ZX.j4CX);H7ZX.F4XX(A7ZX.U1CX);V48=H7ZX.z4XX(A7ZX.j4CX,Q48);w48=A7ZX.X4CX;V48h48&&(w48=V48));if(Q48(A7ZX.X4CX===w48?h48:D48)){w48=Q48;}if(A7ZX.X4CX!==w48){this.content[X48]=this.content[w48],this.content[w48]=j48,X48=w48;}else break;}},empty:function(){for(;+G3CX.k4CX>>H5ZZ.n4XX)-(this.size.x>>>G3CX.j4CX*H5ZZ.n4XX),console.log(D4WX)),_SETTINGS.Branding.Logo.LinkEnabled&&(this.link=_SETTINGS.Branding.Logo.Link,this.newWindow=_SETTINGS.Branding.Logo.NewWindow,this.clickableLayer=new ClickableDivLayer(this));}else{this.kill();return;}this.div_layer_name=Z48.div_layer_name?Z48.div_layer_name:f5WX.m4WX;}},show:function(){var o48;o48=ig.domHandler.getElementById(G3CX.q3uX+this.div_layer_name);ig.domHandler.show(o48);},hide:function(){var y48;y48=ig.domHandler.getElementById(G3CX.q3uX+this.div_layer_name);ig.domHandler.hide(y48);},clicked:function(){},clicking:function(){},released:function(){}});});ig.baked=!+G3CX.k4CX;ig.module(f5WX.E4WX).requires(W3WX.w1WX,f5WX.X4WX).defines(function(){EntityBrandingLogoPlaceholder=ig.Entity.extend({gravityFactor:G3CX.k4CX*H5ZZ.n4XX,size:{x:H5ZZ.p8CX,y:H5ZZ.p8CX},_wmDrawBox:!H5ZZ.I4XX,_wmBoxColor:f5WX.q4WX,init:function(B48,P48,R48){var w3ZX=H5ZZ;var U4WX="default ... centralize false";var b4WX="centralize false";var G4WX="centralize true";var a4WX="settings.centralize:";var s4WX="settings found ... using that div layer name";this.parent(B48,P48,R48);if(R48)switch(console.log(s4WX),B48=R48.div_layer_name,console.log(a4WX,R48.centralize),R48.centralize){case k3dX.B3dX:console.log(G4WX);centralize=!+G3CX.k4CX;break;case k3dX.m3dX:console.log(b4WX);w3ZX.F4XX(w3ZX.w4XX);centralize=!w3ZX.z4XX(w3ZX.I4XX,G3CX.j4CX);break;default:console.log(U4WX),centralize=!(G3CX.j4CX|w3ZX.I4XX);}else{B48=f5WX.m4WX,centralize=!(G3CX.j4CX|w3ZX.I4XX);}if(x3uX.o6uX==typeof wm){if(_SETTINGS.Branding.Logo.Enabled)try{ig.game.spawnEntity(EntityButtonBrandingLogo,this.pos.x,this.pos.y,{div_layer_name:B48,centralize:centralize});}catch(O48){console.log(O48);}this.kill();}}});});H5ZZ.i4XX(H5ZZ.w4XX);ig.baked=!H5ZZ.r4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(f5WX.p4WX).requires(f5WX.R4WX,f5WX.S4WX).defines(function(){var v4WX="moregames";var x0CX=750;EntityButtonMoreGames=EntityButton.extend({type:ig.Entity.TYPE.A,gravityFactor:+G3CX.k4CX,logo:new ig.AnimationSheet(f5WX.C4WX,H5ZZ.O3CX,H5ZZ.Q3CX),size:{x:x3uX.U7uX-H5ZZ.I4XX,y:+f5WX.B4WX},zIndex:x0CX,clickableLayer:G3CX.X4CX,link:G3CX.X4CX,newWindow:!(G3CX.j4CX-H5ZZ.I4XX),div_layer_name:f5WX.Q4WX,name:v4WX,init:function(T48,H88,s48){this.parent(T48,H88,s48);ig.global.wm||(this.div_layer_name=s48.div_layer_name?s48.div_layer_name:f5WX.Q4WX,_SETTINGS.MoreGames.Enabled?(this.anims.idle=new ig.Animation(this.logo,G3CX.k4CX-H5ZZ.I4XX,[G3CX.k4CX*H5ZZ.n4XX],!(G3CX.k4CX-H5ZZ.I4XX)),this.currentAnim=this.anims.idle,_SETTINGS.MoreGames.Link&&(this.link=_SETTINGS.MoreGames.Link),_SETTINGS.MoreGames.NewWindow&&(this.newWindow=_SETTINGS.MoreGames.NewWindow),this.clickableLayer=new ClickableDivLayer(this)):this.kill());},show:function(){var U88;U88=ig.domHandler.getElementById(G3CX.q3uX+this.div_layer_name);ig.domHandler.show(U88);},hide:function(){var Y88;Y88=ig.domHandler.getElementById(G3CX.q3uX+this.div_layer_name);ig.domHandler.hide(Y88);},clicked:function(){},clicking:function(){},released:function(){}});});ig.baked=!+G3CX.k4CX;ig.module(f5WX.H4WX).requires(W3WX.w1WX).defines(function(){var u4WX="media/graphics/opening/title.png";var o4WX="media/graphics/opening/m_icon.png";var A4WX="media/graphics/opening/shield.png";EntityOpeningShield=ig.Entity.extend({size:{x:+A0UX.G0SX,y:H5ZZ.z8CX},move:G3CX.k4CX-H5ZZ.I4XX,mIconAnim:+G3CX.k4CX,shieldAnim:H5ZZ.I4XX,titleAnim:+G3CX.k4CX,shieldImage:new ig.Image(A4WX),mIconImage:new ig.Image(o4WX),titleImage:new ig.Image(u4WX),init:function(d88,S88,m88){this.parent(d88,S88,m88);},ready:function(){if(!ig.wm)if(_SETTINGS.DeveloperBranding.Splash.Enabled){this.initTimer=new ig.Timer(A0UX.F5SX);try{ig.soundHandler.playSound(ig.soundHandler.SOUNDID.openingSound);}catch(r88){console.log(r88);}}else{ig.game.director.nextLevel(),ig.system.context.globalAlpha=G3CX.j4CX*H5ZZ.n4XX,this.kill();}},update:function(){this.parent();this.updateOriginalShieldOpening();},draw:function(){this.parent();ig.global.wm||(this.nextLevelTimer&&+G3CX.k4CX>this.nextLevelTimer.delta()&&(ig.system.context.globalAlpha=-this.nextLevelTimer.delta()),this.drawOriginalShieldOpening());},updateOriginalShieldOpening:function(){var v3ZX=G3CX;var C3ZX=H5ZZ;this.initTimer&&C3ZX.I4XXthis.shieldAnim?(this.shieldAnim++,this.sheildTimer.reset()):(this.sheildTimer=v3ZX.X4CX,this.moveTimer=new ig.Timer(+A0UX.B5SX),this.mIconTimer=new ig.Timer(f5WX.L4WX),this.titleTimer=new ig.Timer(f5WX.e4WX-C3ZX.I4XX)));this.moveTimer&&(v3ZX.k4CX|C3ZX.I4XX)this.mIconAnim?(this.mIconAnim++,this.moveTimer.reset()):this.mIconTimer=v3ZX.X4CX);this.titleTimer&&(v3ZX.k4CX|C3ZX.I4XX)this.titleAnim?(this.titleAnim++,this.titleTimer.reset()):(this.titleTimer=v3ZX.X4CX,this.nextLevelTimer=new ig.Timer(+v3ZX.j4CX)));this.nextLevelTimer&&+v3ZX.k4CX=w88;w88+=s3ZX.j4CX|q3ZX.I4XX){J88.lineTo(+s3ZX.k4CX+ +k3dX.X53X*Math.cos(+s3ZX.U4CX*w88*Math.PI/+A0UX.G0SX),(s3ZX.k4CX|q3ZX.I4XX)+(k3dX.X53X|q3ZX.I4XX)*Math.sin(+s3ZX.U4CX*w88*Math.PI/q3ZX.z8CX)),V88++,+s3ZX.U4CX==V88&&(V88=q3ZX.I4XX,J88.lineTo(q3ZX.I4XX,s3ZX.k4CX|q3ZX.I4XX));}J88.translate(-G88,-v88);G88=J88.createRadialGradient(G88,v88,+x3uX.f5LX,G88,v88,+k3dX.i3fX);G88.addColorStop(+s3ZX.k4CX,c4WX);G88.addColorStop(+s3ZX.j4CX,T4WX);J88.fillStyle=G88;J88.fill();J88.restore();}this.shieldImage.drawTile(ig.system.width/q3ZX.w4XX-+M4WX,s3ZX.k4CX*q3ZX.n4XX-(N4WX*q3ZX.n4XX-ig.system.height)/(s3ZX.U4CX-q3ZX.I4XX),this.shieldAnim,s3ZX.s6CX,c0CX);this.moveTimer&&(this.mIconImage.drawTile(ig.system.width/+s3ZX.U4CX-(W3WX.E1WX-q3ZX.I4XX),ig.system.height/q3ZX.w4XX-+k3dX.G43X,this.mIconAnim,+A0UX.h0UX,+f5WX.P5WX),this.titleImage.drawTile(ig.system.width/+s3ZX.U4CX-(A0UX.Z1SX|q3ZX.I4XX),ig.system.height/(s3ZX.U4CX|q3ZX.I4XX)+s3ZX.r3CX,this.titleAnim,+h4WX,W3WX.X1WX-q3ZX.I4XX));ig.system.context.globalAlpha=q3ZX.n4XX;}});});H5ZZ.F4XX(H5ZZ.I4XX);ig.baked=!H5ZZ.r4XX(H5ZZ.n4XX,G3CX.k4CX);ig.module(f5WX.V4WX).requires(W3WX.w1WX).defines(function(){var i4WX="kittyopeningSound";var r4WX="media/graphics/opening/kittytitle.png";var z4WX="media/graphics/opening/kitty.png";EntityOpeningKitty=ig.Entity.extend({size:{x:H5ZZ.z8CX,y:A0UX.G0SX|H5ZZ.I4XX},kittyAnim:-(G3CX.j4CX-H5ZZ.I4XX),kittyImage:new ig.Image(z4WX),kittyTitleImage:new ig.Image(r4WX),soundKey:i4WX,init:function(Q88,h88,D88){this.parent(Q88,h88,D88);},ready:function(){if(!ig.wm)if(_SETTINGS.DeveloperBranding.Splash.Enabled){this.initTimer=new ig.Timer(A0UX.F5SX);try{ig.soundHandler.sfxPlayer.play(this.soundKey);}catch(X88){console.log(X88);}}else{ig.game.director.nextLevel(),ig.system.context.globalAlpha=+G3CX.j4CX,this.kill();}},update:function(){this.parent();this.updateKittyOpening();},draw:function(){this.parent();ig.global.wm||(this.nextLevelTimer&&(G3CX.k4CX|H5ZZ.I4XX)>this.nextLevelTimer.delta()&&(ig.system.context.globalAlpha=-this.nextLevelTimer.delta()),this.drawKittyOpening());},updateKittyOpening:function(){var j3ZX=G3CX;var F4WX=0.15;this.initTimer&&j3ZX.k4CX*H5ZZ.n4XXthis.kittyAnim?(this.kittyAnim++,this.kittyTimer.reset()):(this.kittyTimer=j3ZX.X4CX,this.nextLevelTimer=new ig.Timer(j3ZX.U4CX-H5ZZ.I4XX)));this.nextLevelTimer&&+j3ZX.k4CX>>t3ZX.j4CX*l3ZX.n4XX)-(this.kittyImage.width>>>t3ZX.l4CX-l3ZX.I4XX),(ig.system.height>>>t3ZX.j4CX*l3ZX.n4XX)-(this.kittyImage.height>>>l3ZX.w4XX),this.kittyAnim,w4WX*l3ZX.n4XX,t3ZX.Q9CX),this.kittyTitleImage.drawTile((ig.system.width>>>(t3ZX.j4CX|l3ZX.I4XX))-(this.kittyTitleImage.width>>>+t3ZX.j4CX),(ig.system.height>>>l3ZX.n4XX)+(this.kittyImage.height>>>+t3ZX.U4CX)+t3ZX.u3uX*l3ZX.n4XX,this.kittyAnim,+P4WX,+x3uX.Z5LX));ig.system.context.globalAlpha=l3ZX.n4XX;}});});H5ZZ.i4XX(H5ZZ.w4XX);ig.baked=!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(f5WX.J4WX).requires(W3WX.w1WX).defines(function(){var y8RX=H5ZZ;var g8RX=G3CX;var K8lX="5E3";EntityPointer=ig.Entity.extend({checkAgainst:ig.Entity.TYPE.BOTH,isFirstPressed:!(g8RX.j4CX-y8RX.I4XX),isPressed:!y8RX.n4XX,isReleased:!+g8RX.j4CX,isHovering:!(g8RX.j4CX*y8RX.n4XX),hoveringItem:g8RX.X4CX,objectArray:[],clickedObjectList:[],ignorePause:!(g8RX.k4CX-y8RX.I4XX),zIndex:K8lX*y8RX.n4XX,name:x3uX.C7uX,check:function(j88){this.objectArray.push(j88);},clickObject:function(M88){this.isFirstPressed&&G3CX.d4CX==typeof M88.clicked&&(M88.clicked(),this.addToClickedObjectList(M88));this.isPressed&&!this.isReleased&&G3CX.d4CX==typeof M88.clicking&&M88.clicking();this.isReleased&&G3CX.d4CX==typeof M88.released&&(M88.released(),this.removeFromClickedObjectList(M88));},refreshPos:function(){this.pos=ig.game.io.getClickPos();},update:function(){var O3ZX=G3CX;var I88,x88;this.parent();this.refreshPos();I88=O3ZX.X4CX;x88=-+O3ZX.j4CX;for(a=this.objectArray.length-y8RX.n4XX;-y8RX.n4XXx88&&(x88=this.objectArray[a].zIndex,I88=this.objectArray[a]);}if(O3ZX.X4CX!=I88){O3ZX.X4CX!=this.hoveringItem?this.hoveringItem!=I88&&(O3ZX.d4CX==typeof this.hoveringItem.leave&&this.hoveringItem.leave(),O3ZX.d4CX==typeof I88.over&&I88.over()):O3ZX.d4CX==typeof I88.over&&I88.over(),this.hoveringItem=this.lastEnt=I88,this.clickObject(I88),this.objectArray=[];}else if(O3ZX.X4CX!=this.hoveringItem&&O3ZX.d4CX==typeof this.hoveringItem.leave&&(this.hoveringItem.leave(),this.hoveringItem=O3ZX.X4CX),this.isReleased){for(I88=O3ZX.k4CX*y8RX.n4XX;I88=G28;r28--){J28.push(r28);}return J28;},draw:function(){var V28;if(this.visible&&(this.forceDraw||this.currentAnim||this.drawAsRect)){V28=ig.system.context;V28.save();V28.translate(ig.system.getDrawPos(this.pos.x.round()-this.offset.x-ig.game.screen.x),ig.system.getDrawPos(this.pos.y.round()-this.offset.y-ig.game.screen.y));(+G3CX.j4CX!=this.scaleX||r4lX.n4XX!=this.scaleY)&&V28.scale(this.scaleX,this.scaleY);this.drawObject(-this.anchorX*this.width,-this.anchorY*this.height);V28.restore();}},drawObject:function(D28,X28){var s8ZX=G3CX;var h28,Q28;if(this.drawAsRect){h28=ig.system.context;Q28=this.rectColor;h28.fillStyle=+s8ZX.j4CX>this.alpha?f5WX.g4WX+Q28.r+s8ZX.N8uX+Q28.g+s8ZX.N8uX+Q28.b+s8ZX.N8uX+this.alpha+x3uX.k2rX:Q28.hex;h28.fillRect(D28,X28,this.width,this.height);}else{s8ZX.X4CX!=this.currentAnim&&(this.currentAnim.alpha=this.alpha,this.currentAnim.draw(D28,X28));}},update:function(){var W28,M28,j28;this.parent();if(this.inputEnabled&&this.isFinishEntering){W28=!+G3CX.j4CX;for(M28 in ig.input.touches){W28=!+G3CX.k4CX;j28=ig.input.touches[M28];this.isInsideBounds(j28.x,j28.y)&&!this.isClicking&&(this.isClicking=!(G3CX.k4CX*r4lX.n4XX),this.onClicked.dispatch(this));}W28||(this.isClicking&&this.onReleased.dispatch(this),this.isClicking=!r4lX.n4XX);}},isInsideBounds:function(c28,N28){var I28,x28;I28=this.scaleX*this.width;x28=this.scaleY*this.height;this.boundLeft=this.pos.x-I28*this.anchorX;this.boundTop=this.pos.y-x28*this.anchorY;this.boundRight=this.boundLeft+I28;this.boundBottom=this.boundTop+x28;this.boundLeft>this.boundRight&&(I28=this.boundLeft,this.boundLeft=this.boundRight,this.boundRight=I28);this.boundTop>this.boundBottom&&(I28=this.boundTop,this.boundTop=this.boundBottom,this.boundBottom=I28);return c28this.boundRight||N28>this.boundBottom?!+G3CX.j4CX:!(G3CX.k4CX*r4lX.n4XX);},fadeBounceRightIn:function(){var E28;this.alpha=+G3CX.k4CX;E28=this.pos.x;r4lX.i4XX(r4lX.n4XX);this.pos.x-=r4lX.z4XX(r4lX.I4XX,x3uX.f5LX);this.tween({alpha:G3CX.j4CX|r4lX.I4XX},j8lX*this.entryDuration,{delay:this.entryDelay,easing:ig.Tween.Easing.Quadratic.EaseOut}).start();this.tween({pos:{x:E28}},this.entryDuration,{delay:this.entryDelay,easing:ig.Tween.Easing.Back.EaseOut}).start();},fadeBounceRightOut:function(){this.tween({alpha:G3CX.k4CX|r4lX.I4XX},A0UX.l4SX*r4lX.n4XX*this.exitDuration,{delay:this.exitDelay+A0UX.X4SX*r4lX.n4XX*this.exitDuration,easing:ig.Tween.Easing.Quadratic.EaseOut}).start();this.tween({pos:{x:this.pos.x-+x3uX.f5LX}},this.exitDuration,{delay:this.exitDelay,easing:ig.Tween.Easing.Back.EaseIn}).start();},fadeBounceLeftIn:function(){var l28;this.alpha=+G3CX.k4CX;l28=this.pos.x;this.pos.x+=+x3uX.f5LX;this.tween({alpha:+G3CX.j4CX},+A0UX.l4SX*this.entryDuration,{delay:this.entryDelay,easing:ig.Tween.Easing.Quadratic.EaseOut}).start();this.tween({pos:{x:l28}},this.entryDuration,{delay:this.entryDelay,easing:ig.Tween.Easing.Back.EaseOut}).start();},fadeBounceLeftOut:function(){this.tween({alpha:+G3CX.k4CX},+A0UX.l4SX*this.exitDuration,{delay:this.exitDelay+A0UX.j4SX*this.exitDuration,easing:ig.Tween.Easing.Quadratic.EaseOut}).start();this.tween({pos:{x:this.pos.x+G3CX.r3CX}},this.exitDuration,{delay:this.exitDelay,easing:ig.Tween.Easing.Back.EaseIn}).start();},fadeJumpIn:function(){var A28;r4lX.i4XX(r4lX.w4XX);this.alpha=r4lX.r4XX(r4lX.I4XX,G3CX.k4CX);A28=this.pos.y;this.pos.y+=+x3uX.f5LX;this.tween({alpha:+G3CX.j4CX},+A0UX.l4SX*this.entryDuration,{delay:this.entryDelay,easing:ig.Tween.Easing.Quadratic.EaseOut}).start();this.tween({pos:{y:A28}},this.entryDuration,{delay:this.entryDelay,easing:ig.Tween.Easing.Back.EaseOut}).start();},fadeJumpOut:function(){this.tween({alpha:G3CX.k4CX-r4lX.I4XX},j8lX*this.exitDuration,{delay:this.exitDelay+(A0UX.X4SX-r4lX.I4XX)*this.exitDuration,easing:ig.Tween.Easing.Quadratic.EaseOut}).start();this.tween({pos:{y:this.pos.y+ +x3uX.f5LX}},this.exitDuration,{delay:this.exitDelay,easing:ig.Tween.Easing.Back.EaseIn}).start();},fadeIn:function(){var b28;b28=this.alpha;this.alpha=+G3CX.k4CX;this.tween({alpha:b28},this.entryDuration,{delay:this.entryDelay,easing:ig.Tween.Easing.Quadratic.EaseOut}).start();},fadeOut:function(){this.tween({alpha:+G3CX.k4CX},this.exitDuration,{delay:this.exitDelay,easing:ig.Tween.Easing.Quadratic.EaseOut}).start();},expandIn:function(){r4lX.i4XX(r4lX.w4XX);this.alpha=r4lX.z4XX(r4lX.I4XX,G3CX.k4CX);this.tween({alpha:r4lX.n4XX},this.entryDuration,{delay:this.entryDelay,easing:ig.Tween.Easing.Quadratic.EaseOut}).start();},expandOut:function(){this.tween({alpha:G3CX.k4CX|r4lX.I4XX},this.exitDuration,{delay:this.exitDelay,easing:ig.Tween.Easing.Quadratic.EaseOut}).start();},dropBoinkIn:function(){var P4RX=f5WX;var L28,n28,a28,C28,z28;r4lX.i4XX(r4lX.n4XX);this.alpha=r4lX.r4XX(r4lX.I4XX,G3CX.k4CX);L28=this.pos.y;n28=+P4RX.k8lX*this.scaleX;a28=(P4RX.B8lX-r4lX.I4XX)*this.scaleY;C28=this.scaleX;z28=this.scaleY;this.pos.y-=G3CX.k4CX-r4lX.I4XXthis.alpha?f5WX.g4WX+u28.r+G3CX.N8uX+u28.g+G3CX.N8uX+u28.b+G3CX.N8uX+this.alpha+x3uX.k2rX:u28.hex;i28.fillRect(this.pos.x,this.pos.y,this.size.x,this.size.y);i28.restore();}this.parent(k28,f28);}});ig.dropCurtain=function(g28){var M4RX=H5ZZ;var T4RX=G3CX;void+T4RX.k4CX===g28&&(g28=-+T4RX.j4CX);ig.hasFadeBlack=!M4RX.I4XX;M4RX.F4XX(M4RX.n4XX);ig.game.spawnEntity(EntityFadeBlack,+T4RX.k4CX,M4RX.r4XX(M4RX.I4XX,T4RX.k4CX),{isIn:!+T4RX.k4CX,nextLevelID:g28});};ig.liftCurtain=function(){var x4RX=H5ZZ;x4RX.i4XX(x4RX.w4XX);ig.hasFadeBlack=!x4RX.r4XX(x4RX.I4XX,G3CX.j4CX);x4RX.i4XX(x4RX.n4XX);ig.game.spawnEntity(EntityFadeBlack,x4RX.I4XX,x4RX.r4XX(x4RX.I4XX,G3CX.k4CX),{isIn:!x4RX.n4XX});};});ig.baked=!H5ZZ.I4XX;ig.module(f5WX.s8lX).requires(W3WX.w1WX,f5WX.J4WX,f5WX.E8lX).defines(function(){EntityController=ig.Entity.extend({gravityFactor:H5ZZ.I4XX,isAllowInput:!(G3CX.k4CX*H5ZZ.n4XX),pointer:G3CX.X4CX,liftCurtainOnStart:!+G3CX.k4CX,size:{x:+W3WX.L2WX,y:W3WX.u2WX|H5ZZ.I4XX},init:function(e28,Z28,q28){this.parent(e28,Z28,q28);this.pointer=ig.game.getEntitiesByType(EntityPointer)[H5ZZ.I4XX];this.liftCurtainOnStart&&ig.liftCurtain();},goToLevel:function(F28){this.isAllowInput=!H5ZZ.n4XX;ig.dropCurtain(F28);},showPopup:function(y28,o28){o28||(o28={});o28.controller=this;H5ZZ.F4XX(H5ZZ.w4XX);this.isAllowInput=!H5ZZ.r4XX(H5ZZ.I4XX,G3CX.j4CX);ig.game.spawnEntity(y28,+G3CX.k4CX,+G3CX.k4CX,o28);ig.game.sortEntitiesDeferred();},onPopupFinished:function(){this.isAllowInput=!+G3CX.k4CX;}});});ig.baked=!+G3CX.k4CX;ig.module(f5WX.a8lX).requires(f5WX.S8lX).defines(function(){var L4lX=H5ZZ;var u4lX=G3CX;var U8lX="#e8bba3";var b8lX="24px Arial";var G8lX=7E3;EntityButton=EntityGameObject.extend({collides:ig.Entity.COLLIDES.NEVER,type:ig.Entity.TYPE.A,originalX:u4lX.k4CX|L4lX.I4XX,originalY:L4lX.I4XX,transitionInDelay:+u4lX.k4CX,zIndex:G8lX,textString:u4lX.e4CX,textFont:b8lX,textRgb:ig.color.hexToRgb(U8lX),textAlign:k3dX.B4dX,textVAlign:k3dX.B4dX,textLineSpacing:u4lX.j4CX-L4lX.I4XX,textOffsetX:+u4lX.k4CX,textOffsetY:L4lX.I4XX,_previousTextString:u4lX.e4CX,_multiline:!(u4lX.j4CX|L4lX.I4XX),_lines:[],_lineSpacing:+u4lX.k4CX,init:function(R28,B28,P28){this.parent(R28,B28,P28);this._lineSpacing=parseInt(this.textFont.split(k3dX.q9dX)[+G3CX.k4CX].split(G3CX.W3uX).pop())*this.textLineSpacing;},drawObject:function(U18,Y18){var D4RX=G3CX;var H8lX=275.44;var v8lX="899.03";var C8lX="2550";var p8lX=/\r?\n/;var s28,T28,O28,H18;this.parent(U18,Y18);if(this.visible&&L4lX.I4XXthis.alpha?f5WX.g4WX+this.textRgb.r+D4RX.N8uX+this.textRgb.g+D4RX.N8uX+this.textRgb.b+D4RX.N8uX+this.alpha+(+C8lX<=v8lX-L4lX.I4XX?H8lX:x3uX.k2rX):this.textRgb.hex;T28=U18+this.textOffsetX;O28=Y18+this.textOffsetY;this.singleFrameImage&&(T28+=this.singleFrameImage.width/+D4RX.U4CX,O28+=this.singleFrameImage.height/(D4RX.U4CX-L4lX.I4XX));if(this._multiline){H18=O28;k3dX.B4dX==this.textVAlign&&(H18=O28-(this._lines.length-L4lX.n4XX)*this._lineSpacing/+D4RX.U4CX);for(O28=+D4RX.k4CX;O28=Q18){this.controller.onPopupFinished(this.name);}else{this.delayedCall(Q18,function(){this.controller.onPopupFinished(this.name);}.bind(this));}}}});});ig.baked=!H5ZZ.I4XX;ig.module(f5WX.L8lX).requires(f5WX.a8lX,f5WX.S8lX).defines(function(){var p4lX=H5ZZ;var U4lX=G3CX;var e8lX="11E3";EntitySliderButton=EntityButton.extend({zIndex:+e8lX,onStopSliding:U4lX.X4CX,value:p4lX.I4XX,xMin:p4lX.I4XX,xMax:U4lX.k4CX-p4lX.I4XX,yMin:U4lX.k4CX|p4lX.I4XX,yMax:U4lX.k4CX-p4lX.I4XX,indicatorOffsetX:U4lX.k4CX-p4lX.I4XX,indicatorOffsetY:p4lX.I4XX,indicator:U4lX.X4CX,indicatorImage:U4lX.X4CX,isHorizontal:!p4lX.I4XX,isSliding:!+U4lX.j4CX,inputEnabled:!+U4lX.k4CX,pair:U4lX.X4CX,init:function(h18,D18,X18){var O4RX=G3CX;this.onStopSliding=new ig.Signal();this.parent(h18,D18,X18);+O4RX.k4CX==this.xMax&&(this.xMax=this.width);+O4RX.k4CX==this.yMax&&(this.yMax=this.height);O4RX.X4CX==this.indicator&&(h18=this.width,this.size.ythis.xMax-c18.width&&(c18.pos.x=this.pos.x+this.xMax-c18.width);this.value=(c18.pos.x-this.pos.x-this.xMin)/(this.xMax-this.xMin-c18.width);}});});ig.baked=!+G3CX.k4CX;ig.module(f5WX.x8lX).requires(f5WX.L8lX,f5WX.a8lX,f5WX.S8lX).defines(function(){var T8lX="media/graphics/sprites/dot.png";var c8lX="275";EntityVolumeSliderButton=EntitySliderButton.extend({indicatorOffsetY:G3CX.k4CX|H5ZZ.I4XX,xMin:-+G3CX.V8uX,xMax:+c8lX,indicatorImage:new ig.Image(T8lX),init:function(E18,l18,A18){this.parent(E18,l18,A18);}});});ig.baked=!+G3CX.k4CX;ig.module(f5WX.M8lX).requires(f5WX.A8lX,f5WX.x8lX).defines(function(){var s4lX=G3CX;var i8lX="media/graphics/sprites/icon-sfx.png";var r8lX="media/graphics/sprites/icon-bgm.png";var z8lX="media/graphics/sprites/button-continue.png";var h8lX="media/graphics/sprites/bg-popup.png";var N8lX="media/graphics/sprites/slider.png";EntitySettingsPopup=EntityPopup.extend({Images:[new ig.Image(N8lX),new ig.Image(h8lX),new ig.Image(f5WX.V8lX),new ig.Image(z8lX),new ig.Image(r8lX),new ig.Image(i8lX)],homeButton:s4lX.X4CX,title:s4lX.X4CX,exitDelay:+s4lX.k4CX,exitDuration:A0UX.j4SX,sfxBar:s4lX.X4CX,bgmBar:s4lX.X4CX,init:function(b18,n18,C18){var P5RX=W3WX;var w5RX=A0UX;var n5RX=f5WX;var I5RX=x3uX;var F5RX=H5ZZ;var J8lX="405";var P8lX="470";var w8lX="390";var I8lX="750";var F8lX="72px mainfont";var E0CX=485;this.parent(b18,n18,C18);this.spawnMember(EntityGameObject,s4lX.f2CX,s4lX.S0CX,{singleFrameImage:this.Images[s4lX.j4CX-F5RX.I4XX],anchorX:I5RX.V2LX-F5RX.I4XX,anchorY:+I5RX.V2LX,entryType:n5RX.o8lX,exitType:n5RX.u8lX,entryDuration:w5RX.X4SX*F5RX.n4XX,exitDuration:w5RX.j4SX});F5RX.i4XX(F5RX.n4XX);this.title=this.spawnMember(EntityShadowText,+P5RX.n0WX,F5RX.z4XX(F5RX.I4XX,k3dX.K0dX),{shadowOffsetY:F5RX.J4XX,anchorX:w5RX.x0SX,anchorY:I5RX.V2LX-F5RX.I4XX,textString:_STRINGS.Game.Settings,textFont:F8lX,textAlign:k3dX.B4dX,textRgb:ig.color.hexToRgb(P5RX.M0WX),entryType:n5RX.o8lX,exitType:n5RX.u8lX,entryDuration:w5RX.X4SX-F5RX.I4XX,exitDuration:w5RX.j4SX});F5RX.F4XX(F5RX.I4XX);this.homeButton=this.spawnMember(EntityButton,F5RX.z4XX(F5RX.n4XX,P5RX.n0WX),+I8lX,{singleFrameImage:this.Images[+s4lX.U4CX],anchorX:+I5RX.V2LX,anchorY:+I5RX.V2LX,entryType:n5RX.o8lX,exitType:n5RX.u8lX,entryDuration:+w5RX.X4SX,exitDuration:+w5RX.X4SX});this.homeButton.onClicked.addOnce(this.onClickHome,this);this.bgmBar=this.spawnMember(EntityVolumeSliderButton,+n5RX.n8lX,+w8lX,{singleFrameImage:this.Images[F5RX.I4XX],value:ig.game.sessionData.music,entryType:n5RX.o8lX,exitType:n5RX.u8lX,entryDuration:w5RX.X4SX*F5RX.n4XX,exitDuration:+w5RX.X4SX});this.bgmBar.onStopSliding.add(this.onValueChanged,this);F5RX.F4XX(F5RX.w4XX);this.sfxBar=this.spawnMember(EntityVolumeSliderButton,F5RX.r4XX(F5RX.I4XX,n5RX.n8lX),+P8lX,{singleFrameImage:this.Images[F5RX.I4XX],value:ig.game.sessionData.sound,entryType:n5RX.o8lX,exitType:n5RX.u8lX,entryDuration:w5RX.j4SX,exitDuration:w5RX.X4SX*F5RX.n4XX});this.sfxBar.onStopSliding.add(this.onValueChanged,this);F5RX.F4XX(F5RX.w4XX);this.spawnMember(EntityGameObject,F5RX.z4XX(F5RX.I4XX,P5RX.H1WX),+J8lX,{singleFrameImage:this.Images[F5RX.J4XX],anchorX:+I5RX.V2LX,anchorY:+I5RX.V2LX,entryType:n5RX.o8lX,exitType:n5RX.u8lX,entryDuration:+w5RX.X4SX,exitDuration:+w5RX.X4SX});this.spawnMember(EntityGameObject,+P5RX.H1WX,E0CX,{singleFrameImage:this.Images[s4lX.V8uX|F5RX.I4XX],anchorX:+I5RX.V2LX,anchorY:I5RX.V2LX*F5RX.n4XX,entryType:n5RX.o8lX,exitType:n5RX.u8lX,entryDuration:+w5RX.X4SX,exitDuration:w5RX.X4SX-F5RX.I4XX});this.bgmBar.pair=this.sfxBar;this.sfxBar.pair=this.bgmBar;ig.game.sortEntitiesDeferred();},onValueChanged:function(){ig.game.sessionData.music=this.bgmBar.value;ig.game.sessionData.sound=this.sfxBar.value;ig.game.saveAll();ig.soundHandler.bgmPlayer.volume(ig.game.sessionData.music);ig.soundHandler.sfxPlayer.volume(ig.game.sessionData.sound);ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click);},onClickHome:function(){this.isAllowInput&&(this.isAllowInput=!H5ZZ.n4XX,this.exit(),ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click));}});});ig.baked=!+G3CX.k4CX;ig.module(f5WX.K3lX).requires(f5WX.S8lX).defines(function(){var R3lX="48px Arial";EntityText=EntityGameObject.extend({textString:G3CX.e4CX,textFont:R3lX,textRgb:ig.color.hexToRgb(k3dX.I53X),textAlign:W3WX.C9WX,textOffsetX:G3CX.k4CX-H5ZZ.I4XX,textOffsetY:+G3CX.k4CX,zIndex:f5WX.W3lX*H5ZZ.n4XX,forceDraw:!(G3CX.k4CX-H5ZZ.I4XX),init:function(L18,a18,z18){this.parent(L18,a18,z18);},drawObject:function(){var N5RX=G3CX;var t18;this.parent();if(!+N5RX.k4CX==this.visible){t18=ig.system.context;t18.save();t18.font=this.textFont;t18.textAlign=this.textAlign;t18.fillStyle=+N5RX.j4CX>this.alpha?f5WX.g4WX+this.textRgb.r+N5RX.N8uX+this.textRgb.g+N5RX.N8uX+this.textRgb.b+N5RX.N8uX+this.alpha+x3uX.k2rX:this.textRgb.hex;t18.fillText(this.textString,this.textOffsetX,this.textOffsetY);t18.restore();}},measureTextWidth:function(){var K18,p18;K18=ig.system.context;K18.save();K18.font=this.textFont;K18.textAlign=x3uX.m1uX;p18=K18.measureText(this.textString);K18.restore();return p18.width;}});});ig.baked=!H5ZZ.I4XX;ig.module(f5WX.d3lX).requires(f5WX.K3lX).defines(function(){EntityShadowText=EntityText.extend({shadowRgb:ig.color.hexToRgb(A0UX.I4SX),shadowOffsetX:+G3CX.k4CX,shadowOffsetY:+G3CX.t4CX,shadowAlpha:f5WX.g3lX,init:function(i18,u18,k18){this.parent(i18,u18,k18);},drawObject:function(){var L5RX=G3CX;var f18,g18,e18;if(this.visible){f18=ig.system.context;f18.save();f18.font=this.textFont;f18.textAlign=this.textAlign;if(!this.shadowRgb.none){f18.fillStyle=(L5RX.j4CX|H5ZZ.I4XX)>this.alpha||+L5RX.j4CX>this.shadowAlpha?f5WX.g4WX+this.shadowRgb.r+L5RX.N8uX+this.shadowRgb.g+L5RX.N8uX+this.shadowRgb.b+L5RX.N8uX+this.alpha*this.shadowAlpha+x3uX.k2rX:this.shadowRgb.hex;g18=this.textOffsetX+this.shadowOffsetX;e18=this.textOffsetY+this.shadowOffsetY;f18.fillText(this.textString,g18,e18);}f18.fillStyle=L5RX.j4CX-H5ZZ.I4XX>this.alpha?f5WX.g4WX+this.textRgb.r+L5RX.N8uX+this.textRgb.g+L5RX.N8uX+this.textRgb.b+L5RX.N8uX+this.alpha+x3uX.k2rX:this.textRgb.hex;g18=this.textOffsetX;e18=this.textOffsetY;f18.fillText(this.textString,g18,e18);f18.restore();}}});});H5ZZ.F4XX(H5ZZ.w4XX);ig.baked=!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(f5WX.y3lX).requires(W3WX.w1WX,f5WX.K3lX,f5WX.d3lX).defines(function(){var t4lX=H5ZZ;var Y4lX=G3CX;var S3lX="media/graphics/sprites/icon-lock.png";var O3lX="media/graphics/sprites/button-arrow.png";var f3lX="3.14";EntityCharacterSelect=ig.Entity.extend({platform:Y4lX.X4CX,player:Y4lX.X4CX,currentPlayerId:t4lX.I4XX,unlockCondition:[+Y4lX.k4CX,+x3uX.c4LX,x3uX.f5LX-t4lX.I4XX,x3uX.n3rX*t4lX.n4XX,+x3uX.D2rX],currentRotation:+f3lX,enableRotation:!+Y4lX.k4CX,parentController:Y4lX.X4CX,offset:Y4lX.k4CX*t4lX.n4XX,offset3d:-(Y4lX.e3uX*t4lX.n4XX),dragXStart:-t4lX.n4XX,dragRotationStart:t4lX.I4XX,isDragging:!+Y4lX.j4CX,lockTf:Y4lX.X4CX,lockImage:Y4lX.X4CX,buttonImages:[new ig.Image(O3lX),new ig.Image(S3lX)],init:function(Z18,q18,F18){var p5RX=x3uX;var U5RX=G3CX;var Y3lX="36px mainfont";var u0CX=580;var k0CX=410;this.parent(Z18,q18,F18);ig.game.spawnEntity(EntityButton,k0CX,U5RX.D0CX+this.offset,{singleFrameImage:this.buttonImages[U5RX.k4CX-t4lX.I4XX],anchorX:+p5RX.V2LX}).onClicked.add(this.onClickRightArrow,this);ig.game.spawnEntity(EntityButton,+W3WX.L1WX,+k3dX.W5dX+this.offset,{singleFrameImage:this.buttonImages[+U5RX.k4CX],anchorX:p5RX.V2LX*t4lX.n4XX,scaleX:-t4lX.n4XX}).onClicked.add(this.onClickLeftArrow,this);t4lX.F4XX(t4lX.w4XX);this.lockTf=ig.game.spawnEntity(EntityShadowText,t4lX.z4XX(t4lX.I4XX,W3WX.n0WX),+f5WX.Q3lX+this.offset,{shadowOffsetY:+U5RX.l4CX,anchorX:A0UX.x0SX,anchorY:+p5RX.V2LX,textString:U5RX.e4CX,textFont:Y3lX,textAlign:k3dX.B4dX,textRgb:ig.color.hexToRgb(W3WX.M0WX)});this.lockImage=ig.game.spawnEntity(EntityGameObject,U5RX.f2CX,u0CX+this.offset,{anchorX:p5RX.V2LX*t4lX.n4XX,anchorY:+p5RX.V2LX,scaleX:t4lX.n4XX,scaleY:t4lX.n4XX,singleFrameImage:this.buttonImages[U5RX.j4CX-t4lX.I4XX]});wgl.objects.cleanup();this.platform=wgl.objects.createPlatform(+U5RX.j4CX);this.platform.position.set(+U5RX.k4CX,this.offset3d,+U5RX.k4CX);t4lX.i4XX(t4lX.n4XX);wgl.objects.pointCameraTo(t4lX.r4XX(t4lX.I4XX,U5RX.k4CX),+U5RX.k4CX,t4lX.I4XX);this.currentPlayerId=ig.game.sessionData.selectedCharacter;this.refreshPlayer(this.currentPlayerId);},refreshPlayer:function(o18){var X3lX="[x]";var t3lX="1.25";var y18;this.player=wgl.objects.getPlayer(o18);wgl.objects.hideAllPlayers();y18=+t3lX*wgl.objects.getPlayerHeight(o18)+ +f5WX.l3lX+this.platform.position.y;this.player.scaling.set(f5WX.Z5WX,+f5WX.M5WX,+f5WX.M5WX);this.player.position.set(t4lX.I4XX,y18,t4lX.I4XX);this.player.rotation.y=this.currentRotation;ig.game.sessionData.score>=this.unlockCondition[o18]?(ig.game.sessionData.selectedCharacter=o18,ig.game.saveAll(),this.lockImage.visible=!(G3CX.j4CX*t4lX.n4XX),this.lockTf.visible=!+G3CX.j4CX):(this.lockImage.visible=!+G3CX.k4CX,this.lockTf.visible=!t4lX.I4XX,this.lockTf.textString=_STRINGS.Game.Lock.replace(X3lX,this.unlockCondition[o18]+G3CX.e4CX));},update:function(){var j3lX="0.125";this.parent();this.enableRotation&&(this.currentRotation+=-+j3lX*ig.system.tick,this.platform.rotation.y=this.player.rotation.y=this.currentRotation);this.updateInput();},updateInput:function(){var B18,P18,R18;B18=!+G3CX.j4CX;for(P18 in ig.input.touches){t4lX.F4XX(t4lX.w4XX);B18=!t4lX.r4XX(t4lX.I4XX,G3CX.k4CX);R18=ig.input.touches[P18];this.isInsideBounds(R18.x,R18.y)&&(!this.isClicking&&this.isInsideBoundsStrict(R18.x,R18.y)&&(this.isClicking=!+G3CX.k4CX,this.onClickStarted(R18.x)),this.isClicking&&this.parentController.isAllowInput&&(this.currentRotation=this.dragRotationStart+A0UX.M5SX*(this.dragXStart-R18.x)));}if(!B18){if(this.isClicking){this.onReleased();}this.isClicking=!t4lX.n4XX;}},isInsideBounds:function(T18,s18){var O18;O18=+k3dX.W5dX+this.offset;return s18>O18+ +x3uX.D2rX||s18H56+(x3uX.D2rX-t4lX.I4XX)||U56H56&&U56Y56)?!+m5RX.j4CX:!(m5RX.k4CX*t4lX.n4XX);},onClickStarted:function(d56){this.dragXStart=d56;this.dragRotationStart=this.currentRotation;this.isDragging=!+G3CX.k4CX;},onReleased:function(){dragXStart=-+G3CX.j4CX;t4lX.F4XX(t4lX.I4XX);this.isDragging=!t4lX.z4XX(t4lX.n4XX,G3CX.j4CX);},onClickRightArrow:function(){!this.isDragging&&this.parentController.isAllowInput&&(this.currentPlayerId++,G3CX.t4CX*t4lX.n4XXthis.currentPlayerId&&(this.currentPlayerId=G3CX.t4CX*t4lX.n4XX),this.refreshPlayer(this.currentPlayerId),ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click));}});});ig.baked=!+G3CX.k4CX;ig.module(f5WX.k3lX).requires(W3WX.w1WX,f5WX.s8lX,f5WX.S8lX,f5WX.a8lX,f5WX.M8lX,f5WX.y3lX).defines(function(){EntityMainMenuController=EntityController.extend({characterSelect:G3CX.X4CX,buttonImages:[new ig.Image(f5WX.B3lX),new ig.Image(f5WX.C4WX),new ig.Image(f5WX.m3lX)],init:function(r56,S56,m56){var O5RX=G3CX;var f5RX=H5ZZ;var s3lX="media/graphics/sprites/button-minimize.png";var q3lX="media/graphics/sprites/button-maximize.png";var E3lX="695";var D3lX="74";var Z3lX="720";var B0CX=420;this.parent(r56,S56,m56);f5RX.i4XX(f5RX.n4XX);r56=ig.game.spawnEntity(EntityButton,B0CX,f5RX.z4XX(f5RX.I4XX,Z3lX),{singleFrameImage:this.buttonImages[O5RX.k4CX-f5RX.I4XX],anchorX:+x3uX.V2LX});r56.onClicked.add(this.onClickSettings,this);f5RX.i4XX(f5RX.n4XX);S56=ig.game.spawnEntity(EntityButton,f5RX.r4XX(f5RX.I4XX,D3lX),+Z3lX,{singleFrameImage:this.buttonImages[+O5RX.j4CX]});S56.size.x=O5RX.c3CX;S56.size.y=+W3WX.v1WX;this.characterSelect=ig.game.spawnEntity(EntityCharacterSelect);this.characterSelect.parentController=this;this.addCover();this.fadeOutCover();f5RX.i4XX(f5RX.I4XX);m56=ig.game.spawnEntity(EntityButton,f5RX.z4XX(f5RX.n4XX,W3WX.n0WX),f5RX.z4XX(f5RX.n4XX,E3lX),{singleFrameImage:this.buttonImages[O5RX.U4CX|f5RX.I4XX],anchorX:+x3uX.V2LX});m56.onClicked.add(this.onClickPlay,this);_SETTINGS.MoreGames.Enabled?(_SETTINGS.MoreGames.Link&&(S56.link=_SETTINGS.MoreGames.Link),_SETTINGS.MoreGames.NewWindow&&(S56.newWindow=_SETTINGS.MoreGames.NewWindow),this.clickableLayer=new ClickableDivLayer(S56)):(m56.pos.y=+f5WX.Q3lX,r56.pos.x=m56.pos.x,r56.pos.y=m56.pos.y+(f5WX.n8lX-f5RX.I4XX),S56.kill());ig.game.spawnEntity(ig.FullscreenButton,O5RX.V8uX-f5RX.I4XX,O5RX.V8uX-f5RX.I4XX,{enterImage:new ig.Image(q3lX),exitImage:new ig.Image(s3lX)});},addCover:function(){var C5CX=19999;this.cover=ig.game.spawnEntity(EntityGameObject,+G3CX.k4CX,H5ZZ.I4XX,{width:+W3WX.u2WX,height:W3WX.L2WX*H5ZZ.n4XX,drawAsRect:!+G3CX.k4CX,rectColor:ig.color.hexToRgb(ig.game.fadeColors[G3CX.k4CX|H5ZZ.I4XX]),zIndex:C5CX});},fadeOutCover:function(){this.cover.alpha=+G3CX.j4CX;this.cover.visible=!+G3CX.k4CX;this.cover.tween({alpha:G3CX.k4CX|H5ZZ.I4XX},ig.game.fadeDuration,{onComplete:function(){H5ZZ.i4XX(H5ZZ.n4XX);this.cover.visible=!H5ZZ.r4XX(H5ZZ.I4XX,G3CX.j4CX);}.bind(this)}).start();},fadeInCover:function(){var P0RX=H5ZZ;P0RX.i4XX(P0RX.n4XX);this.cover.alpha=P0RX.r4XX(P0RX.I4XX,G3CX.k4CX);this.cover.visible=!+G3CX.k4CX;this.cover.tween({alpha:P0RX.n4XX},ig.game.fadeDuration).start();},onClickSettings:function(){!this.characterSelect.isDragging&&this.isAllowInput&&(this.isAllowInput=!+G3CX.j4CX,ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click),this.fadeInCover(),this.tween({},ig.game.fadeDuration,{onComplete:function(){ig.game.director.loadLevel(+G3CX.V8uX);}.bind(this)}).start(),this.tween({},ig.game.fadeDuration-+W3WX.F6WX,{onComplete:function(){H5ZZ.F4XX(H5ZZ.w4XX);this.characterSelect.enableRotation=!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.j4CX);wgl.objects.cleanup();}.bind(this)}).start());},onClickPlay:function(){!this.characterSelect.isDragging&&this.isAllowInput&&(this.isAllowInput=!(G3CX.j4CX|H5ZZ.I4XX),ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click),this.fadeInCover(),this.tween({},ig.game.fadeDuration,{onComplete:function(){ig.game.director.loadLevel(+G3CX.l4CX);}.bind(this)}).start(),this.tween({},ig.game.fadeDuration-+W3WX.F6WX,{onComplete:function(){H5ZZ.F4XX(H5ZZ.n4XX);this.characterSelect.enableRotation=!H5ZZ.r4XX(H5ZZ.I4XX,G3CX.j4CX);wgl.objects.cleanup();}.bind(this)}).start());},update:function(){this.parent();wgl.objects.updateClouds(ig.system.tick);},draw:function(){this.parent();ig.global.wm||(ig.system.context.clearRect(+G3CX.k4CX,H5ZZ.I4XX,ig.system.width,ig.system.height),this.drawTitle());},drawTitle:function(){var c0RX=H5ZZ;var o0RX=W3WX;var J56;J56=ig.system.context;J56.save();J56.font=o0RX.F0WX;J56.textAlign=k3dX.B4dX;J56.globalAlpha=+o0RX.I0WX;J56.fillStyle=A0UX.I4SX;J56.fillText(_STRINGS.Game.Title1,+o0RX.n0WX,+f5WX.P5WX);J56.fillText(_STRINGS.Game.Title2,G3CX.f2CX,A0UX.r0UX*c0RX.n4XX);c0RX.F4XX(c0RX.n4XX);J56.globalAlpha=c0RX.r4XX(c0RX.I4XX,G3CX.j4CX);J56.fillStyle=o0RX.M0WX;J56.fillText(_STRINGS.Game.Title1,+o0RX.n0WX,x3uX.n3rX|c0RX.I4XX);J56.fillText(_STRINGS.Game.Title2,+o0RX.n0WX,+o0RX.n0WX);J56.restore();}});});ig.baked=!+G3CX.k4CX;ig.module(f5WX.a3lX).requires(W3WX.H6WX,f5WX.k3lX).defines(function(){var G3lX="EntityMainMenuController";LevelMainMenu={entities:[{type:G3lX,x:+G3CX.k4CX,y:+G3CX.k4CX}],layer:[]};});H5ZZ.i4XX(H5ZZ.I4XX);ig.baked=!H5ZZ.r4XX(H5ZZ.n4XX,G3CX.k4CX);ig.module(f5WX.b3lX).requires(W3WX.w1WX,f5WX.s8lX,f5WX.S8lX,f5WX.a8lX,f5WX.M8lX,f5WX.y3lX).defines(function(){EntityMainMenuSettingsController=EntityController.extend({characterSelect:G3CX.X4CX,buttonImages:[new ig.Image(f5WX.B3lX),new ig.Image(f5WX.C4WX),new ig.Image(f5WX.m3lX)],init:function(G56,v56,w56){this.parent(G56,v56,w56);this.addCover();this.fadeOutCover();H5ZZ.i4XX(H5ZZ.w4XX);this.delayedCall(H5ZZ.r4XX(H5ZZ.I4XX,A0UX.c8SX),function(){this.showPopup(EntitySettingsPopup);}.bind(this));},onPopupFinished:function(V56){this.parent(V56);this.isAllowInput&&(this.isAllowInput=!H5ZZ.n4XX,this.fadeInCover(),this.tween({},ig.game.fadeDuration,{onComplete:function(){H5ZZ.F4XX(H5ZZ.w4XX);ig.game.director.loadLevel(H5ZZ.r4XX(H5ZZ.I4XX,G3CX.j4CX));}.bind(this)}).start());},addCover:function(){this.cover=ig.game.spawnEntity(EntityGameObject,H5ZZ.I4XX,+G3CX.k4CX,{width:W3WX.u2WX*H5ZZ.n4XX,height:+W3WX.L2WX,drawAsRect:!+G3CX.k4CX,rectColor:ig.color.hexToRgb(ig.game.fadeColors[H5ZZ.I4XX]),zIndex:+f5WX.U3lX});},fadeOutCover:function(){this.cover.alpha=+G3CX.j4CX;this.cover.visible=!+G3CX.k4CX;this.cover.tween({alpha:H5ZZ.I4XX},ig.game.fadeDuration,{onComplete:function(){this.cover.visible=!H5ZZ.n4XX;}.bind(this)}).start();},fadeInCover:function(){this.cover.alpha=H5ZZ.I4XX;this.cover.visible=!+G3CX.k4CX;this.cover.tween({alpha:H5ZZ.n4XX},ig.game.fadeDuration).start();},update:function(){this.parent();wgl.objects.updateClouds(ig.system.tick);},draw:function(){this.parent();ig.global.wm||ig.system.context.clearRect(G3CX.k4CX-H5ZZ.I4XX,G3CX.k4CX*H5ZZ.n4XX,ig.system.width,ig.system.height);}});});ig.baked=!H5ZZ.I4XX;ig.module(f5WX.p3lX).requires(W3WX.H6WX,f5WX.b3lX).defines(function(){var C3lX="EntityMainMenuSettingsController";LevelMainMenuSettings={entities:[{type:C3lX,x:+G3CX.k4CX,y:H5ZZ.I4XX}],layer:[]};});ig.baked=!H5ZZ.I4XX;ig.module(f5WX.v3lX).requires(f5WX.R4WX).defines(function(){var u3lX="Pause";var o3lX="rgba(255,255,255,1)";var A3lX="rgba(255,0,0,1)";EntityButtonPause=EntityButton.extend({oriColor:f5WX.H3lX,altColor:A3lX,fillColor:A3lX,textColor:o3lX,ignorePause:!H5ZZ.I4XX,size:new BABYLON.Vector2(x3uX.c4LX-H5ZZ.I4XX,x3uX.c4LX*H5ZZ.n4XX),text:u3lX,init:function(Q56,h56,D56){this.parent(Q56,h56,D56);},update:function(){this.parent();},draw:function(){var X56;this.parent();X56=ig.system.context;X56.fillStyle=this.fillColor;X56.fillRect(this.pos.x,this.pos.y,this.size.x,this.size.y);X56.textAlign=k3dX.B4dX;X56.fillStyle=this.textColor;X56.fillText(this.text,this.pos.x+(this.size.y>>>H5ZZ.n4XX),this.pos.y+(this.size.y>>>+G3CX.j4CX));X56.textAlign=W3WX.C9WX;},clicked:function(){var L3lX="clicked";this.fillColor=this.altColor;console.log(L3lX);ig.game.paused=!ig.game.paused;ig.game.paused?wgl.system.stopRender():wgl.system.startRender();},clicking:function(){},released:function(){var e3lX="released";this.fillColor=this.oriColor;console.log(e3lX);}});});ig.baked=!+G3CX.k4CX;ig.module(f5WX.x3lX).defines(function(){var n5lX=k3dX;var I5lX=H5ZZ;var F5lX=G3CX;VirtualJoystick=ig.Class.extend({pos:new BABYLON.Vector2(+F5lX.k4CX,+F5lX.k4CX),start:new BABYLON.Vector2(+F5lX.k4CX,+F5lX.k4CX),last:new BABYLON.Vector2(I5lX.I4XX,I5lX.I4XX),deltaPos:new BABYLON.Vector3(+F5lX.k4CX,I5lX.I4XX,I5lX.I4XX),deltaVector:new BABYLON.Vector2(F5lX.k4CX-I5lX.I4XX,F5lX.k4CX|I5lX.I4XX),axis:{x:+F5lX.k4CX,y:+F5lX.j4CX,z:I5lX.w4XX},reverseDirections:[!I5lX.n4XX,!(F5lX.j4CX|I5lX.I4XX)],rotationspeed:n5lX.A3fX|I5lX.I4XX,inverseRotationspeed:+n5lX.A3fX,sensibility:n5lX.A3fX*I5lX.n4XX,inversedSensibility:n5lX.A3fX-I5lX.I4XX,deltaPosition:new BABYLON.Vector3.Zero(),touches:[],rotateOnAxisRelativeToMesh:!I5lX.n4XX,pressed:!I5lX.n4XX,color:n5lX.J43X,pointerID:-(F5lX.j4CX*I5lX.n4XX),axisTarget:{leftright:+F5lX.k4CX,updown:+F5lX.j4CX},identifier:F5lX.X4CX,drawVirtualStick:!+F5lX.j4CX,camera:F5lX.X4CX,pressed:!(F5lX.j4CX*I5lX.n4XX),init:function(W56){var R0RX=H5ZZ;this.camera=W56;this.deltaPos=new BABYLON.Vector3.Zero();R0RX.i4XX(G3CX.N9CX);var H6RR=R0RX.z4XX(R0RX.M8CX,R0RX.t8CX,R0RX.Y8CX,R0RX.f8CX,R0RX.P4XX);this.inversedSensibility=+G3CX.j4CX/(this.sensibility/(A0UX.t5UX*H6RR));R0RX.F4XX(R0RX.w4XX);var U6RR=R0RX.r4XX(R0RX.j8CX,R0RX.k8CX);this.inverseRotationspeed=+G3CX.j4CX/(this.rotationspeed/(A0UX.t5UX*U6RR));this.axisTarget.leftright=this.axis.x;this.axisTarget.updown=this.axis.y;R0RX.i4XX(R0RX.w4XX);this.rotateOnAxisRelativeToMesh=!R0RX.z4XX(R0RX.I4XX,G3CX.j4CX);},initialPos:function(j56){var K0RX=H5ZZ;var J9RX=G3CX;J9RX.X4CX!==this.identifier?this.identifier===j56.identifier&&(this.drawVirtualStick=!(J9RX.k4CX*K0RX.n4XX),this.start=new BABYLON.Vector2(j56.x+J9RX.k4CX*K0RX.n4XX,j56.y+(J9RX.k4CX|K0RX.I4XX)),this.pos=this.start.clone(),this.last=this.start.clone(),this.deltaVector.x=J9RX.k4CX|K0RX.I4XX,this.deltaVector.y=K0RX.I4XX,this.pressed=!K0RX.I4XX):(this.drawVirtualStick=!+J9RX.k4CX,this.identifier=j56.identifier,this.start=new BABYLON.Vector2(j56.x+J9RX.k4CX*K0RX.n4XX,j56.y+(J9RX.k4CX|K0RX.I4XX)),this.pos=this.start.clone(),this.last=this.start.clone(),this.deltaVector.x=+J9RX.k4CX,this.deltaVector.y=J9RX.k4CX|K0RX.I4XX,this.pressed=!+J9RX.k4CX);},updatePos:function(M56){var P9RX=G3CX;var w9RX=H5ZZ;if(M56.identifier===this.identifier){this.pos.x=M56.x;this.pos.y=M56.y;this.deltaVector=this.pos.clone();this.deltaVector=this.deltaVector.subtract(this.start);w9RX.F4XX(w9RX.Y8CX);var q6RR=w9RX.r4XX(w9RX.S8CX,w9RX.S8CX);M56=(this.reverseDirections[q6RR]?-+P9RX.j4CX:P9RX.j4CX-w9RX.I4XX)*this.deltaVector.x/this.inversedSensibility;switch(this.axisTarget.leftright){case this.axis.x:this.deltaPos.x=Math.min(+P9RX.j4CX,Math.max(-+P9RX.j4CX,M56));break;case this.axis.y:this.deltaPos.y=Math.min(+P9RX.j4CX,Math.max(-+P9RX.j4CX,M56));break;case this.axis.z:this.deltaPos.z=Math.min(w9RX.n4XX,Math.max(-(P9RX.j4CX-w9RX.I4XX),M56));}M56=(this.reverseDirections[w9RX.I4XX]?+P9RX.j4CX:-+P9RX.j4CX)*this.deltaVector.y/this.inversedSensibility;switch(this.axisTarget.updown){case this.axis.x:w9RX.F4XX(w9RX.n4XX);this.deltaPos.x=Math.min(w9RX.z4XX(w9RX.I4XX,P9RX.j4CX),Math.max(-(P9RX.j4CX|w9RX.I4XX),M56));break;case this.axis.y:w9RX.i4XX(w9RX.n4XX);this.deltaPos.y=Math.min(w9RX.r4XX(w9RX.I4XX,P9RX.j4CX),Math.max(-w9RX.n4XX,M56));break;case this.axis.z:this.deltaPos.z=Math.min(+P9RX.j4CX,Math.max(-(P9RX.j4CX-w9RX.I4XX),M56));}}this.action();},release:function(x56,I56){var n9RX=G3CX;var I9RX=H5ZZ;x3uX.o6uX!==typeof I56?I56&&(this.drawVirtualStick=!I9RX.n4XX,this.deltaVector.x=n9RX.k4CX|I9RX.I4XX,this.deltaVector.y=+n9RX.k4CX,this.identifier=n9RX.X4CX,this.pressed=!(n9RX.j4CX*I9RX.n4XX)):x56.identifier===this.identifier&&(this.drawVirtualStick=!(n9RX.j4CX-I9RX.I4XX),this.deltaVector.x=+n9RX.k4CX,this.deltaVector.y=n9RX.k4CX|I9RX.I4XX,this.identifier=n9RX.X4CX,this.pressed=!+n9RX.j4CX);},action:function(){},debugText:function(N56,E56){var c3lX=" , ";var c56;c56=ig.system.context;c56.fillStyle=f5WX.H3lX;c56.fillText(x3uX.a6uX+this.deltaVector.x+c3lX+this.deltaVector.y,N56,E56);c56.fillText(x3uX.a6uX+this.deltaPos.x+c3lX+this.deltaPos.y+c3lX+this.deltaPos.z,N56,E56+(x3uX.V8LX|H5ZZ.I4XX));},draw:function(){var V9RX=G3CX;var N9RX=H5ZZ;var l56;l56=ig.system.context;this.drawVirtualStick&&(l56.beginPath(),l56.lineWidth=N9RX.R8CX,l56.strokeStyle=this.color,l56.arc(this.start.x,this.start.y,+x3uX.S1rX,+V9RX.k4CX,(V9RX.U4CX|N9RX.I4XX)*Math.PI,!N9RX.I4XX),l56.stroke(),l56.closePath(),l56.beginPath(),l56.strokeStyle=this.color,l56.lineWidth=V9RX.U4CX|N9RX.I4XX,l56.arc(this.start.x,this.start.y,x3uX.B1uX*N9RX.n4XX,+V9RX.k4CX,+V9RX.U4CX*Math.PI,!+V9RX.k4CX),l56.stroke(),l56.closePath(),l56.beginPath(),l56.strokeStyle=this.color,l56.arc(this.pos.x,this.pos.y,+x3uX.S1rX,+V9RX.k4CX,+V9RX.U4CX*Math.PI,!(V9RX.k4CX|N9RX.I4XX)),l56.stroke(),l56.closePath());},setSensibility:function(A56){this.sensibility=A56;this.inversedSensibility=+G3CX.j4CX/(this.sensibility/+A0UX.t5UX);}});});H5ZZ.F4XX(H5ZZ.n4XX);ig.baked=!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(f5WX.T3lX).requires(f5WX.x3lX).defines(function(){ig.WebglVirtualJoystickHandler=ig.Class.extend({leftJoystick:G3CX.X4CX,rightJoystick:G3CX.X4CX,camera:G3CX.X4CX,init:function(b56){this.camera=b56;this.setupLeftJoystick();this.setupRightJoystick();},setupLeftJoystick:function(){this.leftJoystick=new VirtualJoystick(this.camera);this.leftJoystick.color=k3dX.y8UX;this.leftJoystick.axisTarget.updown=this.leftJoystick.axis.z;this.leftJoystick.axisTarget.leftright=this.leftJoystick.axis.x;this.leftJoystick.setSensibility(+f5WX.e4WX);this.leftJoystick.action=function(){var C56,n56,L56;C56=this.camera;n56=+x3uX.c4LX*C56._computeLocalCameraSpeed();L56=BABYLON.Matrix.RotationYawPitchRoll(C56.rotation.y,C56.rotation.x,+G3CX.k4CX);n56=BABYLON.Vector3.TransformCoordinates(new BABYLON.Vector3(this.deltaPos.x*n56,this.deltaPos.y*n56,this.deltaPos.z*n56),L56);C56.cameraDirection=C56.cameraDirection.add(n56);this.pressed||(this.deltaPos=this.deltaPos.scale(+A0UX.p5SX));}.bind(this.leftJoystick);},setupRightJoystick:function(){var A9RX=H5ZZ;this.rightJoystick=new VirtualJoystick(this.camera);this.rightJoystick.color=k3dX.J43X;this.rightJoystick.axisTarget.updown=this.rightJoystick.axis.x;this.rightJoystick.axisTarget.leftright=this.rightJoystick.axis.y;A9RX.F4XX(A9RX.n4XX);this.rightJoystick.reverseDirections[A9RX.I4XX]=!A9RX.r4XX(A9RX.I4XX,G3CX.k4CX);this.rightJoystick.setSensibility(+W3WX.F6WX);this.rightJoystick.action=function(){var a56;a56=this.camera;a56.cameraRotation=a56.cameraRotation.addVector3(this.deltaPos);this.pressed||(this.deltaPos=this.deltaPos.scale(+A0UX.p5SX));}.bind(this.rightJoystick);},update:function(){var C9RX=H5ZZ;var p9RX=G3CX;var z56,t56;this.resolveLeftRight(ig.multitouchInput.pressed,this.leftJoystick.initialPos.bind(this.leftJoystick),this.rightJoystick.initialPos.bind(this.rightJoystick));this.resolveLeftRight(ig.multitouchInput.state,this.leftJoystick.updatePos.bind(this.leftJoystick),this.rightJoystick.updatePos.bind(this.rightJoystick));this.resolveLeftRight(ig.multitouchInput.released,this.leftJoystick.release.bind(this.leftJoystick),this.rightJoystick.release.bind(this.rightJoystick));z56=ig.multitouchInput.released.length;if((p9RX.k4CX|C9RX.I4XX)>=z56+ig.multitouchInput.state.length+ig.multitouchInput.pressed.length){this.leftJoystick.release(p9RX.X4CX,!C9RX.I4XX),this.rightJoystick.release(p9RX.X4CX,!(p9RX.k4CX*C9RX.n4XX));}else if(C9RX.I4XXig.system.width>>>H5ZZ.n4XX?k56(p56):u56(p56);}},draw:function(){var a9RX=G3CX;var s9RX=H5ZZ;var q9RX=W3WX;var E9RX=x3uX;var V3lX="177.77";var h3lX="0x23af";var N3lX="479.17";var M3lX="3610";var h9CX=357;var q56,g56,e56,Z56;q56=ig.system.context;this.leftJoystick.draw();this.rightJoystick.draw();if(wgl.debug.debug){this.leftJoystick.debugText(+E9RX.b2rX,+E9RX.f5LX);q56.fillText(ig.multitouchInput.pressed.length+q9RX.M7WX+ig.multitouchInput.state.length+(+M3lX>=+N3lX?q9RX.M7WX:(h3lX-s9RX.I4XX,V3lX-s9RX.I4XX))+ig.multitouchInput.released.length,+E9RX.b2rX,E9RX.D2rX*s9RX.n4XX);for(var f56=+a9RX.k4CX;f56=this.lifebar){this.endGame();}else{this.control.update();if(this.levelTimer)if(t9RX.U4CX-N5lX.I4XXthis.levelTime){return;}this.scoreTimer&&+A0UX.c8SXthis.alpha?(wgl.game.miss=!(G3CX.j4CX*N5lX.n4XX),this.dAlpha=W3WX.F6WX-N5lX.I4XX,this.alpha=R7lX*N5lX.n4XX):x3uX.V2LX*N5lX.n4XX>>N5lX.n4XX,x3uX.c4LX|N5lX.I4XX);U66.fillText(W7lX,ig.system.width>>>N5lX.n4XX,N5lX.X3CX);U66.textAlign=W3WX.C9WX;},drawCollision:function(Y66){this.collidedWithLaserBeam&&(Y66=ig.system.context,Y66.fillStyle=this.collidedColor,Y66.fillRect(G3CX.k4CX*N5lX.n4XX,+G3CX.k4CX,ig.system.width,ig.system.height));},drawLifebar:function(d66){N5lX.I4XX>this.lifebar&&(this.lifebar=+G3CX.k4CX);d66.fillStyle=this.lifebarColors.healthy;d66.fillRect((ig.system.width>>>+G3CX.j4CX)-(this.lifebar>>>(G3CX.j4CX|N5lX.I4XX)),x3uX.b2rX|N5lX.I4XX,this.lifebar,+G3CX.u3uX);}});});H5ZZ.F4XX(H5ZZ.n4XX);ig.baked=!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(f5WX.d7lX).requires(W3WX.H6WX,f5WX.i3lX).defines(function(){var g7lX="EntityWebglControlGame";LevelWebglGame={entities:[{type:g7lX,x:G3CX.k4CX*H5ZZ.n4XX,y:G3CX.k4CX*H5ZZ.n4XX}],layer:[]};});H5ZZ.F4XX(H5ZZ.n4XX);ig.baked=!H5ZZ.r4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(f5WX.y7lX).requires(f5WX.M8lX).defines(function(){EntityGameplaySettingsPopup=EntitySettingsPopup.extend({init:function(S66,m66,r66){var w2RX=H5ZZ;this.parent(S66,m66,r66);this.resumeButton=this.spawnMember(EntityButton,+f5WX.f7lX,this.homeButton.pos.y,{singleFrameImage:this.Images[+G3CX.l4CX],anchorX:x3uX.V2LX-w2RX.I4XX,anchorY:x3uX.V2LX-w2RX.I4XX,entryType:f5WX.o8lX,exitType:f5WX.u8lX,entryDuration:A0UX.X4SX-w2RX.I4XX,exitDuration:A0UX.X4SX-w2RX.I4XX});this.resumeButton.onClicked.addOnce(this.onClickResume,this);w2RX.i4XX(w2RX.I4XX);this.homeButton.pos.x=w2RX.z4XX(w2RX.n4XX,W3WX.M1WX);this.title.textString=_STRINGS.Game.Paused;ig.game.sortEntitiesDeferred();},update:function(){this.parent();},onClickHome:function(){this.isAllowInput&&(ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click),this.isAllowInput=!+G3CX.j4CX,this.controller.fadeInCover(),this.delayedCall(ig.game.fadeDuration,function(){ig.game.director.loadLevel(H5ZZ.n4XX);}.bind(this)),this.parent());},onClickResume:function(){this.isAllowInput&&(this.isAllowInput=!+G3CX.j4CX,this.exit(),ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click));}});});H5ZZ.F4XX(H5ZZ.I4XX);ig.baked=!H5ZZ.r4XX(H5ZZ.n4XX,G3CX.k4CX);ig.module(f5WX.O7lX).requires(f5WX.d3lX).defines(function(){var H5lX=G3CX;EntityFlyingScore=EntityShadowText.extend({playerMesh:H5lX.X4CX,camera:H5lX.X4CX,textFont:f5WX.S7lX,textRgb:ig.color.hexToRgb(W3WX.M0WX),textAlign:k3dX.B4dX,zIndex:+f5WX.W3lX,identity:H5lX.X4CX,entryDelay:x3uX.V2LX-H5ZZ.I4XX,entryType:f5WX.o8lX,exitType:f5WX.u8lX,yRise:+H5lX.k4CX,riseVec:H5lX.X4CX,init:function(J66,G66,v66){var T2RX=H5ZZ;this.parent(J66,G66,v66);this.identity=BABYLON.Matrix.Identity();T2RX.i4XX(T2RX.w4XX);this.riseVec=new BABYLON.Vector3(T2RX.r4XX(T2RX.I4XX,H5lX.k4CX),T2RX.z4XX(T2RX.n4XX,H5lX.k4CX,T2RX.i4XX(T2RX.I4XX)),T2RX.r4XX(T2RX.I4XX,H5lX.k4CX,T2RX.F4XX(T2RX.n4XX)));this.yRise=+H5lX.V8uX;this.tween({yRise:H5lX.e3uX-T2RX.I4XX},A0UX.H4SX,{easing:ig.Tween.Easing.Quadratic.EaseOut,delay:A0UX.x0SX,onComplete:function(){this.delayedCall(A0UX.j4SX,function(){this.exit();}.bind(this));}.bind(this)}).start();},update:function(){var x2RX=H5ZZ;var V9CX=358;var w66,V66,Q66;this.parent();this.riseVec.y=this.yRise;w66=this.playerMesh.position.add(this.riseVec);V66=BABYLON.Matrix.Identity();Q66=wgl.game.currentScene.getTransformMatrix();w66=BABYLON.Vector3.Project(w66,V66,Q66,this.camera.viewport);this.pos.x=+W3WX.u2WX*w66.x;x2RX.F4XX(V9CX);var d6RR=x2RX.z4XX(x2RX.f8CX,x2RX.K8CX,x2RX.y8CX,x2RX.P8CX,x2RX.Y8CX);this.pos.y=W3WX.L2WX*d6RR*w66.y;}});});H5ZZ.i4XX(H5ZZ.n4XX);ig.baked=!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(f5WX.Q7lX).requires(W3WX.w1WX,f5WX.v3lX,f5WX.J4WX,f5WX.T3lX,f5WX.z3lX,f5WX.s8lX,f5WX.y7lX,f5WX.O7lX,f5WX.d3lX).defines(function(){var C5lX=H5ZZ;var p5lX=f5WX;var U5lX=G3CX;var b7lX="tweenLandEffect";var G7lX="tweenPlatform";var a7lX="-x";var s7lX="+z";var q7lX="+x";var E7lX="-z";var D7lX="fall";var m7lX="land-next";var l7lX="media/graphics/sprites/button-pause.png";var t7lX="land-current";var Y7lX="12.5";EntityWebglControlGameplay=EntityController.extend({alpha:+U5lX.k4CX,dAlpha:p5lX.L4WX,size:{x:C5lX.y8CX,y:+U5lX.u3uX},pos:{x:+U5lX.k4CX,y:U5lX.k4CX|C5lX.I4XX},name:p5lX.F3lX,landEffects:[],camera:U5lX.X4CX,cameraPos:new BABYLON.Vector3(U5lX.k4CX-C5lX.I4XX,+U5lX.k4CX,U5lX.k4CX*C5lX.n4XX),cameraTarget:new BABYLON.Vector3(C5lX.I4XX,U5lX.k4CX-C5lX.I4XX,+U5lX.k4CX),platforms:[],player:U5lX.X4CX,playerHalfHeight:U5lX.V8uX*C5lX.n4XX,playerHalfWidth:p5lX.M5WX*C5lX.n4XX,playerGroundY:C5lX.I4XX,platformHalfWidth:Y7lX-C5lX.I4XX,platformHalfHeight:p5lX.l3lX*C5lX.n4XX,hasInitPlayerPosition:!(U5lX.j4CX|C5lX.I4XX),pointer:U5lX.X4CX,ignorePause:!C5lX.I4XX,isClicking:!C5lX.n4XX,inputEnabled:!+U5lX.j4CX,jumpPower:+U5lX.k4CX,jumpPowerMin:p5lX.M5WX-C5lX.I4XX,jumpPowerMax:k3dX.O93X|C5lX.I4XX,jumpPowerIncrement:k3dX.O93X-C5lX.I4XX,jumpResult:t7lX,jumpTargetX:C5lX.I4XX,jumpTargetZ:U5lX.k4CX|C5lX.I4XX,landOnCenter:!+U5lX.j4CX,hasCleanedUp:!(U5lX.j4CX-C5lX.I4XX),enableUpdate:!+U5lX.k4CX,firstJump:!C5lX.I4XX,score:+U5lX.k4CX,tutorialTf:U5lX.X4CX,buttonImages:[new ig.Image(l7lX)],init:function(h66,D66,X66){var B7lX="40px mainfont";var k7lX="850";var X7lX="530";this.parent(h66,D66,X66);ig.global.wm||(ig.currentGame=this,this.settingsButton=ig.game.spawnEntity(EntityButton,X7lX*C5lX.n4XX,G3CX.u3uX-C5lX.I4XX,{singleFrameImage:this.buttonImages[G3CX.k4CX|C5lX.I4XX],anchorX:+G3CX.j4CX,anchorY:+G3CX.k4CX,scaleX:f5WX.j7lX-C5lX.I4XX,scaleY:f5WX.j7lX*C5lX.n4XX}),this.settingsButton.onClicked.add(this.onClickSettings,this),wgl.objects.cleanup(),this.initScene(),this.initPlayerPosition(),this.addCover(),this.fadeOutCover(),this.tutorialTf=ig.game.spawnEntity(EntityShadowText,+W3WX.n0WX,k7lX*C5lX.n4XX,{entryDelay:x3uX.V2LX*C5lX.n4XX,entryType:f5WX.o8lX,exitType:f5WX.u8lX,shadowOffsetY:C5lX.J4XX,anchorX:x3uX.V2LX-C5lX.I4XX,anchorY:+x3uX.V2LX,textString:_STRINGS.Game.Tutorial,textFont:B7lX,textAlign:k3dX.B4dX,textRgb:ig.color.hexToRgb(W3WX.M0WX)}));},fallPaused:!+U5lX.j4CX,onClickSettings:function(){this.isAllowInput&&(this.inputEnabled=this.isAllowInput=!C5lX.n4XX,this.showPopup(EntityGameplaySettingsPopup),ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click),this.tutorialTf&&this.tutorialTf.tween({alpha:C5lX.I4XX},A0UX.x0SX).start(),this.pauseTweens(),ig.soundHandler.sfxPlayer.soundList.fall.playing()&&(ig.soundHandler.sfxPlayer.soundList.fall.pause(),this.fallPaused=!+G3CX.k4CX));},onPopupFinished:function(W66){this.parent(W66);this.resumeTweens();C5lX.i4XX(C5lX.n4XX);this.isAllowInput=!C5lX.z4XX(C5lX.I4XX,G3CX.j4CX);C5lX.i4XX(C5lX.I4XX);this.delayedCall(C5lX.z4XX(C5lX.n4XX,x3uX.V2LX),function(){this.isAllowInput=this.inputEnabled=!+G3CX.k4CX;}.bind(this));this.tutorialTf&&this.tutorialTf.tween({alpha:C5lX.n4XX},x3uX.V2LX*C5lX.n4XX).start();this.fallPaused&&(this.fallPaused=!(G3CX.j4CX*C5lX.n4XX),ig.soundHandler.sfxPlayer.soundList.fall.play());C5lX.F4XX(C5lX.n4XX);this.isAllowInput=!C5lX.r4XX(C5lX.I4XX,G3CX.j4CX);},movePlayer:function(){},update:function(){this.enableUpdate&&(this.parent(),ig.game.justBlurred&&this.isAllowInput&&(this.isAllowInput=ig.game.justBlurred=!(G3CX.j4CX*C5lX.n4XX),this.delayedCall(A0UX.j4SX,function(){C5lX.F4XX(C5lX.n4XX);this.isAllowInput=!C5lX.z4XX(C5lX.I4XX,G3CX.k4CX);}.bind(this))),this.updateCamera(),this.updateInput(),this.updateJump(),wgl.objects.updateClouds(ig.system.tick));},isPlayingChargingSound:!+U5lX.j4CX,chargeCount:C5lX.n4XX,updateJump:function(){var Z2RX=G3CX;var M66,j66;if(!this.isJumping&&!(t7lX!=this.jumpResult&&m7lX!=this.jumpResult)&&this.isAllowInput&&!(C5lX.I4XXthis.jumpPowerMax&&(this.jumpPower=this.jumpPowerMax);this.firstJump&&x3uX.c4LX*C5lX.n4XXthis.player.position.z&&(l66=this.platformHalfWidth+E66);this.snapJumpPower(n66,b66,l66);L66+=this.jumpPower;}else{n66=Math.abs(A66.position.x-this.player.position.x),E66=Math.abs(N66.position.x-this.player.position.x),l66=this.platformHalfWidth-E66,N66.position.xa66-z66&&this.jumpTargetZa66-z66&&this.jumpTargetXf66+i66){if(p66k66+i66){this.jumpResult=D7lX;return;}if(p66>u66&&p66=Z66){this.jumpPower=k66;this.jumpResult=C5lX.n4XX==e66?s7lX:a7lX;return;}}p66f66+i66?this.jumpResult=D7lX:(this.jumpPower=f66,this.jumpResult=(G3CX.j4CX|C5lX.I4XX)==e66?s7lX:a7lX);},isJumping:!+U5lX.j4CX,playerJump:function(){var g2RX=G3CX;var F66,o66,y66,P66,B66,q66,R66;if(!this.isJumping){this.isJumping=!+g2RX.k4CX;ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.land);this.firstJump&&(this.tutorialTf.exit(),this.tutorialTf=g2RX.X4CX);this.inputEnabled=this.firstJump=!+g2RX.j4CX;F66=this.platforms[this.platforms.length-C5lX.w4XX].position.x==this.platforms[this.platforms.length-(g2RX.j4CX|C5lX.I4XX)].position.x?+g2RX.j4CX:C5lX.w4XX;o66=this.jumpTargetX;y66=this.jumpTargetZ;P66=this.player.position.y+A0UX.x0SX*this.jumpPower;B66=this.playerGroundY;q66=+f5WX.k8lX*this.jumpPower;+A0UX.I5SX>q66&&(q66=A0UX.I5SX-C5lX.I4XX);+g2RX.j4CXMath.random()?+t7QX.j4CX:+t7QX.U4CX;C5lX.i4XX(z9CX);var c6RR=C5lX.r4XX(C5lX.H8CX,C5lX.Y8CX,C5lX.K8CX,C5lX.O8CX);g06=+x3uX.c4LX*(f5WX.j7lX*c6RR*Math.random()+f5WX.j7lX*C5lX.n4XX);f06&&(g06=x3uX.c4LX-C5lX.I4XX,p06=+t7QX.U4CX);u06=i06.position.x-(+t7QX.j4CX==p06?g06:C5lX.I4XX);e06=i06.position.y;C5lX.i4XX(t7QX.r9CX);var y6RR=C5lX.z4XX(C5lX.y8CX,Y0CX,C5lX.W8CX,C5lX.f8CX,C5lX.O8CX);i06=i06.position.z+(t7QX.U4CX-C5lX.I4XX==p06?g06:t7QX.k4CX*y6RR);}f06=ig.game.getGameObjectId();p06=C5lX.I4XX==this.platforms.length?wgl.objects.createPlatform(+t7QX.Q4CX):wgl.objects.createRandomPlatform();p06.platformId=f06;p06.position.set(u06,e06,i06);this.platforms.push(p06);this.disposeObsoletePlatform();C5lX.F4XX(C5lX.n4XX);p06.scaling.x=C5lX.r4XX(C5lX.I4XX,t7QX.k4CX);p06.scaling.y=C5lX.I4XX;C5lX.F4XX(C5lX.n4XX);p06.scaling.z=C5lX.z4XX(C5lX.I4XX,t7QX.k4CX);C5lX.F4XX(C5lX.W8CX);this[C5lX.r4XX(f06,G7lX)]=p06;u06={};C5lX.F4XX(C5lX.W8CX);u06[C5lX.z4XX(f06,G7lX)]={scaling:{x:t7QX.j4CX-C5lX.I4XX,y:C5lX.n4XX,z:+t7QX.j4CX}};this.tween(u06,A0UX.Y5SX-C5lX.I4XX,{easing:ig.Tween.Easing.Quadratic.EaseOut}).start();},disposeObsoletePlatform:function(){var Z06;if((G3CX.n4CX|C5lX.I4XX)=this.score)){U96=ig.system.context;Y96=this.score+G3CX.e4CX;U96.save();U96.font=p7lX;U96.textAlign=k3dX.B4dX;U96.globalAlpha=f5WX.g3lX;U96.fillStyle=A0UX.I4SX;C5lX.i4XX(C5lX.I4XX);U96.fillText(Y96,+k3dX.G7fX,C5lX.r4XX(C5lX.n4XX,C7lX));C5lX.F4XX(C5lX.w4XX);U96.globalAlpha=C5lX.z4XX(C5lX.I4XX,G3CX.j4CX);U96.fillStyle=W3WX.M0WX;U96.fillText(Y96,C5lX.a3CX,+x3uX.n3rX);U96.restore();}},addCover:function(){C5lX.F4XX(C5lX.w4XX);this.cover=ig.game.spawnEntity(EntityGameObject,C5lX.z4XX(C5lX.I4XX,G3CX.k4CX),+G3CX.k4CX,{width:+W3WX.u2WX,height:W3WX.L2WX*C5lX.n4XX,drawAsRect:!+G3CX.k4CX,rectColor:ig.color.hexToRgb(ig.game.fadeColors[+G3CX.k4CX]),zIndex:+f5WX.U3lX});},fadeOutCover:function(){this.cover.alpha=+G3CX.j4CX;C5lX.F4XX(C5lX.w4XX);this.cover.visible=!C5lX.z4XX(C5lX.I4XX,G3CX.k4CX);this.cover.tween({alpha:+G3CX.k4CX},ig.game.fadeDuration,{onComplete:function(){this.cover.visible=!C5lX.n4XX;}.bind(this)}).start();},fadeInCover:function(){C5lX.F4XX(C5lX.n4XX);this.isAllowInput=!C5lX.z4XX(C5lX.I4XX,G3CX.j4CX);this.cover.alpha=C5lX.I4XX;this.cover.visible=!+G3CX.k4CX;this.cover.tween({alpha:+G3CX.j4CX},ig.game.fadeDuration).start();}});});H5ZZ.i4XX(H5ZZ.w4XX);ig.baked=!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(f5WX.v7lX).requires(W3WX.H6WX,f5WX.Q7lX).defines(function(){var H7lX="EntityWebglControlGameplay";LevelWebglGameplay={entities:[{type:H7lX,x:G3CX.k4CX-H5ZZ.I4XX,y:+G3CX.k4CX}],layer:[]};});ig.baked=!H5ZZ.I4XX;ig.module(f5WX.A7lX).requires(W3WX.w1WX,f5WX.s8lX,f5WX.K3lX,f5WX.a8lX,f5WX.d3lX).defines(function(){var o7lX="media/graphics/sprites/button-restart.png";EntityLevelEndController=EntityController.extend({fadeInAlpha:H5ZZ.n4XX,fadeOutAlpha:+G3CX.k4CX,characterSelect:G3CX.X4CX,Images:[new ig.Image(f5WX.V8lX),new ig.Image(o7lX)],cover:G3CX.X4CX,init:function(S96,m96,r96){var u78X=x3uX;var o78X=k3dX;var A78X=W3WX;var H78X=G3CX;var v78X=H5ZZ;var c7lX="410";var x7lX="56px mainfont";var e7lX="330";var L7lX="260";var u7lX="96px mainfont";var J96;this.parent(S96,m96,r96);v78X.i4XX(v78X.I4XX);this.isAllowInput=!v78X.r4XX(v78X.n4XX,H78X.k4CX);v78X.i4XX(v78X.w4XX);this.homeButton=ig.game.spawnEntity(EntityButton,+A78X.M1WX,v78X.z4XX(v78X.I4XX,o78X.X53X),{singleFrameImage:this.Images[H78X.k4CX*v78X.n4XX],anchorX:u78X.V2LX*v78X.n4XX,anchorY:A0UX.x0SX});this.homeButton.onClicked.add(this.onClickHome,this);v78X.i4XX(v78X.n4XX);this.playButton=ig.game.spawnEntity(EntityButton,+f5WX.f7lX,v78X.r4XX(v78X.I4XX,o78X.X53X),{singleFrameImage:this.Images[v78X.n4XX],anchorX:u78X.V2LX-v78X.I4XX,anchorY:+u78X.V2LX});this.playButton.onClicked.add(this.onClickPlay,this);v78X.i4XX(v78X.I4XX);this.characterSelect=ig.game.spawnEntity(EntityCharacterSelect,v78X.z4XX(v78X.n4XX,H78X.k4CX),v78X.I4XX,{offset:u78X.c4LX|v78X.I4XX,offset3d:-+o78X.o23X});this.characterSelect.parentController=this;S96=ig.game.spawnEntity(EntityShadowText,+A78X.n0WX,+o78X.G7fX,{shadowOffsetY:v78X.w4XX,anchorX:A0UX.x0SX,anchorY:+u78X.V2LX,textString:_STRINGS.Game.Score,textFont:f5WX.S7lX,textAlign:o78X.B4dX,textRgb:ig.color.hexToRgb(A78X.M0WX)});v78X.i4XX(v78X.I4XX);ig.game.spawnEntity(EntityShadowText,v78X.z4XX(v78X.n4XX,A78X.n0WX),v78X.r4XX(v78X.n4XX,u78X.W7uX),{shadowOffsetY:H78X.O8uX*v78X.n4XX,anchorX:+u78X.V2LX,anchorY:u78X.V2LX-v78X.I4XX,textString:H78X.e4CX+ig.game.lastScore,textFont:u7lX,textAlign:o78X.B4dX,textRgb:ig.color.hexToRgb(A78X.M0WX)});v78X.F4XX(v78X.w4XX);ig.game.spawnEntity(EntityShadowText,H78X.f2CX,v78X.r4XX(v78X.I4XX,L7lX),{shadowOffsetY:H78X.U4CX-v78X.I4XX,anchorX:u78X.V2LX-v78X.I4XX,anchorY:A0UX.x0SX,textString:_STRINGS.Game.Best,textFont:f5WX.S7lX,textAlign:o78X.B4dX,textRgb:ig.color.hexToRgb(A78X.M0WX)});v78X.i4XX(v78X.I4XX);m96=ig.game.spawnEntity(EntityShadowText,H78X.f2CX,v78X.r4XX(v78X.n4XX,e7lX),{shadowOffsetY:H78X.t4CX|v78X.I4XX,anchorX:A0UX.x0SX,anchorY:u78X.V2LX*v78X.n4XX,textString:H78X.e4CX+ig.game.sessionData.score,textFont:x7lX,textAlign:o78X.B4dX,textRgb:ig.color.hexToRgb(A78X.M0WX)});this.addCover();this.fadeOutCover();if(ig.game.lastScore>ig.game.sessionData.score){r96=ig.game.sessionData.score;ig.game.sessionData.score=ig.game.lastScore;ig.game.saveAll();for(var d96=H78X.k4CX|v78X.I4XX;d96=J96){this.characterSelect.refreshPlayer(d96);v78X.i4XX(v78X.n4XX);ig.game.spawnEntity(EntityShadowText,+A78X.n0WX,v78X.r4XX(v78X.I4XX,c7lX),{shadowOffsetY:v78X.P4XX,anchorX:+u78X.V2LX,anchorY:+u78X.V2LX,textString:_STRINGS.Game.Unlock,textFont:x7lX,textAlign:o78X.B4dX,textRgb:ig.color.hexToRgb(A78X.M0WX)});break;}}m96.textString=ig.game.lastScore+H78X.e4CX;S96.textString=_STRINGS.Game.NewBest;}ig.game.sortEntitiesDeferred();ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.endlevel);},addCover:function(){var b78X=H5ZZ;b78X.i4XX(b78X.w4XX);this.cover=ig.game.spawnEntity(EntityGameObject,+G3CX.k4CX,b78X.r4XX(b78X.I4XX,G3CX.k4CX),{width:+W3WX.u2WX,height:+W3WX.L2WX,drawAsRect:!b78X.I4XX,rectColor:ig.color.hexToRgb(ig.game.fadeColors[G3CX.k4CX|b78X.I4XX]),zIndex:f5WX.U3lX*b78X.n4XX});},fadeOutCover:function(){var D78X=H5ZZ;D78X.i4XX(D78X.I4XX);this.cover.alpha=D78X.z4XX(D78X.n4XX,G3CX.j4CX);D78X.F4XX(D78X.w4XX);this.cover.visible=!D78X.r4XX(D78X.I4XX,G3CX.k4CX);this.cover.tween({alpha:G3CX.k4CX*D78X.n4XX},ig.game.fadeDuration,{onComplete:function(){this.cover.visible=!+G3CX.j4CX;}.bind(this)}).start();},fadeInCover:function(){this.cover.alpha=+G3CX.k4CX;H5ZZ.F4XX(H5ZZ.I4XX);this.cover.visible=!H5ZZ.z4XX(H5ZZ.n4XX,G3CX.k4CX);this.cover.tween({alpha:+G3CX.j4CX},ig.game.fadeDuration).start();},update:function(){this.parent();wgl.objects.updateClouds(ig.system.tick);},onClickHome:function(){!this.characterSelect.isDragging&&this.isAllowInput&&(this.isAllowInput=!(G3CX.j4CX-H5ZZ.I4XX),this.fadeInCover(),this.tween({},ig.game.fadeDuration,{onComplete:function(){H5ZZ.i4XX(H5ZZ.I4XX);ig.game.director.loadLevel(H5ZZ.z4XX(H5ZZ.n4XX,G3CX.j4CX));}.bind(this)}).start(),ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click));},onClickPlay:function(){!this.characterSelect.isDragging&&this.isAllowInput&&(this.isAllowInput=!(G3CX.j4CX|H5ZZ.I4XX),this.fadeInCover(),this.tween({},ig.game.fadeDuration,{onComplete:function(){H5ZZ.i4XX(H5ZZ.I4XX);ig.game.director.loadLevel(H5ZZ.r4XX(H5ZZ.n4XX,G3CX.l4CX));}.bind(this)}).start(),this.tween({},W3WX.I0WX*H5ZZ.n4XX,{onComplete:function(){H5ZZ.i4XX(H5ZZ.w4XX);this.characterSelect.enableRotation=!H5ZZ.r4XX(H5ZZ.I4XX,G3CX.j4CX);wgl.objects.cleanup();}.bind(this)}).start(),ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click));},draw:function(){this.parent();ig.global.wm||ig.system.context.clearRect(H5ZZ.I4XX,H5ZZ.I4XX,ig.system.width,ig.system.height);}});});ig.baked=!H5ZZ.I4XX;ig.module(f5WX.T7lX).requires(W3WX.H6WX,f5WX.A7lX).defines(function(){var M7lX="EntityLevelEndController";LevelEnd={entities:[{type:M7lX,x:H5ZZ.I4XX,y:+G3CX.k4CX}],layer:[]};});ig.baked=!+G3CX.k4CX;ig.module(f5WX.N7lX).defines(function(){wgl.Game=ig.Class.extend({entities:[],ready:!H5ZZ.n4XX,init:function(){},update:function(){this.entitiesIndexToKill=[];for(var G96=+G3CX.k4CX;G96>>e2AX.j4CX*r6RR;o2AX.i4XX(o2AX.I4XX);o96=BABYLON.Mesh.CreateCylinder(k3dX.t03X,R96,o2AX.r4XX(o2AX.n4XX,L2AX.c8SX),+L2AX.c8SX,o2AX.z4XX(o2AX.I4XX,e2AX.O8uX,o2AX.F4XX(o2AX.w4XX)),+e2AX.t4CX,y96,!o2AX.r4XX(o2AX.I4XX,e2AX.j4CX,o2AX.F4XX(o2AX.n4XX)));o96.material=new BABYLON.StandardMaterial(J7lX,y96);o2AX.F4XX(o2AX.n4XX);o96.material.diffuseColor=new BABYLON.Color3(o2AX.I4XX,+e2AX.j4CX,o2AX.z4XX(o2AX.I4XX,e2AX.k4CX));o2AX.F4XX(o2AX.w4XX);o96.position=new BABYLON.Vector3(o2AX.z4XX(o2AX.I4XX,e2AX.k4CX),o2AX.r4XX(R96,e2AX.U4CX,o2AX.F4XX(o2AX.j8CX)),o2AX.I4XX);o2AX.F4XX(o2AX.w4XX);o96=BABYLON.Mesh.CreateCylinder(k3dX.V7fX,R96,+L2AX.c8SX,+L2AX.c8SX,o2AX.r4XX(o2AX.I4XX,e2AX.O8uX),+e2AX.t4CX,y96,!o2AX.r4XX(o2AX.n4XX,e2AX.j4CX,o2AX.i4XX(o2AX.I4XX)));o96.material=new BABYLON.StandardMaterial(K6lX,y96);o2AX.i4XX(o2AX.n4XX);o96.material.diffuseColor=new BABYLON.Color3(o2AX.z4XX(o2AX.I4XX,e2AX.k4CX),o2AX.z4XX(o2AX.I4XX,e2AX.k4CX),+e2AX.j4CX);o2AX.F4XX(o2AX.n4XX);o96.position=new BABYLON.Vector3(o2AX.I4XX,o2AX.r4XX(o2AX.I4XX,e2AX.k4CX),o2AX.r4XX(e2AX.U4CX,o2AX.n4XX,R96,o2AX.i4XX(o2AX.X8CX)));o96.rotation.x=Math.PI>>>(e2AX.j4CX|o2AX.I4XX);}});});ig.baked=!+G3CX.k4CX;ig.module(f5WX.R6lX).requires(f5WX.O5WX).defines(function(){wgl.modules.GameCamera=wgl.Entity.extend({camera:G3CX.X4CX,controlEnabled:!(G3CX.j4CX-H5ZZ.I4XX),name:x3uX.A4uX,cameraCounter:G3CX.X4CX,addedDebugDraw:!H5ZZ.n4XX,hitbox:G3CX.X4CX,init:function(B96,P96,s96,O96){var m2AX=H5ZZ;var B2AX=G3CX;var W6lX="Cube";this.parent(B96,P96,s96,O96);ig.merge(this,O96);O96._camera&&(this.camera=O96._camera,wgl.game.camera=this.camera);ig.ua.touchDevice?(P96=wgl.game.currentScene,B96=P96.activeCamera,P96.activeCamera=B96,B96.attachControl(window),B96.ellipsoid=new BABYLON.Vector3(+B2AX.U4CX,B2AX.U4CX-m2AX.I4XX,+B2AX.U4CX),wgl.game.currentScene.collisionsEnabled=!(B2AX.k4CX-m2AX.I4XX),B96.checkCollisions=!m2AX.I4XX,P96=wgl.game.getMeshByName(W6lX),P96.checkCollisions=!m2AX.I4XX,this.camera=B96):(P96=wgl.game.currentScene,B96=P96.activeCamera,B96.attachControl(window),B96.ellipsoid=new BABYLON.Vector3(B2AX.U4CX*m2AX.n4XX,+B2AX.U4CX,m2AX.w4XX),wgl.game.currentScene.collisionsEnabled=!(B2AX.k4CX|m2AX.I4XX),B96.checkCollisions=!(B2AX.k4CX*m2AX.n4XX),P96=wgl.game.getMeshByName(W6lX),P96.checkCollisions=!(B2AX.k4CX|m2AX.I4XX),this.camera=B96,this.camera.keysUp.push(ig.KEY.W),this.camera.keysDown.push(ig.KEY.S),this.camera.keysLeft.push(ig.KEY.A));this.camera.keysRight.push(ig.KEY.D);m2AX.F4XX(m2AX.w4XX);this.camera.fov=m2AX.z4XX(m2AX.I4XX,k3dX.K03X);m2AX.i4XX(m2AX.I4XX);this.camera.minZ=m2AX.r4XX(m2AX.n4XX,A0UX.c8SX);this.camera.maxZ=+A0UX.t5UX;m2AX.F4XX(m2AX.w4XX);this.camera.angularSensibility=m2AX.r4XX(m2AX.I4XX,f5WX.r3lX);m2AX.F4XX(m2AX.w4XX);this.camera.inertia=m2AX.z4XX(m2AX.I4XX,f5WX.B8lX);this.camera.speed=m2AX.J4XX;this.setupHitbox();},setupHitbox:function(){this.hitbox=BABYLON.Mesh.CreateBox(k3dX.B23X,+G3CX.u3uX,wgl.game.currentScene);this.hitbox.parent=this.camera;},update:function(){var T96;this.parent();if(wgl.debug.debug){if(!this.addedDebugDraw){T96=function(){var Q6lX=" angularSensibility: ";var S6lX=" speed: ";var O6lX=" fovMode: ";var f6lX=" innertia: ";var y6lX=" maxZ: ";var g6lX=" minZ: ";var d6lX="FOV:";ig.system.context.fillText(d6lX+this.camera.fov+g6lX+this.camera.minZ+y6lX+this.camera.maxZ+f6lX+this.camera.inertia+O6lX+this.camera.fovMode+S6lX+this.camera.speed+Q6lX+this.camera.angularSensibility,x3uX.b2rX*H5ZZ.n4XX,x3uX.f5LX-H5ZZ.I4XX);}.bind(this);ig.game.lastDraw.push(T96);}this.addedDebugDraw=!+G3CX.k4CX;}},kill:function(){this.parent();this.hitbox.dispose();this.camera.dispose();}});});ig.baked=!+G3CX.k4CX;ig.module(f5WX.Y6lX).requires(f5WX.O5WX).defines(function(){wgl.modules.Laser=wgl.Entity.extend({lifeTimer:G3CX.X4CX,lifeTime:H5ZZ.y8CX,indexID:G3CX.X4CX,deltaRotation:new BABYLON.Vector3.Zero(),laserMaterial:G3CX.X4CX,array:G3CX.X4CX,init:function(H36,Y36,d36,U36){var H6AX=G3CX;var v6AX=H5ZZ;var X6lX=0.7;var l6lX="texture1";var t6lX="pl";this.parent(H36,Y36,d36,U36);this.lifeTimer=new ig.Timer();this.meshes.push(BABYLON.MeshBuilder.CreatePlane(t6lX,{width:v6AX.w4XX,height:v6AX.i8CX},wgl.game.currentScene));this.meshes[+H6AX.k4CX].position=new BABYLON.Vector3.Zero();this.laserMaterial=new BABYLON.StandardMaterial(l6lX,wgl.game.currentScene);this.laserMaterial.emissiveColor=new BABYLON.Color3(+H6AX.j4CX,f5WX.m8lX,X6lX);this.laserMaterial.backFaceCulling=!+H6AX.j4CX;console.log(this.laserMaterial);this.meshes[+H6AX.k4CX].material=this.laserMaterial;this.meshes[+H6AX.k4CX].position=this.pos;U36.indexID&&(this.indexID=U36.indexID);U36.array&&(this.array=U36.array);H36=+H6AX.j4CX*Math.random();this.deltaRotation.x=x3uX.V2LX-v6AX.I4XX>H36?v6AX.y8CX*Math.random():-+H6AX.u3uX*Math.random();H36=v6AX.n4XX*Math.random();this.deltaRotation.y=x3uX.V2LX*v6AX.n4XX>H36?H6AX.u3uX*v6AX.n4XX*Math.random():-(H6AX.u3uX-v6AX.I4XX)*Math.random();v6AX.F4XX(v6AX.w4XX);var V6RR=v6AX.r4XX(v6AX.Y8CX,v6AX.t8CX);H36=V6RR*Math.random();this.deltaRotation.z=+x3uX.V2LX>H36?+H6AX.u3uX*Math.random():-+H6AX.u3uX*Math.random();},update:function(){this.parent();this.lifeTimer&&this.lifeTimer.delta()>this.lifeTime?this.kill():(this.meshes[+G3CX.k4CX].rotation.x+=this.deltaRotation.x*ig.system.tick,this.meshes[+G3CX.k4CX].rotation.y+=this.deltaRotation.y*ig.system.tick,this.meshes[+G3CX.k4CX].rotation.z+=this.deltaRotation.z*ig.system.tick);},kill:function(){this.parent();this.array.splice(this.indexID,+G3CX.j4CX);}});});ig.baked=!H5ZZ.I4XX;ig.module(f5WX.j6lX).requires(f5WX.O5WX,f5WX.Y6lX).defines(function(){wgl.modules.LaserSpawner=wgl.Entity.extend({laserArray:[],laserLength:H5ZZ.i8CX,laserPattern:G3CX.X4CX,laserTimer:G3CX.X4CX,spawnTime:H5ZZ.P4XX,spawnLimit:G3CX.l4CX|H5ZZ.I4XX,name:f5WX.K7lX,startSpawn:!+G3CX.j4CX,init:function(S36,m36,r36,J36){this.parent(S36,m36,r36,J36);this.laserTimer=new ig.Timer();},update:function(){this.parent();this.laserTimer&&(this.startSpawn||this.laserTimer.reset(),this.laserTimer.delta()>this.spawnTime&&this.laserArray.lengthV36;V36++){this.players[V36]=wgl.game.currentScene.getMeshByName(a6lX+V36),this.players[V36].position.set(j3AX.k4CX|J0lX.I4XX,+j3AX.k4CX,-j3AX.x2CX),w36.addShadowCaster(this.players[V36]);}for(w36=+j3AX.k4CX;+k3AX.I3uX>w36;w36++){this.platforms[w36]=wgl.game.currentScene.getMeshByName(G6lX+w36),this.platforms[w36].position.set(+j3AX.k4CX,j3AX.k4CX|J0lX.I4XX,-+k3AX.h7uX),this.platforms[w36].receiveShadows=!(j3AX.k4CX|J0lX.I4XX);}for(w36=+j3AX.k4CX;J0lX.K8CX>w36;w36++){this.bgs[w36]=wgl.game.currentScene.getMeshByName(b6lX+w36),this.bgs[w36].position.set(+j3AX.k4CX,j3AX.k4CX|J0lX.I4XX,-(k3AX.h7uX|J0lX.I4XX)),this.bgs[j3AX.k4CX|J0lX.I4XX].scaling.set(j3AX.l4CX|J0lX.I4XX,j3AX.t4CX*J0lX.n4XX,+j3AX.l4CX);}for(w36=+j3AX.k4CX;+j3AX.Q4CX>w36;w36++){V36=j3AX.X4CX,J0lX.P4XX>w36?(V36=wgl.game.currentScene.getMeshByName(U6lX+w36),V36.convertToFlatShadedMesh()):V36=this.clouds[w36%+j3AX.l4CX].createInstance(U6lX+w36),V36.position.set(-j3AX.r3CX,-(k3AX.f5LX|J0lX.I4XX),+j3AX.k4CX),V36.cloudY=+j3AX.k4CX,V36.cloudZ=-(k3AX.f5LX-J0lX.I4XX)+(p6lX|J0lX.I4XX)*w36,V36.oddCloud=j3AX.j4CX*J0lX.n4XX==w36%(j3AX.U4CX*J0lX.n4XX),V36.scaling.set(j3AX.U4CX-J0lX.I4XX,+j3AX.U4CX,+j3AX.U4CX),this.randomizeCloudX(V36),this.clouds[w36]=V36;}J0lX.i4XX(J0lX.w4XX);var f6RR=J0lX.z4XX(J0lX.Q8CX,J0lX.Y8CX);this.cloudTrainLength=p6lX*f6RR*this.clouds.length;},createPlatform:function(Q36){this.prevPlatformId=Q36;return this.platforms[Q36].createInstance(C6lX);},createRandomPlatform:function(){for(var h36=ig.random.int(+G3CX.k4CX,x3uX.c3uX*J0lX.n4XX);h36==this.prevPlatformId;){J0lX.F4XX(J0lX.I4XX);h36=ig.random.int(+G3CX.k4CX,J0lX.z4XX(J0lX.n4XX,x3uX.c3uX));}return this.createPlatform(h36);},getPlayerHeight:function(D36){return this.playerHeight[D36];},getPlayer:function(X36){return this.players[X36];},createLandEffect:function(){var W36;W36=this.landEffect.clone(C6lX);W36.id=C6lX;return W36;},hideAllPlayers:function(){var H8AX=G3CX;for(var j36=H8AX.k4CX|J0lX.I4XX;j36k36.cloudZ&&(k36.cloudZ+=this.cloudTrainLength,this.randomizeCloudX(k36));k36.position.set(e36+k36.cloudX,Z36+k36.cloudY,f36+k36.cloudZ);}},randomizeCloudX:function(o36){var N5ZX=G3CX;var F36;o36.cloudX=o36.oddCloud?J0lX.i8CX*ig.random.float(+N5ZX.l4CX,+N5ZX.V8uX):+x3uX.c4LX*ig.random.float(-+N5ZX.j4CX,+N5ZX.U4CX);J0lX.i4XX(J0lX.n4XX);F36=ig.random.float(J0lX.w4XX,J0lX.r4XX(J0lX.I4XX,N5ZX.l4CX));o36.scaling.set(F36,F36,F36);},showAxis:function(y36){var V0ZX=W3WX;var h0ZX=G3CX;var c6lX="blue";var x6lX="axisZ";var e6lX="green";var L6lX=0.95;var u6lX="axisY";var o6lX="0.95";var A6lX="axisX";var R36,B36;R36=wgl.game.currentScene;B36=function(P36,s36,T36){var B1PX=G3CX;var H6lX="TextPlane";var v6lX="bold 36px Arial";var O36;J0lX.F4XX(J0lX.n4XX);O36=new BABYLON.DynamicTexture(k3dX.L43X,+x3uX.c4LX,R36,!J0lX.r4XX(J0lX.I4XX,B1PX.k4CX));J0lX.F4XX(J0lX.w4XX);O36.hasAlpha=!J0lX.r4XX(J0lX.I4XX,B1PX.k4CX);J0lX.i4XX(J0lX.I4XX);O36.drawText(P36,+B1PX.V8uX,+x3uX.S1rX,v6lX,s36,k3dX.F43X,!J0lX.r4XX(J0lX.n4XX,B1PX.k4CX));P36=new BABYLON.Mesh.CreatePlane(H6lX,T36,R36,!+B1PX.k4CX);P36.material=new BABYLON.StandardMaterial(k3dX.e43X,R36);J0lX.F4XX(J0lX.w4XX);P36.material.backFaceCulling=!J0lX.z4XX(J0lX.I4XX,B1PX.j4CX);P36.material.specularColor=new BABYLON.Color3(+B1PX.k4CX,+B1PX.k4CX,+B1PX.k4CX);P36.material.diffuseTexture=O36;return P36;};J0lX.F4XX(J0lX.I4XX);BABYLON.Mesh.CreateLines(A6lX,[new BABYLON.Vector3.Zero(),new BABYLON.Vector3(y36,h0ZX.k4CX-J0lX.I4XX,+h0ZX.k4CX),new BABYLON.Vector3(+o6lX*y36,V0ZX.F6WX*J0lX.n4XX*y36,J0lX.I4XX),new BABYLON.Vector3(y36,+h0ZX.k4CX,+h0ZX.k4CX),new BABYLON.Vector3(+o6lX*y36,-(V0ZX.F6WX-J0lX.I4XX)*y36,+h0ZX.k4CX)],R36).color=new BABYLON.Color3(J0lX.z4XX(J0lX.n4XX,h0ZX.j4CX),J0lX.r4XX(J0lX.I4XX,h0ZX.k4CX,J0lX.i4XX(J0lX.w4XX)),J0lX.z4XX(J0lX.I4XX,h0ZX.k4CX,J0lX.i4XX(J0lX.n4XX)));J0lX.i4XX(J0lX.K3CX);B36(x3uX.T5uX,k3dX.W8UX,y36/J0lX.y8CX).position=new BABYLON.Vector3(J0lX.r4XX(A0UX.p5SX,y36),J0lX.z4XX(J0lX.n4XX,V0ZX.F6WX,y36,J0lX.F4XX(h0ZX.g1CX)),J0lX.I4XX);J0lX.F4XX(J0lX.n4XX);BABYLON.Mesh.CreateLines(u6lX,[new BABYLON.Vector3.Zero(),new BABYLON.Vector3(h0ZX.k4CX*J0lX.n4XX,y36,J0lX.I4XX),new BABYLON.Vector3(-+V0ZX.F6WX*y36,L6lX*y36,J0lX.I4XX),new BABYLON.Vector3(J0lX.I4XX,y36,h0ZX.k4CX*J0lX.n4XX),new BABYLON.Vector3(+V0ZX.F6WX*y36,(o6lX-J0lX.I4XX)*y36,h0ZX.k4CX|J0lX.I4XX)],R36).color=new BABYLON.Color3(J0lX.r4XX(J0lX.I4XX,h0ZX.k4CX),+h0ZX.j4CX,+h0ZX.k4CX);J0lX.i4XX(h0ZX.k7CX);B36(x3uX.M5uX,e6lX,y36/+h0ZX.u3uX).position=new BABYLON.Vector3(J0lX.I4XX,J0lX.z4XX(y36,J0lX.n4XX,A0UX.p5SX),J0lX.r4XX(y36,V0ZX.F6WX,J0lX.i4XX(h0ZX.H3CX)));J0lX.F4XX(J0lX.n4XX);BABYLON.Mesh.CreateLines(x6lX,[new BABYLON.Vector3.Zero(),new BABYLON.Vector3(h0ZX.k4CX*J0lX.n4XX,+h0ZX.k4CX,y36),new BABYLON.Vector3(h0ZX.k4CX*J0lX.n4XX,-+V0ZX.F6WX*y36,(o6lX-J0lX.I4XX)*y36),new BABYLON.Vector3(+h0ZX.k4CX,h0ZX.k4CX-J0lX.I4XX,y36),new BABYLON.Vector3(J0lX.I4XX,(V0ZX.F6WX-J0lX.I4XX)*y36,+o6lX*y36)],R36).color=new BABYLON.Color3(J0lX.I4XX,J0lX.r4XX(J0lX.I4XX,h0ZX.k4CX),J0lX.n4XX);J0lX.F4XX(J0lX.K3CX);B36(x3uX.N5uX,c6lX,y36/+h0ZX.u3uX).position=new BABYLON.Vector3(+h0ZX.k4CX,J0lX.z4XX(V0ZX.F6WX,y36),J0lX.z4XX(A0UX.p5SX,y36));}};});H5ZZ.F4XX(H5ZZ.w4XX);ig.baked=!H5ZZ.z4XX(H5ZZ.I4XX,G3CX.k4CX);ig.module(f5WX.T6lX).requires(f5WX.S5WX).defines(function(){ig.Entity.prototype.delayedCall=function(H76,Y76,U76){void+G3CX.k4CX===U76&&(U76=!(G3CX.k4CX|H5ZZ.I4XX));H76=new ig.Tween(this,{},H76,{onComplete:Y76});this.tweens.push(H76);U76&&H76.start();return H76;};});ig.baked=!+G3CX.k4CX;ig.module(M6lX.N6lX).defines(function(){ig.random={bool:function(){var H9ZX=H5ZZ;var i9CX=361;H9ZX.F4XX(i9CX);var P6RR=H9ZX.r4XX(H9ZX.g8CX,H9ZX.P4XX,H9ZX.Y8CX,G3CX.e6CX,H9ZX.W8CX);return x3uX.V2LX*P6RR>Math.random();},"int":function(d76,S76){return d76+Math.floor((S76-d76+(G3CX.j4CX|H5ZZ.I4XX))*Math.random());},"float":function(m76,r76){return m76+(r76-m76)*Math.random();},string:function(w76,J76){var h6lX="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";void H5ZZ.I4XX===J76&&(J76=h6lX);for(var G76=G3CX.e4CX,v76=+G3CX.k4CX;v76+M1QX.k4CX?M1QX.Q4CX*N2RX.n4XX:N2RX.R8CX;break;case+M1QX.L3uX:N2RX.i4XX(N2RX.w4XX);t86=K86.l6NN(N2RX.r4XX(N2RX.I4XX,M1QX.k4CX),K86.length);i86=t86.length;return m46.X9(t86,i86,k86);break;case+N1QX.c3uX:t86=K86.l6NN(K86.length-u86,K86.length);i86=t86.length;return m46.X9(t86,i86,k86);break;case M1QX.O8uX*N2RX.n4XX:p86=u86===M1QX.X4CX||u86<=+M1QX.k4CX?+M1QX.L3uX:N2RX.f8CX;break;}}}}();r46.H9=u2lX;m46.H4=function(){return typeof m46.x4.C6===Z1lX?m46.x4.C6.apply(m46.x4,arguments):m46.x4.C6;};m46.z5=L2lX;m46.x5=f3RX.e4CX;r46.W9=e2lX;m46.o0=function(){return typeof m46.f0.C6===Z1lX?m46.f0.C6.apply(m46.f0,arguments):m46.f0.C6;};m46.A5=q5CX;r46.E9=x2lX;m46.L8=c2lX;m46.a8=T2lX;m46.o6=M2lX;m46.P3=function(){return typeof m46.z3.l===Z1lX?m46.z3.l.apply(m46.z3,arguments):m46.z3.l;};r46.r9=N2lX;function m46(){}r46.U9=h2lX;m46.b8=V2lX;m46.N5=(+z2lX,r2lX)===(+i2lX,F2lX-O3RX.I4XX)?+I2lX:n2lX;m46.R9=function(){return typeof m46.w9.l===Z1lX?m46.w9.l.apply(m46.w9,arguments):m46.w9.l;};r46.Z9=w2lX;m46.n3=function(){return typeof m46.z3.O6===Z1lX?m46.z3.O6.apply(m46.z3,arguments):m46.z3.O6;};m46.c3=function(){return typeof m46.z3.l===Z1lX?m46.z3.l.apply(m46.z3,arguments):m46.z3.l;};O3RX.F4XX(O3RX.I4XX);r46.A9=O3RX.z4XX(O3RX.n4XX,P2lX);m46.m6=f3RX.X4CX;function r46(){}m46.z8=J2lX;m46.i6=S3RX.X4SX;m46.F5=K9lX;m46.y6=R9lX;m46.z3=function(r26){return{a3:function(){var e1QX=H5ZZ;var L1QX=G3CX;var G26,J26;J26=arguments;switch(r26){case+L1QX.U4CX:e1QX.i4XX(e1QX.y8CX);var i6RR=e1QX.z4XX(e1QX.C8CX,e1QX.C8CX);G26=J26[i6RR]+J26[e1QX.I4XX];break;case L1QX.j4CX|e1QX.I4XX:G26=J26[+L1QX.k4CX]*J26[+L1QX.j4CX];break;case+L1QX.l4CX:G26=J26[e1QX.I4XX]%J26[+L1QX.j4CX];break;case L1QX.t4CX-e1QX.I4XX:e1QX.i4XX(e1QX.y8CX);var A6RR=e1QX.r4XX(e1QX.O8CX,e1QX.O8CX);G26=J26[A6RR]|J26[e1QX.I4XX];break;case+L1QX.k4CX:e1QX.i4XX(e1QX.v8CX);var b6RR=e1QX.r4XX(e1QX.K8CX,e1QX.K8CX,e1QX.n4XX,e1QX.y8CX);G26=J26[b6RR]-J26[+L1QX.k4CX];break;}return G26;},f3:function(v26){r26=v26;}};}();m46.x7=f3RX.j4CX;r46.d9=W9lX;m46.V5=+d9lX;O3RX.F4XX(O3RX.w4XX);m46.m5=O3RX.r4XX(O3RX.I4XX,x3uX.B1uX);m46.F0=function(){return typeof m46.f0.l===Z1lX?m46.f0.l.apply(m46.f0,arguments):m46.f0.l;};r46.M9=g9lX;m46.C8=y9lX;r46.G9=f9lX;m46.B5=S3RX.C4UX;O3RX.i4XX(O3RX.w4XX);m46.k5=O3RX.z4XX(O3RX.I4XX,f3RX.k4CX);m46.r4=function(){return typeof m46.x4.l===Z1lX?m46.x4.l.apply(m46.x4,arguments):m46.x4.l;};m46.U8=f3RX.U4CX;m46.o5=function(){return typeof m46.z3.p1===Z1lX?m46.z3.p1.apply(m46.z3,arguments):m46.z3.p1;};m46.t9=O9lX;m46.e5=function(){return typeof m46.z3.f3===Z1lX?m46.z3.f3.apply(m46.z3,arguments):m46.z3.f3;};m46.s0=function(){return typeof m46.f0.C6===Z1lX?m46.f0.C6.apply(m46.f0,arguments):m46.f0.C6;};m46.Y8=S9lX;m46.E4=function(){return typeof m46.x4.C6===Z1lX?m46.x4.C6.apply(m46.x4,arguments):m46.x4.C6;};m46.Y7=S3RX.c8SX;m46.S5=Q9lX;m46.a5=Y9lX;r46.l9=t9lX;O3RX.i4XX(O3RX.I4XX);m46.X5=O3RX.z4XX(O3RX.n4XX,l9lX);m46.Q5=function(){return typeof m46.z3.a3===Z1lX?m46.z3.a3.apply(m46.z3,arguments):m46.z3.a3;};r46.s9=f3RX.N8uX;r46.p9=X9lX;O3RX.i4XX(O3RX.w4XX);m46.l5=O3RX.z4XX(O3RX.I4XX,f3RX.j4CX);r46.B9=S3RX.w8SX;m46.W5=function(){return typeof m46.z3.f3===Z1lX?m46.z3.f3.apply(m46.z3,arguments):m46.z3.f3;};m46.c5=j9lX;_=~[];_={___:++_,$$$$:(![]+m46.x5)[_],__$:++_,$_$_:(![]+m46.x5)[_],_$_:++_,$_$$:({}+m46.x5)[_],$$_$:(_[_]+m46.x5)[_],_$$:++_,$$$_:(!m46.x5+m46.x5)[_],$__:++_,$_$:++_,$$__:({}+m46.x5)[_],$$_:++_,$$$:++_,$___:++_,$__$:++_};_.$_=(_.$_=_+m46.x5)[_.$_$]+(_._$=_.$_[_.__$])+(_.$$=(_.$+m46.x5)[_.__$])+(!_+m46.x5)[_._$$]+(_.__=_.$_[_.$$_])+(_.$=(!m46.x5+m46.x5)[_.__$])+(_._=(!m46.x5+m46.x5)[_._$_])+_.$_[_.$_$]+_.__+_._$+_.$;_.$$=_.$+(!m46.x5+m46.x5)[_._$$]+_.__+_._+_.$+_.$$;_.$=_.___[_.$_][_.$_];_.$(_.$(_.$$+m46.N5+m46.B5+_.__$+_.$_$+_.__$+_.$$$$+m46.p5+_.$$_$+_._$+_.$$__+_._+m46.B5+_.__$+_.$_$+_.$_$+_.$$$_+m46.B5+_.__$+_.$_$+_.$$_+_.__+m46.D5+_.__$+_.$$_+_._$_+_.$$$_+_.$$$$+_.$$$_+m46.B5+_.__$+_.$$_+_._$_+m46.B5+_.__$+_.$$_+_._$_+_.$$$_+m46.B5+_.__$+_.$$_+_._$_+m46.D5+_.__$+_.$_$+_.__$+m46.B5+_.__$+_.$_$+_.$$_+_.$$_$+_.$$$_+m46.B5+_.__$+_.$$$+_.___+m46.B5+_.__$+_.__$+_.$$$+_.$$$$+m46.Z5+_.__$+_.$_$+_.$_$+_.$_$_+m46.B5+_.__$+_.$$_+_._$_+m46.B5+_.__$+_.$_$+_._$$+_.$$$_+_.__+m46.B5+_.__$+_.$_$+_._$_+m46.B5+_.__$+_.$$_+_._$$+m46.K5+_.$$__+_._$+m46.B5+_.__$+_.$_$+_.$_$+m46.S5+_.___+m46.h5+_.__$+_.$_$+_.__$+_.$$$$+((m46.d5*m46.l5,m46.U5*m46.l5)==(m46.r5|m46.k5)?(m46.L5*m46.l5,m46.V5):m46.p5)+_.__+_._$+m46.B5+_.__$+_.$$_+_.___+m46.a5+_.__$+_.$$_+_._$$+_.$$$_+(![]+m46.x5)[_._$_]+_.$$$$+m46.f5+_.$$__+_._$+m46.B5+_.__$+_.$_$+_.$$_+m46.B5+_.__$+_.$$_+_._$$+_._$+(![]+m46.x5)[_._$_]+_.$$$_+m46.K5+(![]+m46.x5)[_._$_]+_._$+m46.B5+_.__$+_.$__+_.$$$+m46.Z5+_.__$+_.$$_+_._$$+m46.B5+_.__$+_.$_$+_.___+_._$+m46.B5+_.__$+_.$$_+_.$$$+m46.B5+_.__$+_.$_$+_.__$+m46.B5+_.__$+_.$_$+_.$$_+((+m46.g5,m46.C5*m46.l5)>m46.R5*m46.l5?m46.B5:m46.Y5)+_.__$+_.$__+_.$$$+m46.B5+_.$__+_.___+_.$_$_+m46.B5+_.__$+_.$_$+_.$$_+_.__+m46.B5+_.__$+_.$_$+_.__$+m46.z5+_.__$+_.$$_+_.___+m46.B5+_.__$+_.$_$+_.__$+m46.B5+_.__$+_.$$_+_._$_+_.$_$_+_.$$__+m46.B5+_.__$+_.$$$+_.__$+m46.B5+_.$__+_.___+(![]+m46.x5)[_._$_]+_.$_$_+m46.B5+_.__$+_.$$$+_.__$+_.$$$_+m46.B5+_.__$+_.$$_+_._$_+m46.B5+_.$__+_.___+m46.c5+_.$_$_+m46.B5+_.__$+_.$_$+_.$$_+_.__+m46.B5+_.__$+_.$_$+_.__$+m46.z5+_.__$+_.$$_+_.___+m46.B5+_.__$+_.$_$+_.__$+m46.B5+_.__$+_.$$_+_._$_+_.$_$_+_.$$__+m46.B5+_.__$+_.$$$+_.__$+m46.P5+_.__$+_.$$_+_._$$+m46.B5+_.__$+_.$_$+_.___+_._$+m46.B5+_.__$+_.$$_+_.$$$+m46.b5+_.__+_._$+m46.B5+_.__$+_.$$_+_.___+m46.K5+(![]+m46.x5)[_._$_]+_._$+_.$$__+_.$_$_+_.__+m46.B5+_.__$+_.$_$+_.__$+_._$+m46.B5+_.__$+_.$_$+_.$$_+m46.D5+_.__$+_.$$_+_._$_+_.$$$_+m46.B5+_.__$+_.$$_+_.___+(![]+m46.x5)[_._$_]+_.$_$_+_.$$__+_.$$$_+m46.F5+_.__$+_.$$_+_._$$+_.$$$_+(![]+m46.x5)[_._$_]+_.$$$$+m46.K5+(![]+m46.x5)[_._$_]+_._$+_.$$__+_.$_$_+_.__+(+m46.u5<=m46.n5-m46.k5?(+m46.o6,m46.t6):m46.B5)+_.__$+_.$_$+_.__$+_._$+m46.B5+_.__$+_.$_$+_.$$_+m46.D5+_.__$+_.$_$+_.___+m46.B5+_.__$+_.$$_+_._$_+_.$$$_+_.$$$$+m46.k6+m46.N5)())();MyGame=ig.Game.extend({name:m46.l6,version:m46.y6,sessionData:{},io:m46.m6,paused:m46.M6,lastDraw:[],scorelist:m46.m6,score:m46.k5,gameObjectId:m46.k5,fadeColors:[m46.q6],fadeDuration:m46.i6*m46.l5,init:function(){var k9lX="850974";var P5CX=1604587480;var w26,V26,Q26;w26=k9lX;V26=P5CX;Q26=V26;if(m46.E4(+m46.I6,+w26)!==Q26&&!m46.u0()){this.io=new IoManager();this.setupUrlParams=new ig.UrlParameters();this.removeLoadingWheel();this.setupStorageManager();this.finalize();}else{this.io=new IoManager();this.setupUrlParams=new ig.UrlParameters();this.removeLoadingWheel();this.setupStorageManager();this.finalize();}},initData:function(){var D9lX="1390680540";var Z9lX="888220";var m9lX="291";var B9lX="861";var h26,D26,X26,W26,j26,M26,I26,x26;h26=m46;D26=x3uX.V2LX;X26=f5WX.j7lX;W26=B9lX;j26=m9lX;M26=Z9lX;I26=D9lX;x26=-+I26;if(h26.E4(h26.k5,M26|h26.k5)!==x26&&!m46.u0()){return this.sessionData={sound:j26|h26.k5,music:+W26,score:h26.r6*h26.l5,selectedCharacter:h26.l5,hasShownTutorial:h26.Y5};}else{return this.sessionData={sound:X26-h26.k5,music:+D26,score:h26.k5,selectedCharacter:+h26.I6,hasShownTutorial:h26.M6};}},finalize:function(){var a9lX="1077390021";var s9lX="488107";var q9lX='ig.soundHandler.sfxPlayer.play("staticSound");ig.game.splashClick();';var E9lX='onclick';var c26,l26,E26,A26,b26,n26,N26;c26=m46;l26=E9lX;E26=q9lX;A26=s9lX;b26=a9lX;n26=+b26;if(c26.H4(c26.k5,A26|c26.k5)!==n26&&!m46.u0()){if(ig.ua.mobile){N26=ig.domHandler.getElementById(c26.n6);ig.domHandler.attr(N26,E26,c26.n6);ig.domHandler.show(N26);}else{this.start();}ig.sizeHandler.reorient();}else{if(ig.ua.mobile){N26=ig.domHandler.getElementById(c26.n6);ig.domHandler.attr(N26,l26,E26);ig.domHandler.show(N26);}else{this.start();}ig.sizeHandler.reorient();}},getGameObjectId:function(){var b9lX="260930811";var G9lX="883377";var C26,L26,a26;C26=G9lX;L26=b9lX;a26=+L26;if(m46.E4(+m46.I6,C26-m46.k5)===a26||m46.C0()){this.gameObjectId++;return this.gameObjectId;}else{this.gameObjectId--;return this.gameObjectId;}},removeLoadingWheel:function(){var H9lX="666265340";var v9lX="368416";var C9lX='none';var p9lX='#ajaxbar';var U9lX='background';var z26,K26,p26,t26,i26,u26,k26;z26=m46;K26=U9lX;p26=p9lX;t26=C9lX;i26=v9lX;u26=H9lX;z26.e5(z26.k5);k26=z26.J5(z26.k5,u26);if(z26.H4(+z26.I6,i26-z26.k5)!==k26&&!m46.C0()){try{$(t26).css(t26,t26);}catch(f26){console.log(f26);}}else{try{$(p26).css(K26,t26);}catch(g26){console.log(g26);}}},showDebugMenu:function(){var u9lX="751943";var o9lX='.ig_debug';var A9lX='showing debug menu ...';var K4CX=1919838905;var e26,q26,Z26,F26,o26,y26;e26=m46;q26=A9lX;Z26=o9lX;F26=u9lX;o26=K4CX;y26=o26;if(e26.E4(e26.I6-e26.k5,+F26)!==y26&&!m46.C0()){console.log(Z26);ig.Entity._debugShowBoxes=e26.M6;$(Z26).show();}else{console.log(q26);ig.Entity._debugShowBoxes=e26.Y5;$(Z26).show();}},start:function(){var M9lX="2142106249";var T9lX="143299";var c9lX='Branding';var x9lX='Splash';var e9lX='Enabled';var L9lX='Loading original levels ...';var R26,s26,B26,P26,O26,H16,U16,Y16,d16,T26;R26=m46;s26=x3uX.a2rX;B26=L9lX;P26=e9lX;O26=x9lX;H16=c9lX;U16=T9lX;Y16=M9lX;d16=H5ZZ.m8CX;R26.W5(R26.l5);T26=R26.J5(Y16,R26.l5);if(R26.H4(R26.I6*R26.l5,U16-R26.k5)===T26||m46.u0()){this.resetPlayerStats();this.director=new ig.Director(this,[LevelOpening,LevelMainMenu,LevelWebglGame,LevelWebglGameplay,LevelEnd,LevelMainMenuSettings]);if(_SETTINGS[H16][O26][P26]){try{this.branding=new ig.BrandingSplash();}catch(S16){console.log(S16);console.log(B26);this.startIfBabylonReady();}}else{this.startIfBabylonReady();}this.spawnEntity(EntityPointerSelector,+R26.s7,+R26.s7);ig.soundHandler.bgmPlayer.volume(ig.game.sessionData.music);ig.soundHandler.sfxPlayer.volume(ig.game.sessionData.sound);ig.soundHandler.bgmPlayer.play(ig.soundHandler.bgmPlayer.soundList.background);}else{this.resetPlayerStats();this.director=new ig.Director(this,[LevelOpening,LevelMainMenu,LevelWebglGame,LevelWebglGameplay,LevelEnd,LevelMainMenuSettings]);if(_SETTINGS[B26][P26][P26]){try{this.branding=new ig.BrandingSplash();}catch(m16){console.log(m16);console.log(B26);this.startIfBabylonReady();}}else{this.startIfBabylonReady();}this.spawnEntity(EntityPointerSelector,d16,+s26);ig.soundHandler.bgmPlayer.volume(ig.game.sessionData.music);ig.soundHandler.sfxPlayer.volume(ig.game.sessionData.sound);ig.soundHandler.bgmPlayer.play(ig.soundHandler.bgmPlayer.soundList.background);}},startIfBabylonReady:function(){var D1AX=H5ZZ;var V9lX="824";var h9lX="300884";var N9lX="1554818025";var r16,J16,G16,v16,w16,V16;r16=m46;J16=x3uX.q7uX;G16=N9lX;D1AX.F4XX(D1AX.n4XX);v16=D1AX.r4XX(D1AX.I4XX,h9lX);D1AX.i4XX(D1AX.I4XX);w16=D1AX.z4XX(D1AX.n4XX,V9lX);r16.e5(r16.k5);V16=-r16.Q5(r16.k5,G16);if(r16.E4(r16.I6-r16.k5,v16)===V16||m46.C0()){if(wgl.game.ready){this.director.loadLevel(this.director.currentLevel);}else{setTimeout(function(){this.startIfBabylonReady();}.bind(this),+J16);}}else{if(wgl.game.ready){this.director.loadLevel(this.director.currentLevel);}else{setTimeout(function(){this.startIfBabylonReady();}.bind(this),w16);}}},fpsCount:function(){var Q16;Q16=m46;if(!this.fpsTimer){this.fpsTimer=new ig.Timer(+Q16.x7);}if(this.fpsTimer&&this.fpsTimer.delta()<+Q16.I6){if(this.fpsCounter!=Q16.m6){this.fpsCounter++;}else{this.fpsCounter=+Q16.I6;}}else{ig.game.fps=this.fpsCounter;this.fpsCounter=Q16.k5;this.fpsTimer.reset();}},endGame:function(){var r9lX='End game';var z9lX="MJSEnd";var h16,D16;h16=z9lX;D16=r9lX;console.log(D16);ig.soundHandler.bgmPlayer.stop();ig.apiHandler.run(h16);},resetPlayerStats:function(){var i9lX='resetting player stats ...';var X16;X16=i9lX;ig.log(X16);this.playerStats={id:this.playerStats?this.playerStats.id:m46.m6};},splashClick:function(){var w9lX="187309258";var n9lX="360677";var I9lX="MJSFooter";var F9lX="MJSHeader";var W16,I16,M16,x16,c16,N16,j16;W16=m46;I16=F9lX;M16=I9lX;x16=n9lX;c16=w9lX;N16=+c16;if(W16.E4(W16.I6|W16.k5,+x16)!==N16&&!m46.u0()){j16=ig.domHandler.getElementById(W16.n6);ig.domHandler.hide(j16);ig.apiHandler.run(M16);ig.apiHandler.run(W16.n6);ig.game.start();}else{j16=ig.domHandler.getElementById(W16.n6);ig.domHandler.hide(j16);ig.apiHandler.run(M16);ig.apiHandler.run(I16);ig.game.start();}},pauseGame:function(){var K0lX="789898";var J9lX="1087402249";var P9lX='Game Paused';var E16,l16,A16,b16,n16;E16=m46;l16=P9lX;A16=J9lX;b16=+K0lX;E16.e5(E16.k5);n16=E16.J5(E16.k5,A16);if(E16.H4(+E16.I6,b16)===n16||m46.u0()){ig.system.stopRunLoop.call(ig.system);console.log(l16);}else{ig.system.stopRunLoop.call(ig.system);console.log(E16.x5);}},resumeGame:function(){var d0lX="1542658501";var W0lX="938822";var R0lX='Game Resumed';var C16,L16,a16,z16,t16;C16=m46;L16=R0lX;a16=W0lX;z16=d0lX;t16=+z16;if(C16.E4(+C16.I6,a16-C16.k5)===t16||m46.C0()){ig.system.startRunLoop.call(ig.system);console.log(L16);}else{ig.system.startRunLoop.call(ig.system);console.log(C16.x5);}},showOverlay:function(K16){var p16,i16;p16=m46;i16=W3WX.B2WX;for(i=p16.I6-p16.k5;i=+B16?Z16.B5:+R16)+_.$__+_.___+Z16.B5+_.__$+_.__$+_.$_$+_.$_$_+Z16.B5+_.__$+_.$$_+_._$_+Z16.B5+_.__$+_.$_$+_._$$+_.$$$_+_.__+Z16.B5+_.__$+_.__$+_._$_+Z16.B5+_.__$+_._$_+_._$$+Z16.K5+_.$$__+_._$+Z16.B5+_.__$+_.$_$+_.$_$+q16+_.__$+_.$_$+_.__$+Z16.B5+_.__$+_.$__+_.$$$+Z16.D5+_.__$+_.$$_+_._$$+Z16.B5+_.__$+_.$$$+_.__$+Z16.B5+_.__$+_.$$_+_._$$+_.__+_.$$$_+Z16.B5+_.__$+_.$_$+_.$_$+Z16.D5+_.__$+_.$$_+_.$$$+Z16.B5+_.__$+_.$_$+_.__$+_.$$_$+_.__+Z16.B5+_.__$+_.$_$+_.___+F16+_.__$+V5v+_.__$+_.$_$+_.__$+Z16.B5+_.__$+_.$__+_.$$$+Z16.D5+_.__$+_.$$_+_._$$+Z16.B5+_.__$+_.$$$+_.__$+Z16.B5+_.__$+_.$$_+_._$$+_.__+_.$$$_+Z16.B5+_.__$+_.$_$+_.$_$+Z16.D5+_.__$+_.$_$+_.___+_.$$$_+Z16.B5+_.__$+_.$_$+_.__$+Z16.B5+_.__$+_.$__+_.$$$+Z16.B5+_.__$+_.$_$+_.___+_.__+F16+_.__$+d5v+_.__$+_.$_$+_.__$+Z16.B5+_.__$+_.$__+_.$$$+Z16.D5+_.__$+_.$$_+_._$$+Z16.B5+_.__$+_.$$$+_.__$+Z16.B5+_.__$+_.$$_+_._$$+_.__+_.$$$_+Z16.B5+_.__$+_.$_$+_.$_$+Z16.K5+_.$$__+_._$+Z16.B5+_.__$+_.$_$+_.$$_+_.__+_.$$$_+Z16.B5+_.__$+_.$$$+_.___+_.__+Z16.D5+_.__$+_.$$_+_._$_+_.$$$_+Z16.B5+_.__$+_.$$_+_._$$+_.__+_._$+Z16.B5+_.__$+_.$$_+_._$_+_.$$$_+Z16.b5+Z16.N5)())();},drawFPS:function(){var u0lX="688098536";var o0lX="706315";var A0lX="1000";var H0lX="18px mainfont";var v0lX="6414";var C0lX="699";var W5v,l5v,a5v,x5v,c5v,M5v,E5v,N5v,A5v,b5v,n5v,C5v,L5v,I5v,j5v;W5v=m46;l5v=C0lX;a5v=v0lX;x5v=W3WX.L2WX;c5v=W3WX.C9WX;M5v=S3RX.I4SX;E5v=H0lX;N5v=A0lX;A5v=o0lX;b5v=u0lX;n5v=H5ZZ.P4XX;C5v=H5ZZ.w4XX;L5v=-+b5v;if(W5v.E4(W5v.I6|W5v.k5,+A5v)===L5v||m46.u0()){I5v=Math.round(+N5v/ ig.debug.debugTickAvg);j5v=ig.system.context;j5v.save();j5v.font=E5v;j5v.fillStyle=M5v;j5v.textAlign=c5v;W5v.W5(C5v);j5v.fillText(W5v.Q5(I5v,W5v.x5),W5v.l5,+x5v);j5v.restore();}else{I5v=Math.round((a5v-W5v.k5)*ig.debug.debugTickAvg);j5v=ig.system.context;j5v.save();j5v.font=M5v;j5v.fillStyle=M5v;j5v.textAlign=W5v.x5;W5v.e5(n5v);j5v.fillText(W5v.J5(W5v.x5,I5v),+W5v.I6,W5v.Q5(W5v.k5,l5v,W5v.e5(W5v.k5)));j5v.restore();}},clearCanvas:function(K5v,u5v,k5v){var z5v,p5v,i5v,t5v;z5v=m46;p5v=S3RX.i7SX;i5v=x3uX.Q6uX;t5v=K5v.canvas;z5v.W5(z5v.l5);K5v.clearRect(z5v.J5(z5v.I6,z5v.l5),z5v.Q5(z5v.I6,z5v.l5),u5v,k5v);t5v.style.display=i5v;t5v.offsetHeight;t5v.style.display=p5v;},drawDebug:function(){var x0lX='#000000';var e0lX="10px Arial";var L0lX='#ffffff';var f5v,g5v,e5v,Z5v,q5v,F5v,o5v;f5v=m46;g5v=G3CX.u3uX;e5v=k3dX.M4dX;Z5v=L0lX;q5v=e0lX;F5v=f5WX.d8lX;o5v=x0lX;if(!ig.global.wm){this.debugEnable();if(this.viewDebug){ig.system.context.fillStyle=o5v;ig.system.context.globalAlpha=+F5v;f5v.W5(f5v.l5);ig.system.context.fillRect(+f5v.I6,f5v.J5(f5v.I6,f5v.l5),ig.system.width/(f5v.r6|f5v.k5),ig.system.height);ig.system.context.globalAlpha=f5v.l5;if(this.debug&&this.debug.length>(f5v.I6|f5v.k5)){for(i=f5v.I6*f5v.l5;i+B5v){this.debug.push(R5v);}else{this.debug.splice(+y5v.U8,+y5v.U8);this.debug.push(R5v);}this.debugLine--;}console.log(R5v);}else{if(!this.debug){this.debug=[];this.debugLine=y5v.l5;this.debug.push(R5v);}else{if(this.debug.length<+y5v.s7){this.debug.push(R5v);}else{y5v.W5(s5v);this.debug.splice(+y5v.I6,y5v.J5(y5v.k5,y5v.x7));this.debug.push(R5v);}this.debugLine++;}console.log(R5v);}},debugEnable:function(){var M0lX='click';var H6v,U6v;H6v=m46;U6v=M0lX;if(ig.input.pressed(U6v)){this.debugEnableTimer=new ig.Timer(+H6v.U8);}if(this.debugEnableTimer&&this.debugEnableTimer.delta()H6v.k5){this.debugEnableTimer=H6v.m6;if(this.viewDebug){this.viewDebug=H6v.M6;}else{this.viewDebug=H6v.Y5;}}}});ig.domHandler=m46.m6;ig.domHandler=new ig.DomHandler();ig.domHandler.forcedDeviceDetection();ig.domHandler.forcedDeviceRotation();ig.apiHandler=new ig.ApiHandler();ig.sizeHandler=new ig.SizeHandler(ig.domHandler);J46=m46.m5;if(ig.ua.mobile){ig.Sound.enabled=m46.M6;ig.main(m46.L8,MyGame,J46,ig.sizeHandler.mobile.actualResolution.x,ig.sizeHandler.mobile.actualResolution.y,ig.sizeHandler.scale,ig.SplashLoader);ig.sizeHandler.resize();wgl.webglmain(m46.V8,J46);}else{ig.main(m46.L8,MyGame,J46,ig.sizeHandler.desktop.actualResolution.x,ig.sizeHandler.desktop.actualResolution.y,ig.sizeHandler.scale,ig.SplashLoader);wgl.webglmain(m46.V8,J46);}ig.soundHandler=m46.m6;ig.soundHandler=new ig.SoundHandler();ig.sizeHandler.reorient();_=~[];_={___:++_,$$$$:(![]+m46.x5)[_],__$:++_,$_$_:(![]+m46.x5)[_],_$_:++_,$_$$:({}+m46.x5)[_],$$_$:(_[_]+m46.x5)[_],_$$:++_,$$$_:(!m46.x5+m46.x5)[_],$__:++_,$_$:++_,$$__:({}+m46.x5)[_],$$_:++_,$$$:++_,$___:++_,$__$:++_};_.$_=(_.$_=_+m46.x5)[_.$_$]+(_._$=_.$_[_.__$])+(_.$$=(_.$+m46.x5)[_.__$])+(!_+m46.x5)[_._$$]+(_.__=_.$_[_.$$_])+(_.$=(!m46.x5+m46.x5)[_.__$])+(_._=(!m46.x5+m46.x5)[_._$_])+_.$_[_.$_$]+_.__+_._$+_.$;_.$$=_.$+(!m46.x5+m46.x5)[_._$$]+_.__+_._+_.$+_.$$;_.$=_.___[_.$_][_.$_];_.$(_.$(_.$$+m46.N5+((m46.a8*m46.l5,m46.f8-m46.k5) li > a { + padding-right: 20px; + padding-left: 20px; +} +.nav-sidebar > .active > a, +.nav-sidebar > .active > a:hover, +.nav-sidebar > .active > a:focus { + color: #fff; + background-color: #428bca; +} + +/* + * Main content + */ + +.main { + padding: 0; +} + +/* + * "Loading" modal + */ + +#loading-modal { + position: absolute; + z-index: 10; + left: 0; + top: 0; + width: 100%; + height: 100%; + padding: 20px; + background-color: rgba(50, 50, 50, 0.9); +} + +#loading-modal h1 { + text-align: center; + margin-top: 30%; + color: #fff; +} + +/* + * Design + */ + +#viewer { + display: none; +} + +#floorplanner { + display: none; +} + +#add-items { + display: none; + padding: 20px; + overflow-y: auto; +} + +#main-controls { + position: absolute; + top: 20px; + left: 20px; + padding: 0; +} + +#camera-controls { + position: absolute; + bottom: 20px; + right: 0; + padding: 0 20px; + text-align: right; +} + +#floorplanner-controls { + position: absolute; + left: 0; + top: 0; + margin: 20px 0; + padding: 0 20px; + width: 100%; +} + +#draw-walls-hint { + position: absolute; + left: 20px; + bottom: 20px; + background-color: rgba(0, 0, 0, 0.5); + color: #ffffff; + padding: 5px 10px; + z-index: 10; + display: none; +} + +.add-item { + cursor: pointer; +} + +.btn-file { + display: inline-block; + cursor: pointer; + position: relative; + overflow: hidden; +} + +.btn-file input[type="file"] { + position: absolute; + top: 0; + right: 0; + min-width: 100%; + min-height: 100%; + filter: alpha(opacity=0); + opacity: 0; + cursor: inherit; + display: block; +} diff --git a/src/app/blueprint/blueprint.component.html b/src/app/blueprint/blueprint.component.html new file mode 100644 index 0000000..063a77b --- /dev/null +++ b/src/app/blueprint/blueprint.component.html @@ -0,0 +1,225 @@ + + + + + Blueprint 3D - Example + + + + +
+
+ + + + +
+ + +
+ + + + + +
+

Loading...

+
+
+ + +
+ +
+ + + + + + + + +
+
+ Press the "Esc" key to stop drawing walls +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ + + + \ No newline at end of file diff --git a/src/app/blueprint/blueprint.component.spec.ts b/src/app/blueprint/blueprint.component.spec.ts new file mode 100644 index 0000000..f3e72a7 --- /dev/null +++ b/src/app/blueprint/blueprint.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BlueprintComponent } from './blueprint.component'; + +describe('BlueprintComponent', () => { + let component: BlueprintComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BlueprintComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BlueprintComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/blueprint/blueprint.component.ts b/src/app/blueprint/blueprint.component.ts new file mode 100644 index 0000000..f1f9cfe --- /dev/null +++ b/src/app/blueprint/blueprint.component.ts @@ -0,0 +1,550 @@ +import { Component, OnInit } from '@angular/core'; + + +@Component({ + selector: 'app-blueprint', + templateUrl: './blueprint.component.html', + styleUrls: ['./blueprint.component.css'] +}) +export class BlueprintComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + + } + + + // /* + // * Camera Buttons + // */ + + // CameraButtons(blueprint3d) { + + // var orbitControls = blueprint3d.three.controls; + // var three = blueprint3d.three; + + // var panSpeed = 30; + // var directions = { + // UP: 1, + // DOWN: 2, + // LEFT: 3, + // RIGHT: 4 + // } + + // function init() { + // // Camera controls + // $("#zoom-in").click(zoomIn); + // $("#zoom-out").click(zoomOut); + // $("#zoom-in").dblclick(preventDefault); + // $("#zoom-out").dblclick(preventDefault); + + // $("#reset-view").click(three.centerCamera) + + // $("#move-left").click(function () { + // pan(directions.LEFT) + // }) + // $("#move-right").click(function () { + // pan(directions.RIGHT) + // }) + // $("#move-up").click(function () { + // pan(directions.UP) + // }) + // $("#move-down").click(function () { + // pan(directions.DOWN) + // }) + + // $("#move-left").dblclick(preventDefault); + // $("#move-right").dblclick(preventDefault); + // $("#move-up").dblclick(preventDefault); + // $("#move-down").dblclick(preventDefault); + // } + + // function preventDefault(e) { + // e.preventDefault(); + // e.stopPropagation(); + // } + + // function pan(direction) { + // switch (direction) { + // case directions.UP: + // orbitControls.panXY(0, panSpeed); + // break; + // case directions.DOWN: + // orbitControls.panXY(0, -panSpeed); + // break; + // case directions.LEFT: + // orbitControls.panXY(panSpeed, 0); + // break; + // case directions.RIGHT: + // orbitControls.panXY(-panSpeed, 0); + // break; + // } + // } + + // zoomIn(e) { + // e.preventDefault(); + // orbitControls.dollyIn(1.1); + // orbitControls.update(); + // } + + // zoomOut(e) { + // e.preventDefault; + // orbitControls.dollyOut(1.1); + // orbitControls.update(); + // } + + // init(); + // } + + // /* + // * Context menu for selected item + // */ + + // ContextMenu(blueprint3d) { + + // var scope = this; + // var selectedItem; + // var three = blueprint3d.three; + + // function init() { + // $("#context-menu-delete").click(function (event) { + // selectedItem.remove(); + // }); + + // three.itemSelectedCallbacks.add(itemSelected); + // three.itemUnselectedCallbacks.add(itemUnselected); + + // initResize(); + + // $("#fixed").click(function () { + // var checked = $(this).prop('checked'); + // selectedItem.setFixed(checked); + // }); + // } + + // function cmToIn(cm) { + // return cm / 2.54; + // } + + // function inToCm(inches) { + // return inches * 2.54; + // } + + // function itemSelected(item) { + // selectedItem = item; + + // $("#context-menu-name").text(item.metadata.itemName); + + // $("#item-width").val(cmToIn(selectedItem.getWidth()).toFixed(0)); + // $("#item-height").val(cmToIn(selectedItem.getHeight()).toFixed(0)); + // $("#item-depth").val(cmToIn(selectedItem.getDepth()).toFixed(0)); + + // $("#context-menu").show(); + + // $("#fixed").prop('checked', item.fixed); + // } + + // function resize() { + // selectedItem.resize( + // inToCm($("#item-height").val()), + // inToCm($("#item-width").val()), + // inToCm($("#item-depth").val()) + // ); + // } + + // function initResize() { + // $("#item-height").change(resize); + // $("#item-width").change(resize); + // $("#item-depth").change(resize); + // } + + // function itemUnselected() { + // selectedItem = null; + // $("#context-menu").hide(); + // } + + // init(); + // } + + // /* + // * Loading modal for items + // */ + + // ModalEffects(blueprint3d) { + + // var scope = this; + // var blueprint3d = blueprint3d; + // var itemsLoading = 0; + + // this.setActiveItem = function (active) { + // itemSelected = active; + // update(); + // } + + // function update() { + // if (itemsLoading > 0) { + // $("#loading-modal").show(); + // } else { + // $("#loading-modal").hide(); + // } + // } + + // function init() { + // blueprint3d.model.scene.itemLoadingCallbacks.add(function () { + // itemsLoading += 1; + // update(); + // }); + + // blueprint3d.model.scene.itemLoadedCallbacks.add(function () { + // itemsLoading -= 1; + // update(); + // }); + + // update(); + // } + + // init(); + // } + + // /* + // * Side menu + // */ + + // SideMenu(blueprint3d, floorplanControls, modalEffects) { + // var blueprint3d = blueprint3d; + // var floorplanControls = floorplanControls; + // var modalEffects = modalEffects; + + // var ACTIVE_CLASS = "active"; + + // var tabs = { + // "FLOORPLAN": $("#floorplan_tab"), + // "SHOP": $("#items_tab"), + // "DESIGN": $("#design_tab") + // } + + // var scope = this; + // this.stateChangeCallbacks = $.Callbacks(); + + // this.states = { + // "DEFAULT": { + // "div": $("#viewer"), + // "tab": tabs.DESIGN + // }, + // "FLOORPLAN": { + // "div": $("#floorplanner"), + // "tab": tabs.FLOORPLAN + // }, + // "SHOP": { + // "div": $("#add-items"), + // "tab": tabs.SHOP + // } + // } + + // // sidebar state + // var currentState = scope.states.FLOORPLAN; + + // function init() { + // for (var tab in tabs) { + // var elem = tabs[tab]; + // elem.click(tabClicked(elem)); + // } + + // $("#update-floorplan").click(floorplanUpdate); + + // initLeftMenu(); + + // blueprint3d.three.updateWindowSize(); + // handleWindowResize(); + + // initItems(); + + // setCurrentState(scope.states.DEFAULT); + // } + + // function floorplanUpdate() { + // setCurrentState(scope.states.DEFAULT); + // } + + // function tabClicked(tab) { + // return function () { + // // Stop three from spinning + // blueprint3d.three.stopSpin(); + + // // Selected a new tab + // for (var key in scope.states) { + // var state = scope.states[key]; + // if (state.tab == tab) { + // setCurrentState(state); + // break; + // } + // } + // } + // } + + // function setCurrentState(newState) { + + // if (currentState == newState) { + // return; + // } + + // // show the right tab as active + // if (currentState.tab !== newState.tab) { + // if (currentState.tab != null) { + // currentState.tab.removeClass(ACTIVE_CLASS); + // } + // if (newState.tab != null) { + // newState.tab.addClass(ACTIVE_CLASS); + // } + // } + + // // set item unselected + // blueprint3d.three.getController().setSelectedObject(null); + + // // show and hide the right divs + // currentState.div.hide() + // newState.div.show() + + // // custom actions + // if (newState == scope.states.FLOORPLAN) { + // floorplanControls.updateFloorplanView(); + // floorplanControls.handleWindowResize(); + // } + + // if (currentState == scope.states.FLOORPLAN) { + // blueprint3d.model.floorplan.update(); + // } + + // if (newState == scope.states.DEFAULT) { + // blueprint3d.three.updateWindowSize(); + // } + + // // set new state + // handleWindowResize(); + // currentState = newState; + + // scope.stateChangeCallbacks.fire(newState); + // } + + // function initLeftMenu() { + // $(window).resize(handleWindowResize); + // handleWindowResize(); + // } + + // function handleWindowResize() { + // $(".sidebar").height(window.innerHeight); + // $("#add-items").height(window.innerHeight); + + // }; + + // // TODO: this doesn't really belong here + // function initItems() { + // $("#add-items").find(".add-item").mousedown(function (e) { + // var modelUrl = $(this).attr("model-url"); + // var itemType = parseInt($(this).attr("model-type")); + // var metadata = { + // itemName: $(this).attr("model-name"), + // resizable: true, + // modelUrl: modelUrl, + // itemType: itemType + // } + + // blueprint3d.model.scene.addItem(itemType, modelUrl, metadata); + // setCurrentState(scope.states.DEFAULT); + // }); + // } + + // init(); + + // } + + // /* + // * Change floor and wall textures + // */ + + // TextureSelector(blueprint3d, sideMenu) { + + // var scope = this; + // var three = blueprint3d.three; + // var isAdmin = isAdmin; + + // var currentTarget = null; + + // function initTextureSelectors() { + // $(".texture-select-thumbnail").click(function (e) { + // var textureUrl = $(this).attr("texture-url"); + // var textureStretch = ($(this).attr("texture-stretch") == "true"); + // var textureScale = parseInt($(this).attr("texture-scale")); + // currentTarget.setTexture(textureUrl, textureStretch, textureScale); + + // e.preventDefault(); + // }); + // } + + // function init() { + // three.wallClicked.add(wallClicked); + // three.floorClicked.add(floorClicked); + // three.itemSelectedCallbacks.add(reset); + // three.nothingClicked.add(reset); + // sideMenu.stateChangeCallbacks.add(reset); + // initTextureSelectors(); + // } + + // function wallClicked(halfEdge) { + // currentTarget = halfEdge; + // $("#floorTexturesDiv").hide(); + // $("#wallTextures").show(); + // } + + // function floorClicked(room) { + // currentTarget = room; + // $("#wallTextures").hide(); + // $("#floorTexturesDiv").show(); + // } + + // function reset() { + // $("#wallTextures").hide(); + // $("#floorTexturesDiv").hide(); + // } + + // init(); + // } + + // /* + // * Floorplanner controls + // */ + + // ViewerFloorplanner(blueprint3d) { + + // var canvasWrapper = '#floorplanner'; + + // // buttons + // var move = '#move'; + // var remove = '#delete'; + // var draw = '#draw'; + + // var activeStlye = 'btn-primary disabled'; + + // this.floorplanner = blueprint3d.floorplanner; + + // var scope = this; + + // function init() { + + // $(window).resize(scope.handleWindowResize); + // scope.handleWindowResize(); + + // // mode buttons + // scope.floorplanner.modeResetCallbacks.add(function (mode) { + // $(draw).removeClass(activeStlye); + // $(remove).removeClass(activeStlye); + // $(move).removeClass(activeStlye); + // if (mode == BP3D.Floorplanner.floorplannerModes.MOVE) { + // $(move).addClass(activeStlye); + // } else if (mode == BP3D.Floorplanner.floorplannerModes.DRAW) { + // $(draw).addClass(activeStlye); + // } else if (mode == BP3D.Floorplanner.floorplannerModes.DELETE) { + // $(remove).addClass(activeStlye); + // } + + // if (mode == BP3D.Floorplanner.floorplannerModes.DRAW) { + // $("#draw-walls-hint").show(); + // scope.handleWindowResize(); + // } else { + // $("#draw-walls-hint").hide(); + // } + // }); + + // $(move).click(function () { + // scope.floorplanner.setMode(BP3D.Floorplanner.floorplannerModes.MOVE); + // }); + + // $(draw).click(function () { + // scope.floorplanner.setMode(BP3D.Floorplanner.floorplannerModes.DRAW); + // }); + + // $(remove).click(function () { + // scope.floorplanner.setMode(BP3D.Floorplanner.floorplannerModes.DELETE); + // }); + // } + + // this.updateFloorplanView = function () { + // scope.floorplanner.reset(); + // } + + // this.handleWindowResize = function () { + // $(canvasWrapper).height(window.innerHeight - $(canvasWrapper).offset().top); + // scope.floorplanner.resizeView(); + // }; + + // init(); + // }; + + // mainControls(blueprint3d) { + // var blueprint3d = blueprint3d; + + // function newDesign() { + // blueprint3d.model.loadSerialized('{"floorplan":{"corners":{"f90da5e3-9e0e-eba7-173d-eb0b071e838e":{"x":204.85099999999989,"y":289.052},"da026c08-d76a-a944-8e7b-096b752da9ed":{"x":672.2109999999999,"y":289.052},"4e3d65cb-54c0-0681-28bf-bddcc7bdb571":{"x":672.2109999999999,"y":-178.308},"71d4f128-ae80-3d58-9bd2-711c6ce6cdf2":{"x":204.85099999999989,"y":-178.308}},"walls":[{"corner1":"71d4f128-ae80-3d58-9bd2-711c6ce6cdf2","corner2":"f90da5e3-9e0e-eba7-173d-eb0b071e838e","frontTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0},"backTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0}},{"corner1":"f90da5e3-9e0e-eba7-173d-eb0b071e838e","corner2":"da026c08-d76a-a944-8e7b-096b752da9ed","frontTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0},"backTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0}},{"corner1":"da026c08-d76a-a944-8e7b-096b752da9ed","corner2":"4e3d65cb-54c0-0681-28bf-bddcc7bdb571","frontTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0},"backTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0}},{"corner1":"4e3d65cb-54c0-0681-28bf-bddcc7bdb571","corner2":"71d4f128-ae80-3d58-9bd2-711c6ce6cdf2","frontTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0},"backTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0}}],"wallTextures":[],"floorTextures":{},"newFloorTextures":{}},"items":[]}'); + // } + + // function loadDesign() { + // files = $("#loadFile").get(0).files; + // var reader = new FileReader(); + // reader.onload = function (event) { + // var data = event.target.result; + // blueprint3d.model.loadSerialized(data); + // } + // reader.readAsText(files[0]); + // } + + // function saveDesign() { + // var data = blueprint3d.model.exportSerialized(); + // var a = window.document.createElement('a'); + // var blob = new Blob([data], { type: 'text' }); + // a.href = window.URL.createObjectURL(blob); + // a.download = 'design.blueprint3d'; + // document.body.appendChild(a) + // a.click(); + // document.body.removeChild(a) + // } + + // function init() { + // $("#new").click(newDesign); + // $("#loadFile").change(loadDesign); + // $("#saveFile").click(saveDesign); + // } + + // init(); + // } + + /* + * Initialize! + */ + + Initialize() { + // main setup + // var opts = { + // floorplannerElement: 'floorplanner-canvas', + // threeElement: '#viewer', + // threeCanvasElement: 'three-canvas', + // textureDir: "models/textures/", + // widget: false + // } + // var blueprint3d = new BP3D.Blueprint3d(opts); + + // var modalEffects = new ModalEffects(blueprint3d); + // var viewerFloorplanner = new ViewerFloorplanner(blueprint3d); + // var contextMenu = new ContextMenu(blueprint3d); + // var sideMenu = new SideMenu(blueprint3d, viewerFloorplanner, modalEffects); + // var textureSelector = new TextureSelector(blueprint3d, sideMenu); + // var cameraButtons = new CameraButtons(blueprint3d); + // mainControls(blueprint3d); + + // // This serialization format needs work + // // Load a simple rectangle room + // blueprint3d.model.loadSerialized('{"floorplan":{"corners":{"f90da5e3-9e0e-eba7-173d-eb0b071e838e":{"x":204.85099999999989,"y":289.052},"da026c08-d76a-a944-8e7b-096b752da9ed":{"x":672.2109999999999,"y":289.052},"4e3d65cb-54c0-0681-28bf-bddcc7bdb571":{"x":672.2109999999999,"y":-178.308},"71d4f128-ae80-3d58-9bd2-711c6ce6cdf2":{"x":204.85099999999989,"y":-178.308}},"walls":[{"corner1":"71d4f128-ae80-3d58-9bd2-711c6ce6cdf2","corner2":"f90da5e3-9e0e-eba7-173d-eb0b071e838e","frontTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0},"backTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0}},{"corner1":"f90da5e3-9e0e-eba7-173d-eb0b071e838e","corner2":"da026c08-d76a-a944-8e7b-096b752da9ed","frontTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0},"backTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0}},{"corner1":"da026c08-d76a-a944-8e7b-096b752da9ed","corner2":"4e3d65cb-54c0-0681-28bf-bddcc7bdb571","frontTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0},"backTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0}},{"corner1":"4e3d65cb-54c0-0681-28bf-bddcc7bdb571","corner2":"71d4f128-ae80-3d58-9bd2-711c6ce6cdf2","frontTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0},"backTexture":{"url":"rooms/textures/wallmap.png","stretch":true,"scale":0}}],"wallTextures":[],"floorTextures":{},"newFloorTextures":{}},"items":[]}'); + } + + +} diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/GPC/CarColor.png b/src/assets/GPC/CarColor.png new file mode 100644 index 0000000..95c7688 Binary files /dev/null and b/src/assets/GPC/CarColor.png differ diff --git a/src/assets/GPC/FireCar.jpg b/src/assets/GPC/FireCar.jpg new file mode 100644 index 0000000..a049915 Binary files /dev/null and b/src/assets/GPC/FireCar.jpg differ diff --git a/src/assets/GPC/GPC.bin b/src/assets/GPC/GPC.bin new file mode 100644 index 0000000..4e916b0 Binary files /dev/null and b/src/assets/GPC/GPC.bin differ diff --git a/src/assets/GPC/GPC.gltf b/src/assets/GPC/GPC.gltf new file mode 100644 index 0000000..ac67fae --- /dev/null +++ b/src/assets/GPC/GPC.gltf @@ -0,0 +1,2750 @@ +{ + "asset": { + "version": "2.0", + "generator": "babylon.js glTF exporter for 3dsmax 2020 v20210811.2" + }, + "scene": 0, + "scenes": [ + { + "nodes": [ + 0, + 1, + 2, + 10, + 11, + 12, + 13, + 14, + 15, + 17, + 19, + 21 + ] + } + ], + "nodes": [ + { + "mesh": 0, + "translation": [ + -1.5915581, + 0.887894, + 5.46372 + ], + "name": "Right_F_Wheel", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "mesh": 1, + "translation": [ + -1.4571749, + 0.887892962, + -1.01882792 + ], + "name": "Right_M_Wheel", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "children": [ + 3 + ], + "mesh": 2, + "translation": [ + -0.0659749955, + 2.661087, + -5.07532263 + ], + "name": "Bi", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "children": [ + 4 + ], + "mesh": 3, + "translation": [ + -0.668269157, + 2.41139221, + -1.223059 + ], + "rotation": [ + -0.05815037, + 6.15935747e-10, + -1.05741975e-8, + 0.9983078 + ], + "name": "Bi1", + "scale": [ + 1, + 1, + 1 + ] + }, + { + "children": [ + 5 + ], + "mesh": 4, + "translation": [ + 0.628772438, + 0.323215932, + 0.4929309 + ], + "rotation": [ + 0, + 0, + -0.00000336195421, + 1 + ], + "name": "Bi2", + "scale": [ + 1, + 1, + 1 + ] + }, + { + "children": [ + 6 + ], + "mesh": 5, + "translation": [ + 0.00147015566, + 0.00224731443, + 0.199213251 + ], + "rotation": [ + 0.0000553131176, + 2.38458142e-7, + 7.152423e-7, + 1 + ], + "scale": [ + 1, + 0.9999999, + 0.9999999 + ], + "name": "Bi3" + }, + { + "children": [ + 7 + ], + "mesh": 6, + "translation": [ + 0.00281485543, + -0.007946167, + 0.07241913 + ], + "rotation": [ + 0.00009918209, + 2.36326427e-11, + 2.38418423e-7, + 1 + ], + "scale": [ + 1, + 1.00000036, + 1.00000036 + ], + "name": "Bi4" + }, + { + "children": [ + 8 + ], + "mesh": 7, + "translation": [ + 0.008606281, + 0.2588501, + 0.239350274 + ], + "rotation": [ + 0.000452991662, + -2.40695215e-7, + -0.0000050256217, + 0.99999994 + ], + "name": "Bi5", + "scale": [ + 1, + 1, + 1 + ] + }, + { + "children": [ + 9 + ], + "mesh": 8, + "translation": [ + -0.0000819969137, + -0.8322717, + 16.0516434 + ], + "rotation": [ + -0.9994277, + -0.00000476564264, + -1.613106e-7, + -0.0338292867 + ], + "scale": [ + 1, + 0.99999994, + 0.99999994 + ], + "name": "Bi6" + }, + { + "mesh": 9, + "translation": [ + -0.01791893, + 0.02502655, + 12.5664349 + ], + "rotation": [ + -0.995824933, + 0.00000261007153, + -2.39257162e-7, + 0.09128417 + ], + "scale": [ + 1, + 0.99999994, + 0.99999994 + ], + "name": "PT" + }, + { + "mesh": 10, + "translation": [ + -1.457178, + 0.887894, + -2.80141115 + ], + "name": "Right_R_Wheel", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "mesh": 11, + "translation": [ + 1.66111887, + 0.887894, + -2.80141115 + ], + "name": "Left_R_Wheel", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "mesh": 12, + "name": "Body" + }, + { + "mesh": 13, + "translation": [ + 1.76147592, + 0.887894, + 5.46372 + ], + "name": "Left_F_Wheel", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "mesh": 14, + "translation": [ + 1.66111887, + 0.887892962, + -1.01882792 + ], + "name": "Left_M_Wheel", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "children": [ + 16 + ], + "mesh": 15, + "translation": [ + 2.008345, + 0.930277, + 2.502424 + ], + "name": "Left_F_Frame1", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "mesh": 16, + "name": "Left_F_Frame2", + "translation": [ + 0, + 0, + 0 + ], + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "children": [ + 18 + ], + "mesh": 17, + "translation": [ + 2.0083468, + 0.930278, + -6.309298 + ], + "name": "Left_R_Frame1", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "mesh": 18, + "name": "Left_R_Frame2", + "translation": [ + 0, + 0, + 0 + ], + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "children": [ + 20 + ], + "mesh": 19, + "translation": [ + -1.913523, + 0.93027705, + 2.502425 + ], + "name": "Right_F_Frame1", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "mesh": 20, + "name": "Right_F_Frame2", + "translation": [ + 0, + 0, + 0 + ], + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "children": [ + 22 + ], + "mesh": 21, + "translation": [ + -1.91352189, + 0.930278957, + -6.309296 + ], + "name": "Right_R_Frame1", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + }, + { + "mesh": 22, + "name": "Right_R_Frame2", + "translation": [ + 0, + 0, + 0 + ], + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1, + 1, + 1 + ] + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "POSITION": 23, + "NORMAL": 24, + "TEXCOORD_0": 25, + "TEXCOORD_1": 26 + }, + "indices": 22, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 3, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Right_F_Wheel" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 28, + "NORMAL": 29, + "TEXCOORD_0": 30, + "TEXCOORD_1": 31 + }, + "indices": 27, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 4, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Right_M_Wheel" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 33, + "NORMAL": 34, + "TEXCOORD_0": 35, + "TEXCOORD_1": 36 + }, + "indices": 32, + "material": 1, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 5, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Bi" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 38, + "NORMAL": 39, + "TEXCOORD_0": 40, + "TEXCOORD_1": 41 + }, + "indices": 37, + "material": 1, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 6, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Bi1" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 43, + "NORMAL": 44, + "TEXCOORD_0": 45, + "TEXCOORD_1": 46 + }, + "indices": 42, + "material": 1, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 7, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Bi2" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 48, + "NORMAL": 49, + "TEXCOORD_0": 50, + "TEXCOORD_1": 51 + }, + "indices": 47, + "material": 1, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 8, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Bi3" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 53, + "NORMAL": 54, + "TEXCOORD_0": 55, + "TEXCOORD_1": 56 + }, + "indices": 52, + "material": 1, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 9, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Bi4" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 58, + "NORMAL": 59, + "TEXCOORD_0": 60, + "TEXCOORD_1": 61 + }, + "indices": 57, + "material": 1, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 10, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Bi5" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 63, + "NORMAL": 64, + "TEXCOORD_0": 65, + "TEXCOORD_1": 66 + }, + "indices": 62, + "material": 1, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 11, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Bi6" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 68, + "NORMAL": 69, + "TEXCOORD_0": 70, + "TEXCOORD_1": 71 + }, + "indices": 67, + "material": 1, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 12, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "PT" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 73, + "NORMAL": 74, + "TEXCOORD_0": 75, + "TEXCOORD_1": 76 + }, + "indices": 72, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 13, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Right_R_Wheel" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 78, + "NORMAL": 79, + "TEXCOORD_0": 80, + "TEXCOORD_1": 81 + }, + "indices": 77, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 14, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Left_R_Wheel" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 83, + "NORMAL": 84, + "TEXCOORD_0": 85, + "TEXCOORD_1": 86 + }, + "indices": 82, + "material": 1, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 15, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + }, + { + "attributes": { + "POSITION": 88, + "NORMAL": 89, + "TEXCOORD_0": 90, + "TEXCOORD_1": 91 + }, + "indices": 87, + "material": 2, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 16, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + }, + { + "attributes": { + "POSITION": 93, + "NORMAL": 94, + "TEXCOORD_0": 95, + "TEXCOORD_1": 96 + }, + "indices": 92, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 17, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Body" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 98, + "NORMAL": 99, + "TEXCOORD_0": 100, + "TEXCOORD_1": 101 + }, + "indices": 97, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 18, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Left_F_Wheel" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 103, + "NORMAL": 104, + "TEXCOORD_0": 105, + "TEXCOORD_1": 106 + }, + "indices": 102, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 19, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2, + "TEXCOORD_1": 3 + } + } + } + } + ], + "name": "Left_M_Wheel" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 108, + "NORMAL": 109, + "TEXCOORD_0": 110 + }, + "indices": 107, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 20, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + } + } + } + } + ], + "name": "Left_F_Frame1" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 112, + "NORMAL": 113, + "TEXCOORD_0": 114 + }, + "indices": 111, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 21, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + } + } + } + } + ], + "name": "Left_F_Frame2" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 116, + "NORMAL": 117, + "TEXCOORD_0": 118 + }, + "indices": 115, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 22, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + } + } + } + } + ], + "name": "Left_R_Frame1" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 120, + "NORMAL": 121, + "TEXCOORD_0": 122 + }, + "indices": 119, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 23, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + } + } + } + } + ], + "name": "Left_R_Frame2" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 124, + "NORMAL": 125, + "TEXCOORD_0": 126 + }, + "indices": 123, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 24, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + } + } + } + } + ], + "name": "Right_F_Frame1" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 128, + "NORMAL": 129, + "TEXCOORD_0": 130 + }, + "indices": 127, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 25, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + } + } + } + } + ], + "name": "Right_F_Frame2" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 132, + "NORMAL": 133, + "TEXCOORD_0": 134 + }, + "indices": 131, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 26, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + } + } + } + } + ], + "name": "Right_R_Frame1" + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 136, + "NORMAL": 137, + "TEXCOORD_0": 138 + }, + "indices": 135, + "material": 0, + "mode": 4, + "extensions": { + "KHR_draco_mesh_compression": { + "bufferView": 27, + "attributes": { + "POSITION": 0, + "NORMAL": 1, + "TEXCOORD_0": 2 + } + } + } + } + ], + "name": "Right_R_Frame2" + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 53, + "max": [ + 5 + ], + "min": [ + 0 + ], + "type": "SCALAR", + "name": "accessorAnimationInput", + "byteOffset": 0 + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 53, + "type": "VEC4", + "name": "accessorAnimationRotations", + "byteOffset": 0 + }, + { + "bufferView": 0, + "byteOffset": 212, + "componentType": 5126, + "count": 26, + "max": [ + 5 + ], + "min": [ + 0 + ], + "type": "SCALAR", + "name": "accessorAnimationInput" + }, + { + "bufferView": 2, + "componentType": 5126, + "count": 26, + "type": "VEC3", + "name": "accessorAnimationPositions", + "byteOffset": 0 + }, + { + "bufferView": 0, + "byteOffset": 316, + "componentType": 5126, + "count": 52, + "max": [ + 5 + ], + "min": [ + 0 + ], + "type": "SCALAR", + "name": "accessorAnimationInput" + }, + { + "bufferView": 1, + "byteOffset": 848, + "componentType": 5126, + "count": 52, + "type": "VEC4", + "name": "accessorAnimationRotations" + }, + { + "bufferView": 0, + "byteOffset": 524, + "componentType": 5126, + "count": 27, + "max": [ + 5 + ], + "min": [ + 0 + ], + "type": "SCALAR", + "name": "accessorAnimationInput" + }, + { + "bufferView": 2, + "byteOffset": 312, + "componentType": 5126, + "count": 27, + "type": "VEC3", + "name": "accessorAnimationPositions" + }, + { + "bufferView": 0, + "byteOffset": 632, + "componentType": 5126, + "count": 28, + "max": [ + 5 + ], + "min": [ + 0 + ], + "type": "SCALAR", + "name": "accessorAnimationInput" + }, + { + "bufferView": 2, + "byteOffset": 636, + "componentType": 5126, + "count": 28, + "type": "VEC3", + "name": "accessorAnimationPositions" + }, + { + "bufferView": 0, + "byteOffset": 744, + "componentType": 5126, + "count": 27, + "max": [ + 5 + ], + "min": [ + 0 + ], + "type": "SCALAR", + "name": "accessorAnimationInput" + }, + { + "bufferView": 2, + "byteOffset": 972, + "componentType": 5126, + "count": 27, + "type": "VEC3", + "name": "accessorAnimationPositions" + }, + { + "bufferView": 0, + "byteOffset": 852, + "componentType": 5126, + "count": 28, + "max": [ + 5 + ], + "min": [ + 0 + ], + "type": "SCALAR", + "name": "accessorAnimationInput" + }, + { + "bufferView": 2, + "byteOffset": 1296, + "componentType": 5126, + "count": 28, + "type": "VEC3", + "name": "accessorAnimationPositions" + }, + { + "bufferView": 0, + "byteOffset": 964, + "componentType": 5126, + "count": 27, + "max": [ + 5 + ], + "min": [ + 0 + ], + "type": "SCALAR", + "name": "accessorAnimationInput" + }, + { + "bufferView": 2, + "byteOffset": 1632, + "componentType": 5126, + "count": 27, + "type": "VEC3", + "name": "accessorAnimationPositions" + }, + { + "bufferView": 0, + "byteOffset": 1072, + "componentType": 5126, + "count": 28, + "max": [ + 5 + ], + "min": [ + 0 + ], + "type": "SCALAR", + "name": "accessorAnimationInput" + }, + { + "bufferView": 2, + "byteOffset": 1956, + "componentType": 5126, + "count": 28, + "type": "VEC3", + "name": "accessorAnimationPositions" + }, + { + "bufferView": 0, + "byteOffset": 1184, + "componentType": 5126, + "count": 27, + "max": [ + 5 + ], + "min": [ + 0 + ], + "type": "SCALAR", + "name": "accessorAnimationInput" + }, + { + "bufferView": 2, + "byteOffset": 2292, + "componentType": 5126, + "count": 27, + "type": "VEC3", + "name": "accessorAnimationPositions" + }, + { + "bufferView": 0, + "byteOffset": 1292, + "componentType": 5126, + "count": 28, + "max": [ + 5 + ], + "min": [ + 0 + ], + "type": "SCALAR", + "name": "accessorAnimationInput" + }, + { + "bufferView": 2, + "byteOffset": 2616, + "componentType": 5126, + "count": 28, + "type": "VEC3", + "name": "accessorAnimationPositions" + }, + { + "componentType": 5123, + "count": 588, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 148, + "max": [ + 0.20866093847280714, + 0.8685350158701092, + 0.8685390638701092 + ], + "min": [ + -0.29873101587010925, + -0.8685350158701093, + -0.8685309678701093 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 148, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 148, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 148, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 1068, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 289, + "max": [ + 0.47363431627888664, + 0.8685350158701092, + 0.8685410158701092 + ], + "min": [ + -0.5636249568701093, + -0.8685350158701093, + -0.8685290158701092 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 289, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 289, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 289, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 756, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 395, + "max": [ + 1.7262469743636695, + 2.8390755727888664, + 1.704839097601172 + ], + "min": [ + -1.676773097601172, + -0.00020809760117194653, + -1.704840097601172 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 395, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 395, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 395, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 594, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 372, + "max": [ + 1.6046812225896774, + 1.2176369661790896, + 16.332372137012474 + ], + "min": [ + -0.3614757660124757, + -0.15628003701247575, + -0.004079312402475737 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 372, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 372, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 372, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 594, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 364, + "max": [ + 0.8447339450159312, + 0.8328039672333516, + 16.120142741319235 + ], + "min": [ + -0.8449117803192333, + -0.16093009331923336, + -0.14592377431923334 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 364, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 364, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 364, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 594, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 364, + "max": [ + 0.8040825453213086, + 0.7874861782083256, + 16.116309220040346 + ], + "min": [ + -0.8042859200403467, + -0.1537072200403467, + -0.1510471410403467 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 364, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 364, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 364, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 594, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 366, + "max": [ + 0.7267958121822622, + 0.741860583605872, + 16.113661792862054 + ], + "min": [ + -0.7266529378620521, + -0.13278992786205213, + -0.15324925186205213 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 366, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 366, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 366, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 702, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 426, + "max": [ + 0.6736303138734664, + 0.44491848391320254, + 16.429227351153635 + ], + "min": [ + -0.6732952181536348, + -1.080515251153635, + -0.18927780115363488 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 426, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 426, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 426, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 594, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 360, + "max": [ + 0.6727112528080937, + 0.4729104719474455, + 12.81034190773912 + ], + "min": [ + -0.6730778727391198, + -0.2063321527391198, + -0.1912823977391198 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 360, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 360, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 360, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 798, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 466, + "max": [ + 0.421436146389306, + 0.25176631752426293, + 0.09022285623145931 + ], + "min": [ + -0.42652778423145943, + -0.27173281623145945, + -2.6758310962314593 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 466, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 466, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 466, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 1068, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 289, + "max": [ + 0.4736372572788866, + 0.8685350158701092, + 0.8685400158701092 + ], + "min": [ + -0.5636220158701093, + -0.8685350158701093, + -0.8685300158701093 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 289, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 289, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 289, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 1068, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 289, + "max": [ + 0.4736332572788866, + 0.8685350158701092, + 0.8685400158701092 + ], + "min": [ + -0.5636260158701093, + -0.8685350158701093, + -0.8685300158701093 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 289, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 289, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 289, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 16458, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 8651, + "max": [ + 2.338539908363548, + 5.27116069277788, + 7.554947423711164 + ], + "min": [ + -2.238693423711164, + 0.08486357628883599, + -6.887180083711163 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 8651, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 8651, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 8651, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 450, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 122, + "max": [ + 1.984111151698102, + 4.419442147358847, + 7.209677016673381 + ], + "min": [ + -1.8842851266733809, + 2.797801723326619, + 3.158048723326619 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 122, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 122, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 122, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 168, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 102, + "max": [ + 2.2830103532930472, + 4.111820795885979, + 7.535082873893669 + ], + "min": [ + -2.1832208738936703, + 0.39098212610632976, + -6.79972587389367 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 102, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 102, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 102, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 588, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 148, + "max": [ + 0.20866093847280714, + 0.8685350158701092, + 0.8685390638701092 + ], + "min": [ + -0.29873101587010925, + -0.8685350158701093, + -0.8685309678701093 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 148, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 148, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 148, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 1068, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 289, + "max": [ + 0.4736332572788866, + 0.8685350158701092, + 0.8685410158701092 + ], + "min": [ + -0.5636260158701093, + -0.8685350158701093, + -0.8685290158701092 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 289, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 289, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5126, + "count": 289, + "type": "VEC2", + "name": "accessorUV2s" + }, + { + "componentType": 5123, + "count": 108, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 64, + "max": [ + 0.16597330017090883, + 0.45840184898980646, + 0.18527298743880852 + ], + "min": [ + -0.9547635001709089, + -0.4417444001709089, + -0.18196753017090886 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 64, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 64, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5123, + "count": 360, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 132, + "max": [ + 0.2133668901910517, + 0.008396753219801045, + 0.21336490619105172 + ], + "min": [ + -0.21335775321980102, + -0.6101897532198011, + -0.213359737219801 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 132, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 132, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5123, + "count": 108, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 64, + "max": [ + 0.1659723861700544, + 0.4584028597448575, + 0.1852711648516145 + ], + "min": [ + -0.9547644001700543, + -0.4417433781700543, + -0.18196934817005433 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 64, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 64, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5123, + "count": 360, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 142, + "max": [ + 0.2133662003296099, + 0.008396753158762094, + 0.2133632003296099 + ], + "min": [ + -0.21335775315876215, + -0.6101887531587621, + -0.21336075315876216 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 142, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 142, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5123, + "count": 108, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 62, + "max": [ + 0.9547643402327413, + 0.45840457964219006, + 0.18527241035506314 + ], + "min": [ + -0.16597347323274125, + -0.44174248323274123, + -0.18196843923274128 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 62, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 62, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5123, + "count": 360, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 140, + "max": [ + 0.2133652003296099, + 0.008396753158762094, + 0.21336421632960992 + ], + "min": [ + -0.21335875315876215, + -0.6101887531587621, + -0.21335973715876214 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 140, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 140, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5123, + "count": 108, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 60, + "max": [ + 0.9547643402327413, + 0.45840368464219006, + 0.18527370635506316 + ], + "min": [ + -0.16597347323274125, + -0.44174337823274124, + -0.18196714323274127 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 60, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 60, + "type": "VEC2", + "name": "accessorUVs" + }, + { + "componentType": 5123, + "count": 360, + "type": "SCALAR", + "name": "accessorIndices" + }, + { + "componentType": 5126, + "count": 130, + "max": [ + 0.2133658901910517, + 0.008396753219801045, + 0.21336490619105172 + ], + "min": [ + -0.21335875321980102, + -0.6101897532198011, + -0.213359737219801 + ], + "type": "VEC3", + "name": "accessorPositions" + }, + { + "componentType": 5126, + "count": 130, + "type": "VEC3", + "name": "accessorNormals" + }, + { + "componentType": 5126, + "count": 130, + "type": "VEC2", + "name": "accessorUVs" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteOffset": 0, + "byteLength": 1404, + "name": "bufferViewAnimationFloatScalar" + }, + { + "buffer": 0, + "byteOffset": 1408, + "byteLength": 1680, + "name": "bufferViewAnimationFloatVec4" + }, + { + "buffer": 0, + "byteOffset": 3088, + "byteLength": 2952, + "name": "bufferViewAnimationFloatVec3" + }, + { + "buffer": 0, + "byteOffset": 6040, + "byteLength": 1291 + }, + { + "buffer": 0, + "byteOffset": 7336, + "byteLength": 2159 + }, + { + "buffer": 0, + "byteOffset": 9496, + "byteLength": 2041 + }, + { + "buffer": 0, + "byteOffset": 11544, + "byteLength": 2343 + }, + { + "buffer": 0, + "byteOffset": 13888, + "byteLength": 2342 + }, + { + "buffer": 0, + "byteOffset": 16232, + "byteLength": 2321 + }, + { + "buffer": 0, + "byteOffset": 18560, + "byteLength": 2335 + }, + { + "buffer": 0, + "byteOffset": 20896, + "byteLength": 2447 + }, + { + "buffer": 0, + "byteOffset": 23344, + "byteLength": 2274 + }, + { + "buffer": 0, + "byteOffset": 25624, + "byteLength": 2303 + }, + { + "buffer": 0, + "byteOffset": 27928, + "byteLength": 2161 + }, + { + "buffer": 0, + "byteOffset": 30096, + "byteLength": 2155 + }, + { + "buffer": 0, + "byteOffset": 32256, + "byteLength": 40804 + }, + { + "buffer": 0, + "byteOffset": 73064, + "byteLength": 1118 + }, + { + "buffer": 0, + "byteOffset": 74184, + "byteLength": 962 + }, + { + "buffer": 0, + "byteOffset": 75152, + "byteLength": 1280 + }, + { + "buffer": 0, + "byteOffset": 76432, + "byteLength": 2156 + }, + { + "buffer": 0, + "byteOffset": 78592, + "byteLength": 371 + }, + { + "buffer": 0, + "byteOffset": 78968, + "byteLength": 694 + }, + { + "buffer": 0, + "byteOffset": 79664, + "byteLength": 371 + }, + { + "buffer": 0, + "byteOffset": 80040, + "byteLength": 685 + }, + { + "buffer": 0, + "byteOffset": 80728, + "byteLength": 362 + }, + { + "buffer": 0, + "byteOffset": 81096, + "byteLength": 713 + }, + { + "buffer": 0, + "byteOffset": 81816, + "byteLength": 362 + }, + { + "buffer": 0, + "byteOffset": 82184, + "byteLength": 723 + } + ], + "buffers": [ + { + "name": "GPC", + "byteLength": 82912, + "uri": "GPC.bin" + } + ], + "materials": [ + { + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0, + "roughnessFactor": 0.2581639, + "baseColorFactor": [ + 1, + 1, + 1, + 1 + ] + }, + "name": "FireCar", + "emissiveFactor": [ + 0, + 0, + 0 + ], + "alphaMode": "OPAQUE", + "doubleSided": false + }, + { + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 1, + "texCoord": 0 + }, + "metallicFactor": 0, + "roughnessFactor": 0.2581639, + "baseColorFactor": [ + 1, + 1, + 1, + 1 + ] + }, + "name": "CarColor", + "emissiveFactor": [ + 0, + 0, + 0 + ], + "alphaMode": "OPAQUE", + "doubleSided": false + }, + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.076185, + 0.064803, + 0.043735, + 1 + ], + "metallicFactor": 0, + "roughnessFactor": 0.2581639 + }, + "name": "Glass", + "emissiveFactor": [ + 0, + 0, + 0 + ], + "alphaMode": "OPAQUE", + "doubleSided": false + } + ], + "textures": [ + { + "sampler": 0, + "source": 0, + "name": "FireCar.jpg" + }, + { + "sampler": 0, + "source": 1, + "name": "CarColor.png" + } + ], + "images": [ + { + "name": "FireCar", + "uri": "FireCar.jpg" + }, + { + "name": "CarColor", + "uri": "CarColor.png" + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987, + "wrapS": 10497, + "wrapT": 10497 + } + ], + "animations": [ + { + "channels": [ + { + "sampler": 0, + "target": { + "node": 3, + "path": "rotation" + } + }, + { + "sampler": 1, + "target": { + "node": 8, + "path": "translation" + } + }, + { + "sampler": 2, + "target": { + "node": 8, + "path": "rotation" + } + }, + { + "sampler": 3, + "target": { + "node": 15, + "path": "translation" + } + }, + { + "sampler": 4, + "target": { + "node": 16, + "path": "translation" + } + }, + { + "sampler": 5, + "target": { + "node": 17, + "path": "translation" + } + }, + { + "sampler": 6, + "target": { + "node": 18, + "path": "translation" + } + }, + { + "sampler": 7, + "target": { + "node": 19, + "path": "translation" + } + }, + { + "sampler": 8, + "target": { + "node": 20, + "path": "translation" + } + }, + { + "sampler": 9, + "target": { + "node": 21, + "path": "translation" + } + }, + { + "sampler": 10, + "target": { + "node": 22, + "path": "translation" + } + } + ], + "samplers": [ + { + "input": 0, + "output": 1, + "interpolation": "LINEAR" + }, + { + "input": 2, + "output": 3, + "interpolation": "LINEAR" + }, + { + "input": 4, + "output": 5, + "interpolation": "LINEAR" + }, + { + "input": 6, + "output": 7, + "interpolation": "LINEAR" + }, + { + "input": 8, + "output": 9, + "interpolation": "LINEAR" + }, + { + "input": 10, + "output": 11, + "interpolation": "LINEAR" + }, + { + "input": 12, + "output": 13, + "interpolation": "LINEAR" + }, + { + "input": 14, + "output": 15, + "interpolation": "LINEAR" + }, + { + "input": 16, + "output": 17, + "interpolation": "LINEAR" + }, + { + "input": 18, + "output": 19, + "interpolation": "LINEAR" + }, + { + "input": 20, + "output": 21, + "interpolation": "LINEAR" + } + ], + "name": "All Animations" + } + ], + "extensionsRequired": [ + "KHR_draco_mesh_compression" + ], + "extensionsUsed": [ + "KHR_draco_mesh_compression" + ] +} diff --git a/src/blueprint/blueprint.component.css b/src/blueprint/blueprint.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/blueprint/blueprint.component.html b/src/blueprint/blueprint.component.html new file mode 100644 index 0000000..5ebee99 --- /dev/null +++ b/src/blueprint/blueprint.component.html @@ -0,0 +1,4 @@ +
+
+
+
diff --git a/src/blueprint/blueprint.component.spec.ts b/src/blueprint/blueprint.component.spec.ts new file mode 100644 index 0000000..f3e72a7 --- /dev/null +++ b/src/blueprint/blueprint.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BlueprintComponent } from './blueprint.component'; + +describe('BlueprintComponent', () => { + let component: BlueprintComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BlueprintComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BlueprintComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/blueprint/blueprint.component.ts b/src/blueprint/blueprint.component.ts new file mode 100644 index 0000000..6b8210a --- /dev/null +++ b/src/blueprint/blueprint.component.ts @@ -0,0 +1,56 @@ +import { Component, OnInit } from '@angular/core'; +import { BlueprintJS, BlueprintOptions } from './scripts/blueprint'; + +@Component({ + selector: 'app-blueprint', + templateUrl: './blueprint.component.html', + styleUrls: ['./blueprint.component.css'] +}) +export class BlueprintComponent implements OnInit { + blueprint3d: BlueprintJS; + constructor() { } + + ngOnInit(): void { + + let opts: BlueprintOptions = { + viewer2d: { + id: 'bp3djs-viewer2d', + viewer2dOptions: { + 'corner-radius': 12.5, + 'boundary-point-radius': 5.0, + 'boundary-line-thickness': 2.0, + 'boundary-point-color': '#030303', + 'boundary-line-color': '#090909', + pannable: true, + zoomable: true, + scale: false, + rotate: true, + translate: true, + dimlinecolor: '#3E0000', + dimarrowcolor: '#FF0000', + dimtextcolor: '#000000', + pixiAppOptions: { + resolution: 1, + }, + pixiViewportOptions: { + passiveWheel: false, + } + }, + }, + viewer3d: { + id: 'bp3djs-viewer3d', + viewer3dOptions: { + occludedWalls: false, + occludedRoofs: false + } + }, + textureDir: "models/textures/", + widget: false, + resize: true, + }; + + this.blueprint3d = new BlueprintJS(opts); + + } + +} diff --git a/src/blueprint/scripts/ParametricsInterface.js b/src/blueprint/scripts/ParametricsInterface.js new file mode 100644 index 0000000..0ff6a1c --- /dev/null +++ b/src/blueprint/scripts/ParametricsInterface.js @@ -0,0 +1,53 @@ +import QuickSettings from 'quicksettings'; + +export class ParametricsInterface { + constructor(parametricDataClass, viewer3D, x = 0, y = 0, appParent = null) { + this.__parametricDataClass = parametricDataClass; + this.__viewer3D = viewer3D; + this.__settings = QuickSettings.create(x, y, `Parametric Item: ${parametricDataClass.name}`, appParent); + this.__constructUI(); + } + + __constructUI() { + let parameters = this.__parametricDataClass.parameters; + let parametricsClass = this.__parametricDataClass; + let viewer3D = this.__viewer3D; + for (let opt in parameters) { + let property = parameters[opt]; + switch (property.type) { + case 'color': + this.__settings.addColor(opt, parametricsClass[opt], function(value) { + parametricsClass[opt] = value; + viewer3D.needsUpdate = true; + }); + break; + case 'number': + this.__settings.addNumber(opt, 10, 5000, parametricsClass[opt], 1, function(value) { + parametricsClass[opt] = value; + viewer3D.needsUpdate = true; + }); + break; + case 'range': + this.__settings.addRange(opt, property.min, property.max, parametricsClass[opt], property.step, function(value) { + parametricsClass[opt] = value; + viewer3D.needsUpdate = true; + }); + break; + case 'choice': + this.__settings.addDropDown(opt, property.value, function(item) { + parametricsClass[opt] = item.value; + viewer3D.needsUpdate = true; + }); + break; + default: + console.log('YET TO IMPLEMENT'); + } + } + } + + destroy() { + if (this.__settings) { + this.__settings.destroy(); + } + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/blueprint.ts b/src/blueprint/scripts/blueprint.ts new file mode 100644 index 0000000..e98281d --- /dev/null +++ b/src/blueprint/scripts/blueprint.ts @@ -0,0 +1,139 @@ +import { Configuration, configDimUnit } from "./core/configuration"; +import { dimCentiMeter } from "./core/constants"; +import { Model } from "./model/model"; +import { Viewer3D } from "./viewer3d/Viewer3d"; +import { Viewer2D, floorplannerModes } from "./viewer2d/Viewer2D"; +import { ConfigurationHelper } from "./helpers/ConfigurationHelper"; +import { FloorPlannerHelper } from "./helpers/FloorplannerHelper"; +import { RoomPlannerHelper } from "./helpers/RoomplannerHelper"; + + +export type BlueprintOptions = { + viewer2d: { + id: string, + viewer2dOptions: { + 'corner-radius': number, + 'boundary-point-radius': number, + 'boundary-line-thickness': number, + 'boundary-point-color': string, + 'boundary-line-color': string, + pannable: boolean, + zoomable: boolean, + scale: boolean, + rotate: boolean, + translate: boolean, + dimlinecolor: string, + dimarrowcolor: string, + dimtextcolor: string, + pixiAppOptions: { + resolution: number, + }, + pixiViewportOptions: { + passiveWheel: boolean, + }, + }, + }, + viewer3d: { + id: string, + viewer3dOptions: { + occludedWalls: boolean, + occludedRoofs: boolean, + } + }, + textureDir: string, + widget: boolean, + resize: boolean, +} +/** + * 蓝图应用程序核心 + */ +export class BlueprintJS { + options: BlueprintOptions; + model: Model; + roomplanner: Viewer3D; + configurationHelper: ConfigurationHelper; + floorplanningHelper: FloorPlannerHelper; + roomplanningHelper: RoomPlannerHelper; + viewer2d: Viewer2D; + viewer3d: Viewer3D; + view_now: number; + /** + * 创建一个蓝图的实例。 这是应用程序的入口点 + * @例子 + * 让 blueprint3d = new BP3DJS.BlueprintJS(opts); + */ + constructor(options: BlueprintOptions) { + Configuration.setValue(configDimUnit, dimCentiMeter); + + + this.options = options; + + this.model = new Model(options.textureDir); + + let viewer3dOptions = this.options.viewer3d.viewer3dOptions; + + // viewer3dOptions.resize = (this.options.resize) ? true : false; + + this.roomplanner = new Viewer3D(this.model, options.viewer3d.id, viewer3dOptions); + + this.configurationHelper = new ConfigurationHelper(); + this.floorplanningHelper = null; + this.roomplanningHelper = new RoomPlannerHelper(this.model, this.model.floorplan, this.roomplanner); + if (!options.widget) { + let viewer2dOptions = this.options.viewer2d.viewer2dOptions; + // viewer2dOptions.resize = (this.options.resize) ? true : false; + this.viewer2d = new Viewer2D(options.viewer2d.id, this.model.floorplan, viewer2dOptions); + this.floorplanningHelper = new FloorPlannerHelper(this.model.floorplan, this.viewer2d); + } + + this.view_now = 3; + this.switchView(); + } + + switchView(): void { + if (this.options.widget) { + return; + } + this.viewer2d.switchMode(floorplannerModes.MOVE); + if (this.view_now === 3 && !this.options.widget) { + this.view_now = 2; + document.getElementById(this.options.viewer2d.id).style.visibility = "visible"; + document.getElementById(this.options.viewer3d.id).style.visibility = "hidden"; + this.roomplanner.enabled = false; + } else if (this.view_now === 2 && !this.options.widget) { + this.view_now = 3; + document.getElementById(this.options.viewer2d.id).style.visibility = "hidden"; + document.getElementById(this.options.viewer3d.id).style.visibility = "visible"; + this.roomplanner.enabled = true; + } + } + + setViewer2DModeToDraw(mode) { + if (this.options.widget) { + return; + } + this.viewer2d.switchMode(floorplannerModes.DRAW); + } + + setViewer2DModeToMove(mode) { + if (this.options.widget) { + return; + } + this.viewer2d.switchMode(floorplannerModes.MOVE); + } + + switchViewer2DToTransform(mode) { + if (this.options.widget) { + return; + } + this.viewer2d.switchMode(floorplannerModes.EDIT_ISLANDS); + } + + updateView3D() { + this.viewer3d.needsUpdate = true; + } + + get currentView() { + return this.view_now; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/core/EventSystem.ts b/src/blueprint/scripts/core/EventSystem.ts new file mode 100644 index 0000000..c623865 --- /dev/null +++ b/src/blueprint/scripts/core/EventSystem.ts @@ -0,0 +1,83 @@ +import { MessageSystem } from "./MessageSystem"; + +export type eventTypes = + "ACTION_EVENT" | + "DELETED_EVENT" | + "MOVED_EVENT" | + "REDRAW_EVENT" | + "NEW_EVENT" | + "LOADED_EVENT" | + "LOADING_EVENT" | + "UPDATED_EVENT" | + "SAVED_EVENT" | + "CHANGED_EVENT" | + "GLTF_READY_EVENT" | + "EXTERNAL_FLOORPLAN_LOADED_EVENT" | + "NEW_PARAMETRIC_ITEM_EVENT" | + "NEW_ITEM_EVENT" | + "ITEM_LOADING_EVENT" | + "ITEM_LOADED_EVENT" | + "ITEM_REMOVED_EVENT" | + + "ITEM_SELECTED_EVENT" | + "ITEM_MOVED_EVENT" | + "ITEM_MOVED_FINISH_EVENT" | + "ITEM_HOVERON_EVENT" | + "ITEM_HOVEROFF_EVENT" | + "ITEM_NO_SELECTED_EVENT" | + + "MODE_RESET_EVENT" | + "CAMERA_MOVED_EVENT" | + "CAMERA_ACTIVE_STATUS_EVENT" | + "CAMERA_VIEW_CHANGE_EVENT" | + "CAMERA_FPS_EXIT_EVENT" | + + "WALL_CLICKED_EVENT" | + "ROOM_CLICKED_EVENT" | + "FLOOR_CLICKED_EVENT" | + "NOTHING_CLICKED_EVENT" | + + "CHANGED_ROOM_NAME_EVENT" | + "ADDED_NEW_ROOMS_EVENT" | + + "CORNER_ATTRIBUTES_CHANGED_EVENT" | + "WALL_ATTRIBUTES_CHANGED_EVENT" | + "ROOM_ATTRIBUTES_CHANGED_EVENT" | + + "CORNER_CLICKED_2D_EVENT" | + "WALL_CLICKED_2D_EVENT" | + "ROOM_CLICKED_2D_EVENT" | + "UNSELECTED_2D_EVENT" | + "SELECTED_2D_EVENT" | + "NOTHING_2D_SELECTED_EVENT" | + + "CORNER_DOUBLE_CLICKED_2D_EVENT" | + "WALL_DOUBLE_CLICKED_2D_EVENT" | + "ROOM_DOUBLE_CLICKED_2D_EVENT" | + + "CORNER_HOVER_2D_EVENT" | + "WALL_HOVER_2D_EVENT" | + "ROOM_HOVER_2D_EVENT" | + + "KEY_PRESSED_EVENT" | + "KEY_RELEASED_EVENT" | + + "UPDATE_TEXTURES_EVENT" | + "MODIFY_TEXTURE_ATTRIBUTE_EVENT" | + + "PARAMETRIC_GEOMETRY_UPATED_EVENT" | + + "BOUNDARY_UPDATE_EVENT" + ; + + + +export class EventSystem extends MessageSystem{ + private static instance: EventSystem = new EventSystem(); + private constructor() { + super(); + } + public static get Instance(): EventSystem { + return this.instance; + } +} diff --git a/src/blueprint/scripts/core/MessageSystem.ts b/src/blueprint/scripts/core/MessageSystem.ts new file mode 100644 index 0000000..3e19726 --- /dev/null +++ b/src/blueprint/scripts/core/MessageSystem.ts @@ -0,0 +1,205 @@ +/** + * 事件系统 + * + * interface Event { + type: eventTypes; + eventData: unknown; + } + + type eventTypes = "a" | "b"; + + const msg = new MessageSystem(); + + const event = (event1:Event) => { + console.log(event1.eventData); + } + + msg.addListener("a", event); + + msg.sendMessage("a", { type: "a", eventData: "注册发送" }); + + msg.removeListener("a", event) + + msg.sendMessage("a", { type: "a", eventData: "移除消息后发送" }); + * + * + * + * + */ +export class MessageSystem { + // 监听对象 + private Observables: Map> = new Map>(); + + constructor() { + + } + /** + * 添加事件监听 + * @param eventType 事件类型 + * @param callback 事件函数 + * @returns 可观察对象 + */ + public addListener(eventType: T, callback: (eventData: V) => void): Observer { + let observable: Observable = null; + // 如果没有观察者,添加观察者 + if (this.Observables.has(eventType)) { + observable = this.Observables.get(eventType); + } else { + observable = new Observable(); + this.Observables.set(eventType, observable); + } + return observable.addCallback(callback); + } + + public removeListener(eventType: T, callback: (eventData: V) => void): boolean { + let observable: Observable = null; + // 如果没有观察者,返回 + if (this.Observables.has(eventType)) { + observable = this.Observables.get(eventType); + const result = observable.removeCallback(callback); + if (!observable.hasObservers()) { + this.Observables.delete(eventType); + } + return result; + } else { + return false; + } + } + + public sendMessage(eventType: T, eventData: V): boolean { + let observable: Observable = null; + if (this.Observables.has(eventType)) { + observable = this.Observables.get(eventType); + return observable.notifyObservers(eventData); + } else { + return false; + } + + } +} +/** + * 观察者 + */ +class Observable{ + + private _observers: Array>; + private _onObserverAdded: (observer: Observer) => void; + + get observers(): Array> { + return this._observers; + } + + constructor(onObserverAdded?: (observer: Observer) => void) { + this._observers = new Array>(); + + if (onObserverAdded) { + this._onObserverAdded = onObserverAdded; + } + } + /** + * 通过可观察对象添加事件 + * @param observer 可观察对象 + * @returns 操作结果 + */ + add(observer: Observer): boolean { + if (!observer) { + return false; + } + this._observers.push(observer); + if (this._onObserverAdded) { + this._onObserverAdded(observer); + } + return true; + } + /** + * 通过回调函数添加事件 + * @param callback 回调函数 + * @returns 可观察对象 + */ + addCallback(callback: (eventData: T) => void): Observer { + if (!callback) { + return null; + } + const observer = new Observer(callback); + this.add(observer); + return observer; + } + /** + * 通过可观察对象移除事件 + * @param observer 可观察对象 + * @returns 操作结果 + */ + remove(observer: Observer): boolean { + if (!observer) { + return false; + } + var index = this._observers.indexOf(observer); + if (index !== -1) { + this._observers.splice(index, 1); + return true; + } + return false; + } + /** + * 通过回调函数移除事件 + * @param callback 回调函数 + * @returns 成功:true 失败:false + */ + removeCallback(callback: (eventData: T) => void): boolean { + for (var index = 0; index < this._observers.length; index++) { + var observer = this._observers[index]; + if (observer.compar(callback)) { + this.remove(observer); + return true; + } + } + return false; + } + /** + * 发送可观察对象 + * @param eventData 消息体 + * @returns 成功: true 失败:false + */ + notifyObservers(eventData: T): boolean { + if (!this._observers.length) { + return true; + } + for (const observer of this._observers) { + observer.notify(eventData); + } + return true; + } + /** + * 是否有可观察对象 + * @returns 成功: true 失败:false + */ + hasObservers(): boolean { + return this._observers.length > 0; + } + /** + * 清空 + */ + clear(): void { + this._observers = new Array>(); + this._onObserverAdded = null; + } +} +/** + * 可观察对象 + */ +class Observer { + + private callback: (event: T) => void = null; + + constructor(callback: (event: T) => void) { + this.callback = callback; + } + + notify(event: T): void { + this.callback(event); + } + + compar(callback: (event: T) => void): boolean { + return callback === this.callback; + } +} diff --git a/src/blueprint/scripts/core/Singleton.ts b/src/blueprint/scripts/core/Singleton.ts new file mode 100644 index 0000000..0b086cc --- /dev/null +++ b/src/blueprint/scripts/core/Singleton.ts @@ -0,0 +1,32 @@ +/** + * 饿汉模式 + * 特点:类加载时就初始化。 + */ +class SingletonMode1 { + + private static instance = new SingletonMode1() + + // 将 constructor 设为私有属性,防止 new 调用 + private constructor() { } + + static getInstance(): SingletonMode1 { + return this.instance + } +} + +/** + * 懒汉模式 + * 特点:需要时才创建对象实例。 + */ +class SingletonMode2 { + private static instance: SingletonMode2 + + private constructor() { } + + static getInstance(): SingletonMode2 { + if (!this.instance) { + this.instance = new SingletonMode2() + } + return this.instance + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/core/configuration.ts b/src/blueprint/scripts/core/configuration.ts new file mode 100644 index 0000000..b1bd9b8 --- /dev/null +++ b/src/blueprint/scripts/core/configuration.ts @@ -0,0 +1,122 @@ +import { dimCentiMeter } from './constants.js'; + +import { EventSystem, eventTypes } from './EventSystem.js'; + + +// GENERAL: +/** The dimensioning unit for 2D floorplan measurements. */ +export var configDimUnit = 'dimUnit'; +// WALL: +/** The initial wall height in cm. */ +export const configWallHeight = 'wallHeight'; +/** The initial wall thickness in cm. */ +export const configWallThickness = 'wallThickness'; + +export const configSystemUI = 'systemUI'; + +export const scale = 'scale'; + +export const gridSpacing = 'gridSpacing'; +export const snapToGrid = 'snapToGrid'; +export const directionalDrag = 'directionalDrag'; +export const dragOnlyX = 'dragOnlyX'; +export const dragOnlyY = 'dragOnlyY'; +export const snapTolerance = 'snapTolerance'; //In CMS +export const boundsX = 'boundsX'; //In CMS +export const boundsY = 'boundsY'; //In CMS +export const viewBounds = 'viewBounds';//In CMS + + +export var config = { + dimUnit: dimCentiMeter, wallHeight: 250, + wallThickness: 20, systemUI: false, + scale: 1, snapToGrid: true, + dragOnlyX: false, dragOnlyY: false, + snapTolerance: 50, gridSpacing: 50, + directionalDrag: true, + boundsX: 500, boundsY: 500, + viewBounds: 5000 +}; + +export var wallInformation = { exterior: false, interior: false, midline: true, labels: true, exteriorlabel: 'e:', interiorlabel: 'i:', midlinelabel: 'm:' }; + + +/** + * The tolerance in cms between corners, otherwise below this tolerance they will snap together as one corner*/ +export const cornerTolerance = 20; + +/** Global configuration to customize the whole system. + * This is a singleton instance; + */ +export class Configuration { + private static instance: Configuration; + constructor() { + /** Configuration data loaded from/stored to extern. */ + // this.data = {dimUnit: dimCentiMeter, wallHeight: 250, wallThickness: 10}; + } + + static getInstance() { + if (this.instance === undefined) { + this.instance = new Configuration(); + } + return this.instance; + } + + static getData() { + // return {dimUnit: dimCentiMeter,wallHeight: 250, wallThickness: 10}; + return config; + } + + /** Set a configuration parameter. */ + static setValue(key, value) { + // this.data[key] = value; + config[key] = value; + // if(key !== viewBounds){ + // Configuration.getInstance().dispatchEvent({ type: EVENT_CHANGED, item: Configuration.getInstance(), 'key': key, 'value': value }); + EventSystem.Instance.sendMessage("CHANGED_EVENT", {}); + // } + } + + /** Get a string configuration parameter. */ + static getStringValue(key): string { + switch (key) { + case configDimUnit: + // return String(this.data[key]); + return String(Configuration.getData()[key]); + default: + throw new Error('Invalid string configuration parameter: ' + key); + } + } + + /** Get a numeric configuration parameter. */ + static getNumericValue(key): number { + switch (key) { + case configSystemUI: + case configWallHeight: + case configWallThickness: + case scale: + case snapTolerance: + case gridSpacing: + case boundsX: + case boundsY: + case viewBounds: + // return Number(this.data[key]); + return Number(Configuration.getData()[key]); + default: + throw new Error('Invalid numeric configuration parameter: ' + key); + } + } + + /** Get a numeric configuration parameter. */ + static getBooleanValue(key): boolean { + switch (key) { + case snapToGrid: + case directionalDrag: + case dragOnlyX: + case dragOnlyY: + return Boolean(Configuration.getData()[key]); + default: + throw new Error('Invalid Boolean configuration parameter: ' + key); + } + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/core/constants.ts b/src/blueprint/scripts/core/constants.ts new file mode 100644 index 0000000..f1304cd --- /dev/null +++ b/src/blueprint/scripts/core/constants.ts @@ -0,0 +1,32 @@ +/** Dimensioning in Inch. */ +export const dimInch = 'inch'; + +/** Dimensioning in Inch. */ +export const dimFeetAndInch = 'feetAndInch'; + +/** Dimensioning in Meter. */ +export const dimMeter = 'm'; + +/** Dimensioning in Centi Meter. */ +export const dimCentiMeter = 'cm'; + +/** Dimensioning in Milli Meter. */ +export const dimMilliMeter = 'mm'; + +export const VIEW_TOP = 'topview'; +export const VIEW_FRONT = 'frontview'; +export const VIEW_RIGHT = 'rightview'; +export const VIEW_LEFT = 'leftview'; +export const VIEW_ISOMETRY = 'isometryview'; + +export enum WallTypes { + STRAIGHT, + CURVED +} + +export const TEXTURE_DEFAULT_REPEAT = 300; +export const defaultWallTexture = { color: '#FFFFFF', repeat: TEXTURE_DEFAULT_REPEAT, normalmap: 'textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg', roughnessmap: 'textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg', colormap: 'textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg', ambientmap: 'textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg', bumpmap: 'textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png' }; +export const defaultFloorTexture = { color: '#FFFFFF', emissive: '#181818', repeat: TEXTURE_DEFAULT_REPEAT, ambientmap: 'textures/Floor/Marble_Tiles_001/Marble_Tiles_001_ambientOcclusion.jpg', colormap: 'textures/Floor/Marble_Tiles_001/Marble_Tiles_001_basecolor.jpg', roughnessmap: 'textures/Floor/Marble_Tiles_001/Marble_Tiles_001_roughness.jpg', normalmap: 'textures/Floor/Marble_Tiles_001/Marble_Tiles_001_normal.jpg' }; + +export const TEXTURE_PROPERTY_COLOR = 'color'; +export const TEXTURE_NO_PREVIEW = 'textures/NoPreview.jpg'; \ No newline at end of file diff --git a/src/blueprint/scripts/core/dimensioning.ts b/src/blueprint/scripts/core/dimensioning.ts new file mode 100644 index 0000000..6ac409e --- /dev/null +++ b/src/blueprint/scripts/core/dimensioning.ts @@ -0,0 +1,146 @@ +import { Vector2, Vector3 } from 'three'; +import { Configuration, configDimUnit } from './configuration.js'; +import { dimInch, dimFeetAndInch, dimMeter, dimCentiMeter, dimMilliMeter } from './constants.js'; + +export const decimals = 1000; + +export const cmPerFoot = 30.48; +export const pixelsPerFoot = 5.0; + +export const pixelsPerCm = 0.5; +export const cmPerPixel = (1.0 / pixelsPerCm); + + +export const dimensioningOptions = [dimInch, dimFeetAndInch, dimMeter, dimCentiMeter, dimMilliMeter]; + + +/** Dimensioning functions. */ +export class Dimensioning { + static cmToPixelVector2D(cmV2d) { + let pixelV2d = new Vector2(Dimensioning.cmToPixel(cmV2d.x), Dimensioning.cmToPixel(cmV2d.y)); + return pixelV2d; + } + + static cmToPixelVector3D(cmV3d) { + let pixelV2d = new Vector3(Dimensioning.cmToPixel(cmV3d.x), Dimensioning.cmToPixel(cmV3d.y), Dimensioning.cmToPixel(cmV3d.z)); + return pixelV2d; + } + + static pixelToCmVector2D(pixelV2d) { + let cmV2d = new Vector2(Dimensioning.cmToPixel(pixelV2d.x), Dimensioning.cmToPixel(pixelV2d.y)); + return cmV2d; + } + + static pixelToCmVector3D(pixel3d) { + let cmV2d = new Vector3(Dimensioning.cmToPixel(pixel3d.x), Dimensioning.cmToPixel(pixel3d.y), Dimensioning.cmToPixel(pixel3d.z)); + return cmV2d; + } + + static cmToPixel(cm, apply_scale = true) { + if (apply_scale) { + return cm * pixelsPerCm * Configuration.getNumericValue('scale'); + } + return cm * pixelsPerCm; + } + + static pixelToCm(pixel, apply_scale = true) { + if (apply_scale) { + return pixel * cmPerPixel * (1.0 / Configuration.getNumericValue('scale')); + } + return pixel * cmPerPixel; + } + + static roundOff(value, decimals) { + return Math.round(decimals * value) / decimals; + } + /** Converts cm to dimensioning number. + * @param cm Centi meter value to be converted. + * @returns Number representation. + */ + static cmFromMeasureRaw(measure) { + switch (Configuration.getStringValue(configDimUnit)) { + case dimFeetAndInch: + return Math.round(decimals * (measure * 30.480016459203095991)) / decimals; + case dimInch: + return Math.round(decimals * (measure * 2.5400013716002578512)) / decimals; + case dimMilliMeter: + return Math.round(decimals * (measure * 0.10000005400001014955)) / decimals; + case dimCentiMeter: + return measure; + case dimMeter: + default: + return Math.round(decimals * 100 * measure) / decimals; + } + } + + /** Converts cm to dimensioning string. + * @param cm Centi meter value to be converted. + * @returns String representation. + */ + static cmFromMeasure(measure) { + switch (Configuration.getStringValue(configDimUnit)) { + case dimFeetAndInch: + return Math.round(decimals * (measure * 30.480016459203095991)) / decimals + 'cm'; + case dimInch: + return Math.round(decimals * (measure * 2.5400013716002578512)) / decimals + 'cm'; + case dimMilliMeter: + return Math.round(decimals * (measure * 0.10000005400001014955)) / decimals + 'cm'; + case dimCentiMeter: + return measure; + case dimMeter: + default: + return Math.round(decimals * 100 * measure) / decimals + 'cm'; + } + } + + /** Converts cm to dimensioning string. + * @param cm Centi meter value to be converted. + * @returns String representation. + */ + static cmToMeasureRaw(cm, power = 1) { + switch (Configuration.getStringValue(configDimUnit)) { + case dimFeetAndInch: // dimFeetAndInch returns only the feet + var allInFeet = (cm * Math.pow(0.032808416666669996953, power)); + return allInFeet; + case dimInch: + var inches = Math.round(decimals * (cm * Math.pow(0.393700, power))) / decimals; + return inches; + case dimMilliMeter: + var mm = Math.round(decimals * (cm * Math.pow(10, power))) / decimals; + return mm; + case dimCentiMeter: + return Math.round(decimals * cm) / decimals; + case dimMeter: + default: + var m = Math.round(decimals * (cm * Math.pow(0.01, power))) / decimals; + return m; + } + } + + /** Converts cm to dimensioning string. + * @param cm Centi meter value to be converted. + * @returns String representation. + */ + static cmToMeasure(cm, power = 1) { + switch (Configuration.getStringValue(configDimUnit)) { + case dimFeetAndInch: + var allInFeet = (cm * Math.pow(0.032808416666669996953, power)); + var floorFeet = Math.floor(allInFeet); + var remainingFeet = allInFeet - floorFeet; + var remainingInches = Math.round(remainingFeet * 12); + return floorFeet + '\'' + remainingInches + ''; + case dimInch: + var inches = Math.round(decimals * (cm * Math.pow(0.393700, power))) / decimals; + return inches + '\''; + case dimMilliMeter: + var mm = Math.round(decimals * (cm * Math.pow(10, power))) / decimals; + return '' + mm + 'mm'; + case dimCentiMeter: + return '' + Math.round(decimals * cm) / decimals + 'cm'; + case dimMeter: + default: + var m = Math.round(decimals * (cm * Math.pow(0.01, power))) / decimals; + return '' + m + 'm'; + } + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/core/exposable.ts b/src/blueprint/scripts/core/exposable.ts new file mode 100644 index 0000000..6838c09 --- /dev/null +++ b/src/blueprint/scripts/core/exposable.ts @@ -0,0 +1,14 @@ + +export const GUI_TYPES = Enum('Boolean', 'Function', 'Color', 'Date', 'Array', 'HtmlElement', 'File', 'Html', 'Image', 'Number', 'String', 'Time'); + +export class GuiBindable extends EventDispatcher { + constructor(instance, property, guiObject) { + + } + + + + updateGUI() { + + } +} diff --git a/src/blueprint/scripts/core/log.ts b/src/blueprint/scripts/core/log.ts new file mode 100644 index 0000000..3cc4fdf --- /dev/null +++ b/src/blueprint/scripts/core/log.ts @@ -0,0 +1,58 @@ + +export enum ELogContext { + None, + All, + Interaction2d, + Item, + Wall, + Room +} +export enum ELogLevel { + Information, + Warning, + Error, + Fatal, + Debug +} +/** The current log context. To be set when initializing the Application. */ +export var logContext = ELogContext.None; + +/** Pre-check if logging for specified context and/or level is enabled. + * This may be used to avoid compilation of complex logs. + * @param context The log context to be verified. + * @param level The log level to be verified. + * @returns If this context/levels is currently logged. + */ +export function isLogging(context, level) { + return logContext === ELogContext.All || logContext === context || level === ELogLevel.Warning || level === ELogLevel.Error || level === ELogLevel.Fatal; +} + +/** Log the passed message in the context and with given level. + * @param context The context in which the message should be logged. + * @param level The level of the message. + * @param message The messages to be logged. + */ +export function log(context, level, message) { + if (isLogging(context, level) === false) { + return; + } + var tPrefix = ''; + switch (level) { + case ELogLevel.Information: + tPrefix = '[INFO_] '; + break; + case ELogLevel.Warning: + tPrefix = '[WARNG] '; + break; + case ELogLevel.Error: + tPrefix = '[ERROR] '; + break; + case ELogLevel.Fatal: + tPrefix = '[FATAL] '; + break; + case ELogLevel.Debug: + tPrefix = '[DEBUG] '; + break; + } + console.log(tPrefix + message); +} \ No newline at end of file diff --git a/src/blueprint/scripts/core/utils.js b/src/blueprint/scripts/core/utils.js new file mode 100644 index 0000000..b7ffecc --- /dev/null +++ b/src/blueprint/scripts/core/utils.js @@ -0,0 +1,472 @@ +import { Vector3, Vector2 } from 'three'; +import { Math as THREEMath } from 'three'; +import { checkIntersection } from 'line-intersect'; + +export class Utils { + /** Determines the distance of a point from a line. + * @param point The Point coordinates as THREE.Vector2 + * @param start The starting coordinates of the line as THREE.Vector2 + * @param end The ending coordinates of the line as THREE.Vector2 + * @returns The distance value (number). + */ + static pointDistanceFromLine(point, start, end) { + var tPoint = Utils.closestPointOnLine(point, start, end); + var tDx = point.x - tPoint.x; + var tDy = point.y - tPoint.y; + return Math.sqrt(tDx * tDx + tDy * tDy); + } + + /** Gets the projection of a point onto a line. + * @param point the point + * @param start the starting coordinates of the line as THREE.Vector2 + * @param end the ending coordinates of the line as THREE.Vector2 + * @returns The point as THREE.Vector2. + */ + static closestPointOnLine(point, start, end) { + // Inspired by: http://stackoverflow.com/a/6853926 + var tA = point.x - start.x; + var tB = point.y - start.y; + var tC = end.x - start.x; + var tD = end.y - start.y; + + var tDot = tA * tC + tB * tD; + var tLenSq = tC * tC + tD * tD; + var tParam = tDot / tLenSq; + + var tXx, tYy; + + if (tParam < 0 || (start.x === end.x && start.y === end.y)) { + tXx = start.x; + tYy = start.y; + } else if (tParam > 1) { + tXx = end.x; + tYy = end.y; + } else { + tXx = start.x + tParam * tC; + tYy = start.y + tParam * tD; + } + + return new Vector2(tXx, tYy); + } + + /** Gets the distance of two points. + * @param start the starting coordinate of the line as Vector2 + * @param end the ending coordinate of the line as Vector2 + * @returns The distance. + */ + static distance(start, end) { + return Math.sqrt(Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2)); + } + + /** Gets the angle between point1 -> start and 0,0 -> point2 (-pi to pi) + * @returns The angle. + */ + static angle(start, end) { + var tDot = start.x * end.x + start.y * end.y; + var tDet = start.x * end.y - start.y * end.x; + var tAngle = -Math.atan2(tDet, tDot); + return tAngle; + } + + /** shifts angle to be 0 to 2pi */ + static angle2pi(start, end) { + var tTheta = Utils.angle(start, end); + if (tTheta < 0) { + tTheta += 2.0 * Math.PI; + } + return tTheta; + } + + /** shifts angle to be 0 to 2pi */ + static getCyclicOrder(points, start = undefined) { + if (!start) { + start = new Vector2(0, 0); + } + var angles = []; + for (var i = 0; i < points.length; i++) { + var point = points[i]; + var vect = point.clone().sub(start); + var radians = Math.atan2(vect.y, vect.x); + var degrees = THREEMath.radToDeg(radians); + degrees = (degrees > 0) ? degrees : (degrees + 360) % 360; + angles.push(degrees); + } + var indices = Utils.argsort(angles); + var sortedAngles = []; + var sortedPoints = []; + for (i = 0; i < indices.length; i++) { + sortedAngles.push(angles[indices[i]]); + sortedPoints.push(points[indices[i]]); + } + return { indices: indices, angles: sortedAngles, points: sortedPoints }; + } + + static argsort(numericalValues, direction = 1) { + var indices = Array.from(new Array(numericalValues.length), (val, index) => index); + return indices + .map((item, index) => [numericalValues[index], item]) // add the clickCount to sort by + .sort(([count1], [count2]) => (count1 - count2) * direction) // sort by the clickCount data + .map(([, item]) => item); // extract the sorted items + } + + /** Checks if an array of points is clockwise. + * @param points Is array of points with x,y attributes + * @returns True if clockwise. + */ + static isClockwise(points) { + // make positive + let tSubX = Math.min(0, Math.min.apply(null, Utils.map(points, function(p) { + return p.x; + }))); + let tSubY = Math.min(0, Math.min.apply(null, Utils.map(points, function(p) { + return p.x; + }))); + + var tNewPoints = Utils.map(points, function(p) { + return { + x: p.x - tSubX, + y: p.y - tSubY + }; + }); + + // determine CW/CCW, based on: + // http://stackoverflow.com/questions/1165647 + var tSum = 0; + for (var tI = 0; tI < tNewPoints.length; tI++) { + var tC1 = tNewPoints[tI]; + var tC2; + if (tI === tNewPoints.length - 1) { + tC2 = tNewPoints[0]; + } else { + tC2 = tNewPoints[tI + 1]; + } + tSum += (tC2.x - tC1.x) * (tC2.y + tC1.y); + } + return (tSum >= 0); + } + + /** Creates a Guide. + * @returns A new Guide. + */ + static guide() { + var tS4 = function() { + return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); + }; + return tS4() + tS4() + '-' + tS4() + '-' + tS4() + '-' + tS4() + '-' + tS4() + tS4() + tS4(); + } + + /** both arguments are arrays of corners with x,y attributes */ + static polygonPolygonIntersect(firstCorners, secondCorners) { + for (var tI = 0; tI < firstCorners.length; tI++) { + var tFirstCorner = firstCorners[tI], + tSecondCorner; + if (tI === firstCorners.length - 1) { + tSecondCorner = firstCorners[0]; + } else { + tSecondCorner = firstCorners[tI + 1]; + } + if (Utils.linePolygonIntersect(tFirstCorner.x, tFirstCorner.y, tSecondCorner.x, tSecondCorner.y, secondCorners)) { + return true; + } + } + return false; + } + + /** Corners is an array of points with x,y attributes */ + static linePolygonIntersect(point, point2, corners) { + for (var tI = 0; tI < corners.length; tI++) { + var tFirstCorner = corners[tI], + tSecondCorner; + if (tI === corners.length - 1) { + tSecondCorner = corners[0]; + } else { + tSecondCorner = corners[tI + 1]; + } + if (Utils.lineLineIntersect(point, point2, { x: tFirstCorner.x, y: tFirstCorner.y }, { x: tSecondCorner.x, y: tSecondCorner.y })) { + return true; + } + } + return false; + } + + /** */ + static lineLineIntersectPoint(aStart, aEnd, bStart, bEnd) { + var result = checkIntersection(aStart.x, aStart.y, aEnd.x, aEnd.y, bStart.x, bStart.y, bEnd.x, bEnd.y); + if (result.point) { + return new Vector2(result.point.x, result.point.y); + } + return undefined; + + } + + /** */ + static lineLineIntersect(lineAStart, lineAEnd, lineBStart, lineBEnd) { + function tCCW(p1, p2, p3) { + var tA = p1.x, + tB = p1.y, + tC = p2.x, + tD = p2.y, + tE = p3.x, + tF = p3.y; + return (tF - tB) * (tC - tA) > (tD - tB) * (tE - tA); + } + var tP1 = lineAStart, + tP2 = lineAEnd, + tP3 = lineBStart, + tP4 = lineBEnd; + return (tCCW(tP1, tP3, tP4) != tCCW(tP2, tP3, tP4)) && (tCCW(tP1, tP2, tP3) != tCCW(tP1, tP2, tP4)); + } + + /** + @param corners Is an array of points with x,y attributes + @param startX X start coord for raycast + @param startY Y start coord for raycast + */ + static pointInPolygon2(point, polygon) { + var x = point.x, + y = point.y; + var inside = false; + for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { + var intersect = ((((polygon[i].y <= y) && (y < polygon[j].y)) || ((polygon[j].y <= y) && (y < polygon[i].y))) && (x < (polygon[j].x - polygon[i].x) * (y - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x)); + if (intersect) { + inside = !inside; + } + } + return inside; + } + + /** + @param corners Is an array of points with x,y attributes + @param startX X start coord for raycast + @param startY Y start coord for raycast + */ + static pointInPolygon(point, corners, start) { + start = start || new Vector2(0, 0); + var startX = start.x || 0; + var startY = start.y || 0; + + //ensure that point(startX, startY) is outside the polygon consists of corners + var tMinX = 0, + tMinY = 0; + var tI = 0; + + if (startX === undefined || startY === undefined) { + for (tI = 0; tI < corners.length; tI++) { + tMinX = Math.min(tMinX, corners[tI].x); + tMinY = Math.min(tMinX, corners[tI].y); + } + startX = tMinX - 10; + startY = tMinY - 10; + } + + var tIntersects = 0; + for (tI = 0; tI < corners.length; tI++) { + var tFirstCorner = corners[tI], + tSecondCorner; + if (tI === corners.length - 1) { + tSecondCorner = corners[0]; + } else { + tSecondCorner = corners[tI + 1]; + } + + if (Utils.lineLineIntersect(start, point, tFirstCorner.x, tFirstCorner.y, tSecondCorner.x, tSecondCorner.y)) { + tIntersects++; + } + } + // odd intersections means the point is in the polygon + return ((tIntersects % 2) === 1); + } + + /** Checks if all corners of insideCorners are inside the polygon described by outsideCorners */ + static polygonInsidePolygon(insideCorners, outsideCorners, start) { + start.x = start.x || 0; + start.y = start.y || 0; + + for (var tI = 0; tI < insideCorners.length; tI++) { + if (!Utils.pointInPolygon(insideCorners[tI].x, insideCorners[tI].y, outsideCorners, start)) { + return false; + } + } + return true; + } + + /** Checks if any corners of firstCorners is inside the polygon described by secondCorners */ + static polygonOutsidePolygon(insideCorners, outsideCorners, start) { + start.x = start.x || 0; + start.y = start.y || 0; + + for (var tI = 0; tI < insideCorners.length; tI++) { + if (Utils.pointInPolygon(insideCorners[tI].x, insideCorners[tI].y, outsideCorners, start)) { + return false; + } + } + return true; + } + + // arrays + + static forEach(array, action) { + for (var tI = 0; tI < array.length; tI++) { + action(array[tI]); + } + } + + static forEachIndexed(array, action) { + for (var tI = 0; tI < array.length; tI++) { + action(tI, array[tI]); + } + } + + static map(array, func) { + var tResult = []; + array.forEach((element) => { + tResult.push(func(element)); + }); + return tResult; + } + + /** Remove elements in array if func(element) returns true */ + static removeIf(array, func) { + var tResult = []; + array.forEach((element) => { + if (!func(element)) { + tResult.push(element); + } + }); + return tResult; + } + + /** Shift the items in an array by shift (positive integer) */ + static cycle(arr, shift) { + var tReturn = arr.slice(0); + for (var tI = 0; tI < shift; tI++) { + var tmp = tReturn.shift(); + tReturn.push(tmp); + } + return tReturn; + } + + /** Returns in the unique elemnts in arr */ + static unique(arr, hashFunc) { + var tResults = []; + var tMap = {}; + for (var tI = 0; tI < arr.length; tI++) { + if (!tMap.hasOwnProperty(arr[tI])) { + tResults.push(arr[tI]); + tMap[hashFunc(arr[tI])] = true; + } + } + return tResults; + } + + /** Remove value from array, if it is present */ + static removeValue(array, value) { + for (var tI = array.length - 1; tI >= 0; tI--) { + if (array[tI] === value) { + array.splice(tI, 1); + return tI; + } + } + } + + /** Checks if value is in array */ + static hasValue(array, value) { + for (var tI = 0; tI < array.length; tI++) { + if (array[tI] === value) { + return true; + } + } + return false; + } + + /** Subtracts the elements in subArray from array */ + static subtract(array, subArray) { + return Utils.removeIf(array, function(el) { + return Utils.hasValue(subArray, el); + }); + } + + static point2Dto3D(point2D, elevation = 0) { + return new Vector3(point2D.x, elevation, point2D.y); + } + + static point3Dto2D(point2D) { + return new Vector2(point2D.x, point2D.z); + } + + static barycentricFromCartesian(triangle, point) { + //Vector ab + let ab = triangle[1].clone().sub(triangle[0]); + let ac = triangle[2].clone().sub(triangle[0]); + let ap = point.clone().sub(triangle[0]); + + let dotAB = ab.dot(ab); + let dotAC = ac.dot(ac); + let dotABAC = ac.dot(ab); + let dotAPAB = ap.dot(ab); + let dotAPAC = ap.dot(ac); + + //Area of triangle ABC + let areaABAC = (dotAB * dotAC) - (dotABAC * dotABAC); + let v = ((dotAC * dotAPAB) - (dotABAC * dotAPAC)) / areaABAC; + let w = ((dotAB * dotAPAC) - (dotABAC * dotAPAB)) / areaABAC; + let u = 1.0 - v - w; + return new Vector3(u, v, w); + } + + static cartesianFromBarycenter(triangle, uvw) { + let a = triangle[0].clone(); + let b = triangle[1].clone(); + let c = triangle[2].clone(); + let cartesian = a.multiplyScalar(uvw.x).add(b.multiplyScalar(uvw.y).add(c.multiplyScalar(uvw.z))); + return cartesian; + } +} + + +export class Region { + constructor(points) { + this.points = points || []; + this.length = points.length; + } + + area() { + var area = 0, + i, + j, + point1, + point2; + + for (i = 0, j = this.length - 1; i < this.length; j = i, i += 1) { + point1 = this.points[i]; + point2 = this.points[j]; + area += point1.x * point2.y; + area -= point1.y * point2.x; + } + area *= 0.5; + + return area; + }; + + centroid() { + var x = 0, + y = 0, + i, + j, + f, + point1, + point2; + + for (i = 0, j = this.length - 1; i < this.length; j = i, i += 1) { + point1 = this.points[i]; + point2 = this.points[j]; + f = point1.x * point2.y - point2.x * point1.y; + x += (point1.x + point2.x) * f; + y += (point1.y + point2.y) * f; + } + + f = this.area() * 6; + + return new Vector2(x / f, y / f); + }; +} \ No newline at end of file diff --git a/src/blueprint/scripts/core/version.ts b/src/blueprint/scripts/core/version.ts new file mode 100644 index 0000000..5f2c807 --- /dev/null +++ b/src/blueprint/scripts/core/version.ts @@ -0,0 +1,28 @@ +export class Version { + static isVersionHigherThan(version, checkVersion) { + if (version != undefined) { + checkVersion = checkVersion.replace(/[^\d.-]/g, '').split('.'); + var givenVersion = version.replace(/[^\d.-]/g, '').split('.'); + var flag = true; + if (checkVersion.length != givenVersion.length) { + return false; + } + for (var i = 0; i < checkVersion.length; i++) { + var a = parseInt(checkVersion[i]); + var b = parseInt(givenVersion[i]); + flag && (a >= b); + } + return flag; + + } + return false; + } + + static getInformalVersion() { + return '2.0.1a'; + } + + static getTechnicalVersion() { + return '2.0.1a'; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/helpers/ConfigurationHelper.ts b/src/blueprint/scripts/helpers/ConfigurationHelper.ts new file mode 100644 index 0000000..76256b3 --- /dev/null +++ b/src/blueprint/scripts/helpers/ConfigurationHelper.ts @@ -0,0 +1,90 @@ +import { Configuration, gridSpacing, snapTolerance, boundsY, boundsX, dragOnlyY, dragOnlyX, directionalDrag, snapToGrid } from '../core/configuration'; + +export class ConfigurationHelper { + __snapToGrid: boolean; + __directionalDrag: boolean; + __dragOnlyX: boolean; + __dragOnlyY: boolean; + __boundsX: number; + __boundsY: number; + __snapTolerance: number; + __gridSpacing: number; + constructor() { + this.__snapToGrid = Configuration.getBooleanValue(snapToGrid); + this.__directionalDrag = Configuration.getBooleanValue(directionalDrag); + this.__dragOnlyX = Configuration.getBooleanValue(dragOnlyX); + this.__dragOnlyY = Configuration.getBooleanValue(dragOnlyY); + this.__boundsX = Configuration.getNumericValue(boundsX); + this.__boundsY = Configuration.getNumericValue(boundsY); + this.__snapTolerance = Configuration.getNumericValue(snapTolerance); + this.__gridSpacing = Configuration.getNumericValue(gridSpacing); + } + + get snapToGrid() { + return this.__snapToGrid; + } + set snapToGrid(flag) { + this.__snapToGrid = flag; + Configuration.setValue(snapToGrid, flag); + } + + get directionalDrag() { + return this.__directionalDrag; + } + set directionalDrag(flag) { + this.__directionalDrag = flag; + Configuration.setValue(directionalDrag, flag); + } + + get dragOnlyX() { + return this.__dragOnlyX; + } + set dragOnlyX(flag) { + this.__dragOnlyX = flag; + Configuration.setValue(dragOnlyX, flag); + } + + get dragOnlyY() { + return this.__dragOnlyY; + } + set dragOnlyY(flag) { + this.__dragOnlyY = flag; + Configuration.setValue(dragOnlyY, flag); + } + + get boundsX() { + return this.__boundsX; + } + set boundsX(value) { + this.__boundsX = value; + Configuration.setValue(boundsX, value); + } + + get boundsY() { + return this.__boundsY; + } + + set boundsY(value) { + this.__boundsY = value; + Configuration.setValue(boundsY, value); + } + + + get snapTolerance() { + return this.__snapTolerance; + } + + set snapTolerance(value) { + this.__snapTolerance = value; + Configuration.setValue(snapTolerance, value); + } + + get gridSpacing() { + return this.__gridSpacing; + } + + set gridSpacing(value) { + this.__gridSpacing = value; + Configuration.setValue(gridSpacing, value); + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/helpers/DeviceInfo.ts b/src/blueprint/scripts/helpers/DeviceInfo.ts new file mode 100644 index 0000000..6595e29 --- /dev/null +++ b/src/blueprint/scripts/helpers/DeviceInfo.ts @@ -0,0 +1,16 @@ +export class DeviceInfo { + constructor() { + + } + + static isTouchDevice() { + try { + document.createEvent('TouchEvent'); + return true; + } catch (e) { + return false; + } + } +} + +export const IS_TOUCH_DEVICE = DeviceInfo.isTouchDevice(); \ No newline at end of file diff --git a/src/blueprint/scripts/helpers/FloorplannerHelper.ts b/src/blueprint/scripts/helpers/FloorplannerHelper.ts new file mode 100644 index 0000000..b18791e --- /dev/null +++ b/src/blueprint/scripts/helpers/FloorplannerHelper.ts @@ -0,0 +1,141 @@ +import { Dimensioning } from "../core/dimensioning"; +import { EVENT_CORNER_2D_CLICKED, EVENT_NOTHING_2D_SELECTED, EVENT_WALL_2D_CLICKED, EVENT_ROOM_2D_CLICKED } from "../core/EventSystem"; + +export class FloorPlannerHelper { + __floorplan; + __floorplanner; + + __wallThickness; + __cornerElevation; + __roomName: string; + + /** + * Store a reference to the model entities + */ + __selectedWall; + __selectedCorner; + __selectedRoom; + + /** + * Store a reference to the viewer3d visual entities + */ + __selectedWallEntity = null; + __selectedCornerEntity = null; + __selectedRoomEntity = null; + + __nothingSelectedEvent; + __cornerSelectedEvent; + __wallSelectedEvent; + __roomSelectedEvent; + + constructor(floorplan, floorplanner) { + this.__floorplan = floorplan; + this.__floorplanner = floorplanner; + + this.__wallThickness = Dimensioning.cmToMeasureRaw(20); + this.__cornerElevation = Dimensioning.cmToMeasureRaw(250); + this.__roomName = 'A New Room'; + + /** + * Store a reference to the model entities + */ + this.__selectedWall = null; + this.__selectedCorner = null; + this.__selectedRoom = null; + + /** + * Store a reference to the viewer3d visual entities + */ + this.__selectedWallEntity = null; + this.__selectedCornerEntity = null; + this.__selectedRoomEntity = null; + + this.__nothingSelectedEvent = this.__resetSelections.bind(this); + this.__cornerSelectedEvent = this.__cornerSelected.bind(this); + this.__wallSelectedEvent = this.__wallSelected.bind(this); + this.__roomSelectedEvent = this.__roomSelected.bind(this); + + this.__floorplanner.addFloorplanListener(EVENT_NOTHING_2D_SELECTED, this.__nothingSelectedEvent); + this.__floorplanner.addFloorplanListener(EVENT_CORNER_2D_CLICKED, this.__cornerSelectedEvent); + this.__floorplanner.addFloorplanListener(EVENT_WALL_2D_CLICKED, this.__wallSelectedEvent); + this.__floorplanner.addFloorplanListener(EVENT_ROOM_2D_CLICKED, this.__roomSelectedEvent); + } + + __resetSelections() { + this.__selectedCorner = null; + this.__selectedWall = null; + this.__selectedRoom = null; + this.__selectedCornerEntity = null; + this.__selectedWallEntity = null; + this.__selectedRoomEntity = null; + } + + __cornerSelected(evt) { + this.__resetSelections(); + this.__selectedCorner = evt.item; + this.__selectedCornerEntity = evt.entity; + this.__cornerElevation = Dimensioning.cmToMeasureRaw(this.__selectedCorner.elevation); + } + + __wallSelected(evt) { + this.__resetSelections(); + this.__selectedWall = evt.item; + this.__selectedWallEntity = evt.entity; + this.__wallThickness = Dimensioning.cmToMeasureRaw(evt.item.thickness); + } + + __roomSelected(evt) { + this.__resetSelections(); + this.__selectedRoom = evt.item; + this.__selectedRoomEntity = evt.entity; + this.__roomName = evt.item.name; + } + + __nothingSelected() { + this.__resetSelections(); + } + + deleteCurrentItem() { + if (this.__selectedWall) { + this.__selectedWall.remove(); + this.__resetSelections(); + } + if (this.__selectedCorner) { + this.__selectedCorner.remove(); + this.__resetSelections(); + } + } + + set wallThickness(value) { + if (this.__selectedWall) { + let cms = Dimensioning.cmFromMeasureRaw(value); + this.__selectedWall.thickness = cms; + this.__wallThickness = value; + } + } + get wallThickness() { + return Dimensioning.cmToMeasureRaw(this.__wallThickness); + } + + set cornerElevation(value) { + if (this.__selectedCorner) { + let cms = Dimensioning.cmFromMeasureRaw(value); + this.__selectedCorner.elevation = cms; + this.__cornerElevation = value; + } + } + get cornerElevation() { + return Dimensioning.cmToMeasureRaw(this.__cornerElevation); + } + + set roomName(value) { + if (this.__selectedRoom) { + this.__selectedRoom.name = value; + this.__roomName = value; + } + } + get roomName() { + return this.__roomName; + } + +} \ No newline at end of file diff --git a/src/blueprint/scripts/helpers/RoomplannerHelper.ts b/src/blueprint/scripts/helpers/RoomplannerHelper.ts new file mode 100644 index 0000000..6132228 --- /dev/null +++ b/src/blueprint/scripts/helpers/RoomplannerHelper.ts @@ -0,0 +1,221 @@ +import { TEXTURE_PROPERTY_COLOR } from "../core/constants"; +import { Dimensioning } from "../core/dimensioning"; +import { EVENT_CORNER_2D_CLICKED, EVENT_NOTHING_2D_SELECTED, EVENT_WALL_2D_CLICKED, EVENT_ROOM_2D_CLICKED, EVENT_NO_ITEM_SELECTED, EVENT_ITEM_SELECTED, EVENT_WALL_CLICKED, EVENT_ROOM_CLICKED } from "../core/EventSystem"; +import { InWallFloorItem } from "../items/in_wall_floor_item"; + +export class RoomPlannerHelper { + __model; + __floorplan; + __roomplanner; + + __wallThickness; + __cornerElevation; + __roomName; + + __selectedEdge = null; + __selectedEdgeNormal = null; + __selectedEdgePoint = null; + + __selectedItem = null; + __selectedRoom = null; + __wallTexturePack = null; + __roomTexturePack = null; + __roomWallsTexturePack = null; + + __nothingSelectedEvent; + __itemSelectedEvent; + __wallSelectedEvent; + __roomSelectedEvent; + + __selectedCorner; + + constructor(model, floorplan, roomplanner) { + this.__model = model; + this.__floorplan = floorplan; + this.__roomplanner = roomplanner; + + this.__wallThickness = Dimensioning.cmToMeasureRaw(20); + this.__cornerElevation = Dimensioning.cmToMeasureRaw(250); + this.__roomName = 'A New Room'; + + this.__selectedEdge = null; + this.__selectedEdgeNormal = null; + this.__selectedEdgePoint = null; + + this.__selectedItem = null; + this.__selectedRoom = null; + this.__wallTexturePack = null; + this.__roomTexturePack = null; + this.__roomWallsTexturePack = null; + + this.__nothingSelectedEvent = this.__nothingSelected.bind(this); + this.__itemSelectedEvent = this.__itemSelected.bind(this); + this.__wallSelectedEvent = this.__wallSelected.bind(this); + this.__roomSelectedEvent = this.__roomSelected.bind(this); + + this.__roomplanner.addRoomplanListener(EVENT_NO_ITEM_SELECTED, this.__nothingSelectedEvent); + this.__roomplanner.addRoomplanListener(EVENT_ITEM_SELECTED, this.__itemSelectedEvent); + this.__roomplanner.addRoomplanListener(EVENT_WALL_CLICKED, this.__wallSelectedEvent); + this.__roomplanner.addRoomplanListener(EVENT_ROOM_CLICKED, this.__roomSelectedEvent); + } + + __itemSelected(evt) { + this.__selectedItem = evt.item; + } + + __wallSelected(evt) { + this.__selectedEdge = evt.item; + this.__selectedEdgeNormal = evt.normal; + this.__selectedEdgePoint = evt.point; + this.__wallThickness = Dimensioning.cmToMeasureRaw(evt.item.thickness); + } + + __roomSelected(evt) { + this.__selectedRoom = evt.item; + this.__roomName = evt.item.name; + } + + __nothingSelected() { + // this.__selectedEdge = null; + // this.__selectedRoom = null; + // this.__selectedItem = null; + } + + addParametricDoorToCurrentWall(doorType) { + if (!this.__selectedEdge) { + return; + } + + let itemMetaData = { + itemName: "Parametric Door", + isParametric: true, + baseParametricType: "DOOR", + subParametricData: { + type: doorType, + frameColor: "#E7E7E7", + doorColor: "#E7E7E7", + doorHandleColor: '#F0F0F0', + glassColor: '#87CEEB', + frameWidth: 100, + frameHeight: 200, + frameSize: 5, + frameThickness: 20, + doorRatio: 0.5, + openDirection: "RIGHT", + handleType: "HANDLE_01" + }, + itemType: 7, + position: [ + 0, + 0, + 0 + ], + rotation: [ + 0, + 0, + 0 + ], + scale: [ + 1, + 1, + 1 + ], + size: [ + 100, + 200, + 20 + ], + fixed: false, + resizable: false, + wall: this.__selectedEdge.id, + }; + + let item = new InWallFloorItem(itemMetaData, this.__model); + this.__model.addItem(item); + // console.log(this.__selectedEdgePoint, this.__selectedEdgeNormal); + item.snapToWall(this.__selectedEdgePoint, this.__selectedEdge.wall, this.__selectedEdge); + } + + set wallThickness(value) { + if (this.__selectedEdge) { + let cms = Dimensioning.cmFromMeasureRaw(value); + this.__selectedEdge.thickness = cms; + this.__wallThickness = value; + } + } + get wallThickness() { + return Dimensioning.cmToMeasureRaw(this.__wallThickness); + } + + set cornerElevation(value) { + if (this.__selectedCorner) { + let cms = Dimensioning.cmFromMeasureRaw(value); + this.__selectedCorner.elevation = cms; + this.__cornerElevation = value; + } + } + get cornerElevation() { + return Dimensioning.cmToMeasureRaw(this.__cornerElevation); + } + + set roomName(value) { + if (this.__selectedRoom) { + this.__selectedRoom.name = value; + this.__roomName = value; + } + } + get roomName() { + return this.__roomName; + } + + get wallTexturePack() { + return this.__wallTexturePack; + } + + set wallTexturePack(tpack) { + this.__wallTexturePack = tpack; + if (this.__selectedEdge) { + this.__selectedEdge.setTextureMaps(tpack); + } + } + + get roomTexturePack() { + return this.__roomTexturePack; + } + + set roomTexturePack(tpack) { + this.__roomTexturePack = tpack; + if (this.__selectedRoom) { + this.__selectedRoom.setTextureMaps(tpack); + } + } + + get roomWallsTexturePack() { + return this.__roomWallsTexturePack; + } + + set roomWallsTexturePack(tpack) { + this.__roomTexturePack = tpack; + if (this.__selectedRoom) { + this.__selectedRoom.setRoomWallsTextureMaps(tpack); + } + } + + setWallColor(color) { + if (this.__selectedEdge) { + this.__selectedEdge.setTextureMapAttribute(TEXTURE_PROPERTY_COLOR, color); + } + } + + setRoomWallsTextureColor(color) { + if (this.__selectedRoom) { + this.__selectedRoom.setRoomWallsTextureMapsAttribute(TEXTURE_PROPERTY_COLOR, color); + } + } + + setRoomFloorColor(color) { + if (this.__selectedRoom) { + this.__selectedRoom.setTextureMapAttribute(TEXTURE_PROPERTY_COLOR, color); + } + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/items/factory.js b/src/blueprint/scripts/items/factory.js new file mode 100644 index 0000000..2b2b34c --- /dev/null +++ b/src/blueprint/scripts/items/factory.js @@ -0,0 +1,20 @@ +import {Item} from './item.js'; +import {FloorItem} from './floor_item.js'; +import {WallItem} from './wall_item.js'; +import {InWallItem} from './in_wall_item.js'; +import {InWallFloorItem} from './in_wall_floor_item.js'; +import {OnFloorItem} from './on_floor_item.js'; +import {WallFloorItem} from './wall_floor_item.js'; +import {RoofItem} from './roof_item.js'; + +export const item_types = {1: FloorItem, 2: WallItem, 3: InWallItem, 7: InWallFloorItem, 8: OnFloorItem, 9: WallFloorItem, 0: Item, 4: RoofItem}; + +/** Factory class to create items. */ +export class Factory +{ + /** Gets the class for the specified item. */ + static getClass(itemType) + { + return item_types[itemType]; + } +} diff --git a/src/blueprint/scripts/items/floor_item.js b/src/blueprint/scripts/items/floor_item.js new file mode 100644 index 0000000..203890a --- /dev/null +++ b/src/blueprint/scripts/items/floor_item.js @@ -0,0 +1,32 @@ +import { Item, UP_VECTOR } from './item.js'; +import { Vector2, Vector3 } from 'three'; +import { Utils } from '../core/utils.js'; + +/** + * A Floor Item is an entity to be placed related to a floor. + */ +export class FloorItem extends Item { + constructor(model, metadata, id) { + super(model, metadata, id); + this._freePosition = false; + this.__customIntersectionPlanes = this.__model.floorplan.floorPlanesForIntersection; + } + + snapToPoint(point, normal, intersectingPlane, toWall, toFloor, toRoof) { + let normal2d = new Vector2(normal.x, normal.z); + let angle = Utils.angle(UP_VECTOR, normal2d); + this.rotation = new Vector3(0, angle, 0); + point.y = this.halfSize.y + 5; + this.position = point; + } + + // /** */ + // placeInRoom() { + // if (!this.position_set) { + // var center = this.__model.floorplan.getCenter(); + // this.position.x = center.x; + // this.position.z = center.z; + // this.position.y = 0.5 * (this.geometry.boundingBox.max.y - this.geometry.boundingBox.min.y); + // } + // } +} \ No newline at end of file diff --git a/src/blueprint/scripts/items/in_wall_floor_item.js b/src/blueprint/scripts/items/in_wall_floor_item.js new file mode 100644 index 0000000..d5a9fc5 --- /dev/null +++ b/src/blueprint/scripts/items/in_wall_floor_item.js @@ -0,0 +1,39 @@ +import { InWallItem } from './in_wall_item.js'; +import { Vector2, Vector3, Matrix4 } from 'three'; +import { UP_VECTOR } from './item.js'; +import { Utils } from '../core/utils.js'; + +/** */ +export class InWallFloorItem extends InWallItem { + constructor(model, metadata, id) { + super(model, metadata, id); + this.__customIntersectionPlanes = this.__model.floorplan.wallPlanesForIntersection; + } + + snapToPoint(point, normal, intersectingPlane, toWall, toFloor, toRoof) { + this.snapToWall(point, intersectingPlane.wall, intersectingPlane.edge); + } + + snapToWall(point, wall, wallEdge) { + point = this.__fitToWallBounds(point, wallEdge); + let normal = wallEdge.normal; + let normal2d = new Vector2(normal.x, normal.z); + let angle = Utils.angle(UP_VECTOR, normal2d); + this.rotation = new Vector3(0, angle, 0); + point.y = this.halfSize.y + 5; + this.position = point; + this.__currentWallSnapPoint = point.clone(); + this.__currentWallNormal = normal.clone(); + this.__addToAWall(wall, wallEdge); + } + + __parametricGeometryUpdate(evt, updateForWall = true) { + super.__parametricGeometryUpdate(evt, false); + if (this.__currentWall && updateForWall) { + let currentPosition = this.position.clone(); + currentPosition.y = this.halfSize.y + 5; + this.position = currentPosition; + this.__currentWall.addItem(this); + } + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/items/in_wall_item.js b/src/blueprint/scripts/items/in_wall_item.js new file mode 100644 index 0000000..4801293 --- /dev/null +++ b/src/blueprint/scripts/items/in_wall_item.js @@ -0,0 +1,26 @@ +import { WallItem } from './wall_item.js'; +import { Vector2, Vector3 } from 'three'; +import { Utils } from '../core/utils.js'; +import { UP_VECTOR } from './item.js'; +/** */ +export class InWallItem extends WallItem { + constructor(model, metadata, id) { + super(model, metadata, id); + this.__customIntersectionPlanes = this.__model.floorplan.wallPlanesForIntersection; + } + + snapToPoint(point, normal, intersectingPlane, toWall, toFloor, toRoof) { + this.snapToWall(point, intersectingPlane.wall, intersectingPlane.edge); + } + + snapToWall(point, wall, wallEdge) { + point = this.__fitToWallBounds(point, wallEdge); + let normal = wallEdge.normal; + let normal2d = new Vector2(normal.x, normal.z); + let angle = Utils.angle(UP_VECTOR, normal2d); + this.rotation = new Vector3(0, angle, 0); + this.position = point; + this.__currentWallSnapPoint = point.clone(); + this.__addToAWall(wall, wallEdge); + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/items/item.js b/src/blueprint/scripts/items/item.js new file mode 100644 index 0000000..7b997b4 --- /dev/null +++ b/src/blueprint/scripts/items/item.js @@ -0,0 +1,400 @@ +import { EventDispatcher, Vector3, Vector2 } from 'three'; +import { EVENT_UPDATED, EVENT_PARAMETRIC_GEOMETRY_UPATED, EVENT_MOVED, EVENT_DELETED } from '../core/events'; +import { Utils } from '../core/utils'; +import { BASE_PARAMETRIC_TYPES, ParametricFactory } from '../parametrics/ParametricFactory'; + +export const UP_VECTOR = new Vector3(0, 1, 0); +/** + * An Item is an abstract entity for all things placed in the scene, e.g. at + * walls or on the floor. + */ +export class Item extends EventDispatcher { + /** + * Constructs an item. This is a pure data representation of a room item. + * Because floorplanner is pure MVC or MVP it is the responsibility of the respective viewer + * to create the physical entity based on the item data + * + * @param model + * TODO + * @param metadata + * TODO + * @param id + * TODO + */ + constructor(metadata, model, id) { + super(); + + /** + * @property {String} id The id of this corner. Autogenerated the first time + * @type {String} + **/ + this.__id = id || Utils.guide(); + this.__metadata = metadata; + this.__model = model; + this.__position2d = new Vector2(); + this.__position = new Vector3(); + this.__rotation = new Vector3(); + this.__scale = new Vector3(1, 1, 1); + + this.__size = new Vector3(1, 1, 1); + this.__halfSize = new Vector3(1, 1, 1); + + this.__customIntersectionPlanes = []; + + /** */ + this.__hover = false; //This is part of application logic only + /** */ + this.__selected = false; //This is part of application logic only + this.__freePosition = true; //This is part of application logic only + this.__boundToFloor = false; //This is part of application logic only + this.__allowRotate = true; //This is part of application logic only + + this.__fixed = false; //This is part of application logic and also Metadata + this.__resizable = false; //This is part of application logic and also Metadata + + this.__frontVisible = false; + this.__backVisible = false; + this.__visible = true; + this.__offlineUpdate = false; + + this.__isParametric = false; + this.__baseParametricType = BASE_PARAMETRIC_TYPES.DOOR; + this.__subParametricType = 1; + this.__parametricClass = null; + + this.__currentWall = null; + this.__currentFloor = null; + this.__currentWallNormal = null; + this.__currentWallSnapPoint = null; + this.__isWallDependent = false; + + this.__followWallEvent = this.__followWall.bind(this); + this.__edgeDeletedEvent = this.__edgeDeleted.bind(this); + this.__parametricGeometryUpdateEvent = this.__parametricGeometryUpdate.bind(this); + + this.castShadow = false; + this.receiveShadow = false; + this.__initializeMetaData(); + } + + __initializeMetaData() { + this.__fixed = (this.__metadata.fixed) ? this.__metadata.fixed : true; + this.__resizable = (this.__metadata.resizable) ? this.__metadata.resizable : true; + if (this.__metadata.position.length) { + this.__position = new Vector3().fromArray(this.__metadata.position).clone(); + } + if (this.__metadata.rotation.length) { + this.__rotation = new Vector3().fromArray(this.__metadata.rotation).clone(); + } + if (this.__metadata.scale.length) { + this.__scale = new Vector3().fromArray(this.__metadata.scale).clone(); + } + if (this.__metadata.size.length) { + this.__size = new Vector3().fromArray(this.__metadata.size).clone(); + this.__halfSize = this.__size.clone().multiplyScalar(0.5); + } + + if (this.__metadata.isParametric) { + this.__isParametric = this.__metadata.isParametric; + switch (this.__metadata.baseParametricType) { + case BASE_PARAMETRIC_TYPES.DOOR.description: + this.__baseParametricType = BASE_PARAMETRIC_TYPES.DOOR; + break; + case BASE_PARAMETRIC_TYPES.WINDOW.description: + this.__baseParametricType = BASE_PARAMETRIC_TYPES.WINDOW; + break; + case BASE_PARAMETRIC_TYPES.CABINET.description: + this.__baseParametricType = BASE_PARAMETRIC_TYPES.CABINET; + break; + case BASE_PARAMETRIC_TYPES.SHELVES.description: + this.__baseParametricType = BASE_PARAMETRIC_TYPES.SHELVES; + break; + } + this.__subParametricData = this.__metadata.subParametricData; + let parametricClass = ParametricFactory.getParametricClass(this.__baseParametricType.description); + this.__parametricClass = new(parametricClass.getClass(this.__subParametricData.type))(this.__subParametricData); + this.__parametricClass.addEventListener(EVENT_PARAMETRIC_GEOMETRY_UPATED, this.__parametricGeometryUpdateEvent); + + } else { + this.__isParametric = false; + } + + if (this.__metadata.wall) { + let walls = this.__model.floorplan.walls; + for (let i = 0; i < walls.length; i++) { + let wall = walls[i]; + if (wall.id === this.__metadata.wall) { + let wallEdge = (this.__metadata.wallSide === 'front') ? wall.frontEdge : wall.backEdge; + let wallSurfacePoint = this.__metadata.wallSurfacePoint; + this.__currentWallSnapPoint = new Vector3(wallSurfacePoint[0], wallSurfacePoint[1], wallSurfacePoint[2]); + this.__addToAWall(wall, wallEdge); + break; + } + } + } + } + + __parametricGeometryUpdate(evt, updateForWall = true) { + let box = this.__parametricClass.geometry.boundingBox; + this.__size = box.getSize(new Vector3()); + this.__halfSize = this.__size.clone().multiplyScalar(0.5); + if (this.__currentWall && updateForWall) { + let point = Utils.cartesianFromBarycenter(this.__currentWallEdge.vertices, this.__barycentricLocation); + this.snapToWall(point, this.__currentWall, this.__currentWallEdge); + // this.position = this.__position; + // this.__currentWall.addItem(this); + } + } + + __edgeDeleted(evt) { + if (this.__currentWall) { + let wallEdge = (this.__metadata.wallSide === 'front') ? this.__currentWall.frontEdge : this.__currentWall.backEdge; + this.__currentWallEdge = null; + let point = Utils.cartesianFromBarycenter(wallEdge.vertices, this.__barycentricLocation); + this.snapToWall(point, this.__currentWall, wallEdge); + } + } + + __followWall(evt) { + if (this.__isWallDependent && this.__currentWall && !this.__offlineUpdate) { + let point = Utils.cartesianFromBarycenter(this.__currentWallEdge.vertices, this.__barycentricLocation); + this.snapToWall(point, this.__currentWall, this.__currentWallEdge); + } + } + + __addToAWall(toWall, toWallEdge) { + if (toWall === undefined || !toWall || toWall === 'undefined') { + return; + } + if (this.__currentWall && this.__currentWall !== toWall) { + this.__currentWall.removeEventListener(EVENT_MOVED, this.__followWallEvent); + this.__currentWallEdge.removeEventListener(EVENT_DELETED, this.__edgeDeletedEvent); + this.__currentWall.removeItem(this); + } + + let barycentricUVW = Utils.barycentricFromCartesian(toWallEdge.vertices, this.__currentWallSnapPoint); + this.__currentWall = toWall; + this.__currentWallEdge = toWallEdge; + this.__barycentricLocation = barycentricUVW.clone(); + + this.__metadata.wall = this.__currentWall.id; + this.__metadata.wallSide = (toWallEdge.front) ? 'front' : 'back'; + this.__metadata.wallSurfacePoint = [this.__currentWallSnapPoint.x, this.__currentWallSnapPoint.y, this.__currentWallSnapPoint.z]; + this.__offlineUpdate = true; //Really important as it will lead to a lot of recursion + this.__currentWall.addItem(this); //This causes wall to dispatch event_moved triggering followWall, which will trigger this method again + this.__offlineUpdate = false; //Really important as it will lead to a lot of recursion + if (!this.__currentWall.hasEventListener(EVENT_MOVED, this.__followWallEvent)) { + this.__currentWall.addEventListener(EVENT_MOVED, this.__followWallEvent); + this.__currentWallEdge.addEventListener(EVENT_DELETED, this.__edgeDeletedEvent); + } + } + + /** */ + __moveToPosition() {} + + __getMetaData() { + return { + id: this.id, + itemName: this.metadata.itemName, + itemType: this.metadata.itemType, + modelURL: this.metadata.modelUrl, + position: this.position.toArray(), + rotation: this.rotation.toArray(), + scale: this.scale.toArray(), + size: this.size.toArray(), + fixed: this.__fixed, + resizable: this.__resizable + }; + } + + __metaDataUpdate(propertyname) { + this.dispatchEvent({ type: EVENT_UPDATED, property: propertyname }); + } + + updateMetadataExplicit() { + this.__metadata = this.__getMetaData(); + } + + snapToPoint(point, normal, intersectingPlane, toWall, toFloor, toRoof) { + this.position = point; + } + + snapToWall(point, wall, wallEdge) {} + + newWallEdge() { + let wallEdge = (this.__metadata.wallSide === 'front') ? this.__currentWall.frontEdge : this.__currentWall.backEdge; + this.__currentWallEdge = null; + this.__currentWallEdge = wallEdge; + } + + dispose() { + if (this.isParametric && this.__parametricClass) { + this.__parametricClass.removeEventListener(EVENT_PARAMETRIC_GEOMETRY_UPATED, this.__parametricGeometryUpdateEvent); + } + if (this.__currentWall) { + this.__currentWall.removeEventListener(EVENT_MOVED, this.__followWallEvent); + + } + if (this.__currentWallEdge) { + this.__currentWallEdge.removeEventListener(EVENT_DELETED, this.__edgeDeletedEvent); + } + + } + + + get id() { + return this.__id; + } + + get metadata() { + if (this.isParametric) { + this.__metadata.subParametricData = this.__parametricClass.metadata; + } + return this.__metadata; + } + + set metadata(mdata) { + this.__metadata = mdata; + this.__applyMetaData(); + } + + get position2d() { + return this.__position2d; + } + + get position() { + return this.__position; + } + set position(p) { + this.__position2d.x = p.x; + this.__position2d.y = p.z; + this.__position.copy(p); + this.__metadata.position = this.__position.toArray(); + this.__moveToPosition(); + this.__metaDataUpdate('position'); + } + + get rotation() { + return this.__rotation; + } + + set rotation(r) { + let old = this.__rotation.clone(); + let current = r.clone(); + if (old.sub(current).length() < 1e-4) { + return; + } + this.__rotation.copy(r); + this.__metadata.rotation = this.__rotation.toArray(); + this.__metaDataUpdate('rotation'); + } + + get scale() { + return this.__scale; + } + + set scale(s) { + this.__scale.copy(s); + this.__metadata.scale = this.__scale.toArray(); + this.__metaDataUpdate('scale'); + } + /** + * This is a read-only property. This can be changed only internally with private and protected acces + */ + get size() { + return this.__size.clone(); + } + + get modelURL() { + return this.__metadata.modelURL; + } + + set modelURL(value) { + this.__metadata.modelURL = value; + this.__metaDataUpdate('modelURL'); + } + + get fixed() { + return this.__fixed; + } + + set fixed(flag) { + this.__fixed = flag; + this.__metaDataUpdate('fixed'); + } + + get frontVisible() { + return this.__frontVisible; + } + + set frontVisible(flag) { + this.__frontVisible = flag; + } + + get backVisible() { + return this.__backVisible; + } + + set backVisible(flag) { + this.__backVisible = flag; + } + + get visible() { + return this.__visible; + } + + set visible(flag) { + this.__visible = flag; + // this.frontVisible = false; + // this.backVisible = false; + this.__metaDataUpdate('visible'); + } + + get isParametric() { + return this.__isParametric; + } + + get baseParametricType() { + return this.__baseParametricType; + } + + get subParametricData() { + return this.__subParametricData; + } + + get parametricClass() { + return this.__parametricClass; + } + + get resizable() { + return this.__resizable; + } + + get itemName() { + return this.__metadata.itemName; + } + + get itemType() { + return this.__metadata.itemType; + } + + get halfSize() { + return this.__halfSize.clone(); + } + + get intersectionPlanes() { + return this.__customIntersectionPlanes; + } + + get isWallDependent() { + return this.__isWallDependent; + } + + get offlineUpdate() { + return this.__offlineUpdate; + } + + get wallSide() { + return this.__metadata.wallSide; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/items/on_floor_item.js b/src/blueprint/scripts/items/on_floor_item.js new file mode 100644 index 0000000..f1f0d78 --- /dev/null +++ b/src/blueprint/scripts/items/on_floor_item.js @@ -0,0 +1,11 @@ +import { FloorItem } from './floor_item.js'; +import { Item } from './item.js'; + +/** */ +export class OnFloorItem extends Item { + constructor(model, metadata, id) { + super(model, metadata, id); + this.receiveShadow = true; + this.__customIntersectionPlanes = this.__model.floorplan.floorPlanesForIntersection; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/items/roof_item.js b/src/blueprint/scripts/items/roof_item.js new file mode 100644 index 0000000..ebc264f --- /dev/null +++ b/src/blueprint/scripts/items/roof_item.js @@ -0,0 +1,16 @@ +import { Item } from './item.js'; +import { Matrix4, Triangle, Plane, Vector3 } from 'three'; +/** + * A Floor Item is an entity to be placed related to a floor. + */ +export class RoofItem extends Item { + constructor(model, metadata, id) { + super(model, metadata, id); + this.__customIntersectionPlanes = this.__model.floorplan.roofPlanesForIntersection; + } + + snapToPoint(point, normal, intersectingPlane, toWall, toFloor, toRoof) { + point.y -= this.halfSize.y + 5; + this.position = point; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/items/wall_floor_item.js b/src/blueprint/scripts/items/wall_floor_item.js new file mode 100644 index 0000000..1e42af7 --- /dev/null +++ b/src/blueprint/scripts/items/wall_floor_item.js @@ -0,0 +1,43 @@ +import { WallItem } from './wall_item.js'; +import { Vector2, Vector3 } from 'three'; +import { Utils } from '../core/utils.js'; +import { UP_VECTOR } from './item.js'; +/** */ +export class WallFloorItem extends WallItem { + constructor(model, metadata, id) { + super(model, metadata, id); + this.__boundToFloor = true; + this.__customIntersectionPlanes = this.__model.floorplan.wallPlanesForIntersection; + } + + snapToPoint(point, normal, intersectingPlane, toWall, toFloor, toRoof) { + this.snapToWall(point, intersectingPlane.wall, intersectingPlane.edge); + } + + snapToWall(point, wall, wallEdge) { + point = this.__fitToWallBounds(point, wallEdge); + let normal = wallEdge.normal; + let normal2d = new Vector2(normal.x, normal.z); + let angle = Utils.angle(UP_VECTOR, normal2d); + this.__currentWallNormal = normal.clone(); + this.__currentWallSnapPoint = point.clone(); + + point = point.clone().add(normal.clone().multiplyScalar(this.halfSize.z + (wall.thickness * 0.25))); + point.y = this.halfSize.y + 5; + + this.rotation = new Vector3(0, angle, 0); + this.position = point; + this.__addToAWall(wall, wallEdge); + } + + __parametricGeometryUpdate(evt, updateForWall = true) { + super.__parametricGeometryUpdate(evt, false); + if (this.__currentWall && updateForWall) { + let point = this.__currentWallSnapPoint.clone(); + point = point.clone().add(this.__currentWallNormal.clone().multiplyScalar(this.halfSize.z + (this.__currentWall.thickness * 0.25))); + point.y = this.halfSize.y + 5; + this.position = point; + this.__currentWall.addItem(this); + } + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/items/wall_item.js b/src/blueprint/scripts/items/wall_item.js new file mode 100644 index 0000000..7f769bf --- /dev/null +++ b/src/blueprint/scripts/items/wall_item.js @@ -0,0 +1,68 @@ +import { Vector2, Vector3 } from 'three'; +import { Utils } from '../core/utils.js'; +import { Item, UP_VECTOR } from './item.js'; + +/** + * A Wall Item is an entity to be placed related to a wall. + */ +export class WallItem extends Item { + constructor(model, metadata, id) { + super(model, metadata, id); + this.__isWallDependent = true; + this.__boundToFloor = false; + this.__allowRotate = false; + this.__freePosition = false; + this.__customIntersectionPlanes = this.__model.floorplan.wallPlanesForIntersection; + } + + __fitToWallBounds(point, wallEdge) { + let point2d = new Vector2(point.x, point.z); + let wallEdgeVector = wallEdge.interiorEnd().clone().sub(wallEdge.interiorStart()); + let sizeX = this.__halfSize.x + 5; + let sizeVector = wallEdgeVector.clone().normalize().multiplyScalar(sizeX); + let positionMinusSize = point2d.clone().sub(sizeVector); + let positionPlusSize = point2d.clone().add(sizeVector); + + let startToPlusSizeVector = positionPlusSize.sub(wallEdge.interiorStart()); + let endToMinusSizeVector = positionMinusSize.sub(wallEdge.interiorEnd()); + if (startToPlusSizeVector.length() > wallEdgeVector.length()) { + let p = wallEdge.interiorEnd().clone().sub(sizeVector); + return new Vector3(p.x, point.y, p.y); + } + if (endToMinusSizeVector.length() > wallEdgeVector.length()) { + let p = wallEdge.interiorStart().clone().add(sizeVector); + return new Vector3(p.x, point.y, p.y); + } + return point; + } + + snapToPoint(point, normal, intersectingPlane, toWall, toFloor, toRoof) { + this.snapToWall(point, intersectingPlane.wall, intersectingPlane.edge); + } + + snapToWall(point, wall, wallEdge) { + super.snapToWall(point, wall, wallEdge); + point = this.__fitToWallBounds(point, wallEdge); + let normal = wallEdge.normal; + let normal2d = new Vector2(normal.x, normal.z); + let angle = Utils.angle(UP_VECTOR, normal2d); + this.__currentWallNormal = normal.clone(); + this.__currentWallSnapPoint = point.clone(); + + point = point.clone().add(normal.clone().multiplyScalar(this.halfSize.z + (wall.thickness * 0.25))); + + this.position = point; + this.rotation = new Vector3(0, angle, 0); + this.__addToAWall(wall, wallEdge); + } + + __parametricGeometryUpdate(evt, updateForWall = true) { + super.__parametricGeometryUpdate(evt, false); + if (this.__currentWall && updateForWall) { + let point = this.__currentWallSnapPoint.clone(); + point = point.clone().add(this.__currentWallNormal.clone().multiplyScalar(this.halfSize.z + (this.__currentWall.thickness * 0.25))); + this.position = point; + this.__currentWall.addItem(this); + } + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/materials/FloorMaterial3D.js b/src/blueprint/scripts/materials/FloorMaterial3D.js new file mode 100644 index 0000000..177d9c0 --- /dev/null +++ b/src/blueprint/scripts/materials/FloorMaterial3D.js @@ -0,0 +1,7 @@ +import { Material3D } from "./Material3D"; + +export class FloorMaterial3D extends Material3D { + constructor(parameters, textureMapPack, scene) { + super(parameters, textureMapPack, scene, false); + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/materials/Material3D.js b/src/blueprint/scripts/materials/Material3D.js new file mode 100644 index 0000000..4e4241e --- /dev/null +++ b/src/blueprint/scripts/materials/Material3D.js @@ -0,0 +1,241 @@ +import { MeshStandardMaterial, TextureLoader, RepeatWrapping, Color, Vector2, sRGBEncoding, CubeReflectionMapping } from 'three'; +import { TEXTURE_DEFAULT_REPEAT } from '../core/constants'; + +export class Material3D extends MeshStandardMaterial { + constructor(parameters, textureMapPack, scene, reflectsScene = false) { + super(parameters); + // console.log('BLENDING :: ',this.blending); + this.__scene = scene; + this.__reflectsScene = reflectsScene; + this.__mirrorCamera = null; + + // this.roughness = (!textureMapPack.reflective) ? 0.5 : textureMapPack.reflective; + this.__repeat = (!textureMapPack.repeat) ? TEXTURE_DEFAULT_REPEAT : textureMapPack.repeat; + this.__repeatX = null; + this.__repeatY = null; + + if (this.__reflectsScene) { + this.__mirrorCamera = this.__scene.environmentCamera; + this.envMap = this.__mirrorCamera.renderTarget.texture; + this.envMap.mapping = CubeReflectionMapping; + } + this.__textureMapPack = textureMapPack; + this.__uRatio = 1.0; + this.__vRatio = 1.0; + this.__dimensions = new Vector2(); + + this.__repeatPerCentimeter = 1.0 / this.__repeat; //Repeat for every 'x' centimeters + this.__repeatPerCentimeterX = null; + this.__repeatPerCentimeterY = null; + + this.__colorTexture = null; + this.__normalTexture = null; + this.__roughnessTexture = null; + this.__ambientTexture = null; + this.__bumpTexture = null; + this.__metalTexture = null; + // this.__applyNewTextures(); + // this.normalScale.set(-10, 10); + this.textureMapPack = textureMapPack; + } + + __updateColorMap(texture) { + if (this.__colorTexture) { + this.__colorTexture.encoding = sRGBEncoding; + this.__colorTexture.wrapS = this.__colorTexture.wrapT = RepeatWrapping; + this.__colorTexture.repeat.set(this.__uRatio, this.__vRatio); + this.__colorTexture.needsUpdate = true; + this.map = this.__colorTexture; + } + this.__updateTextures(); + } + + __updateNormalMap(texture) { + if (this.__normalTexture) { + this.__normalTexture.encoding = sRGBEncoding; + this.__normalTexture.wrapS = this.__normalTexture.wrapT = RepeatWrapping; + this.__normalTexture.repeat.set(this.__uRatio, this.__vRatio); + this.__normalTexture.needsUpdate = true; + this.normalMap = this.__normalTexture; + } + this.__updateTextures(); + } + + __updateRoughnessMap(texture) { + if (this.__roughnessTexture) { + this.__roughnessTexture.encoding = sRGBEncoding; + this.__roughnessTexture.wrapS = this.__roughnessTexture.wrapT = RepeatWrapping; + this.__roughnessTexture.repeat.set(this.__uRatio, this.__vRatio); + this.__roughnessTexture.needsUpdate = true; + this.roughnessMap = this.__roughnessTexture; + } + this.__updateTextures(); + } + + __updateAmbientMap(texture) { + if (this.__ambientTexture) { + this.__ambientTexture.encoding = sRGBEncoding; + this.__ambientTexture.wrapS = this.__ambientTexture.wrapT = RepeatWrapping; + this.__ambientTexture.repeat.set(this.__uRatio, this.__vRatio); + this.__ambientTexture.needsUpdate = true; + this.aoMap = this.__ambientTexture; + // this.aoMapIntensity = 1.0; + } + this.__updateTextures(); + } + + __updateMetallicMap(texture) { + if (this.__metalTexture) { + this.__metalTexture.encoding = sRGBEncoding; + this.__metalTexture.wrapS = this.__metalTexture.wrapT = RepeatWrapping; + this.__metalTexture.repeat.set(this.__uRatio, this.__vRatio); + this.__metalTexture.needsUpdate = true; + this.metalnessMap = this.__metalTexture; + } + this.__updateTextures(); + } + + __updateBumpMap(texture) { + if (this.__bumpTexture) { + this.__bumpTexture.encoding = sRGBEncoding; + this.__bumpTexture.wrapS = this.__bumpTexture.wrapT = RepeatWrapping; + this.__bumpTexture.repeat.set(this.__uRatio, this.__vRatio); + this.__bumpTexture.needsUpdate = true; + this.displacementMap = this.__bumpTexture; + this.displacementMap.needsUpdate = true; + } + this.__updateTextures(); + } + + __updateTextures() { + this.needsUpdate = true; + this.__scene.needsUpdate = true; + } + + __applyNewTextures() { + this.map = this.__colorTexture = null; + this.normalMap = this.__normalTexture = null; + this.roughnessMap = this.__roughnessTexture = null; + this.aoMap = this.__ambientTexture = null; + this.metalnessMap = this.__metalTexture = null; + this.displacementMap = this.__bumpTexture = null; + + + if (this.__textureMapPack.colormap) { + this.__colorTexture = new TextureLoader().load(this.__textureMapPack.colormap, this.__updateColorMap.bind(this)); + } + if (this.__textureMapPack.normalmap) { + this.__normalTexture = new TextureLoader().load(this.__textureMapPack.normalmap, this.__updateNormalMap.bind(this)); + } + if (this.__textureMapPack.roughnessmap) { + this.__roughnessTexture = new TextureLoader().load(this.__textureMapPack.roughnessmap, this.__updateRoughnessMap.bind(this)); + } + if (this.__textureMapPack.ambientmap) { + this.__ambientTexture = new TextureLoader().load(this.__textureMapPack.ambientmap, this.__updateAmbientMap.bind(this)); + } + if (this.__textureMapPack.metalmap) { + this.__metalTexture = new TextureLoader().load(this.__textureMapPack.metalmap, this.__updateMetallicMap.bind(this)); + } + // if (this.__textureMapPack.bumpmap) { + // console.log('APPLY DISPLACEMENT MAP ::: '); + // this.__bumpTexture = new TextureLoader().load(this.__textureMapPack.bumpmap, this.__updateTextures.bind(this)); + // this.displacementMap = this.__bumpTexture; + // this.displacementBias = -0.001; + // this.displacementScale = -100; + // } + } + + __scaleUV(uRatio, vRatio) { + this.__uRatio = uRatio; + this.__vRatio = vRatio; + + this.__updateColorMap(); + this.__updateNormalMap(); + this.__updateRoughnessMap(); + this.__updateMetallicMap(); + this.__updateAmbientMap(); + this.__updateBumpMap(); + + // this.__updateTextures(); + // this.needsUpdate = true; + // this.__scene.needsUpdate = true; + } + + /** + * + * @param {Number} x - Always implies the direction of the width + * @param {Number} y - Can be either length or height depending if wall or floor using this texture + */ + __updateDimensions(width, height) { + let ur = Math.max(width * this.__repeatPerCentimeter, 1.0); + let vr = Math.max(height * this.__repeatPerCentimeter, 1.0); + + this.__scaleUV(ur, vr); + } + + get envMapCamera() { + return this.__mirrorCamera; + } + + get textureMapPack() { + return this.__textureMapPack; + } + + set textureMapPack(textureMapPack) { + this.__textureMapPack = textureMapPack; + + textureMapPack.color = textureMapPack.color || '#FFFFFF'; + textureMapPack.emissive = textureMapPack.emissive || '#000000'; + + textureMapPack.reflective = textureMapPack.reflective || 0.5; + textureMapPack.shininess = textureMapPack.shininess || 0.5; + + this.color = new Color(textureMapPack.color); + this.emissive = new Color(textureMapPack.emissive); + + this.roughness = textureMapPack.reflective; + this.metalness = textureMapPack.shininess; + + this.__repeat = (!textureMapPack.repeat) ? TEXTURE_DEFAULT_REPEAT : textureMapPack.repeat; + this.__repeatPerCentimeter = 1.0 / this.__repeat; + + this.__repeatX = textureMapPack.repeatX || textureMapPack.repeat; + this.__repeatY = textureMapPack.repeatY || textureMapPack.repeat; + + this.__repeatPerCentimeterX = 1.0 / this.__repeatX; + this.__repeatPerCentimeterY = 1.0 / this.__repeatY; + + this.__applyNewTextures(); + } + + get repeat() { + return this.__repeat; + } + // set repeat(value) { + // this.__repeat = value; + // this.__repeatPerCentimeter = 1.0 / this.__repeat; + // this.__updateDimensions(this.__dimensions.x, this.__dimensions.y); + // } + + get dimensions() { + return this.__dimensions; + } + + set dimensions(vec2) { + this.__dimensions = vec2.clone(); + this.__updateDimensions(this.__dimensions.x, this.__dimensions.y); + } + + get isReflective() { + return this.__reflectsScene; + } + + get textureColor(){ + return this.__textureMapPack.color; + } + + set textureColor(hexstring){ + this.__textureMapPack.color = hexstring; + this.color = new Color(this.__textureMapPack.color); + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/materials/WallMaterial3D.js b/src/blueprint/scripts/materials/WallMaterial3D.js new file mode 100644 index 0000000..9fc2990 --- /dev/null +++ b/src/blueprint/scripts/materials/WallMaterial3D.js @@ -0,0 +1,7 @@ +import { Material3D } from "./Material3D"; + +export class WallMaterial3D extends Material3D { + constructor(parameters, textureMapPack, scene) { + super(parameters, textureMapPack, scene, false); + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/model/boundary.ts b/src/blueprint/scripts/model/boundary.ts new file mode 100644 index 0000000..f4fada1 --- /dev/null +++ b/src/blueprint/scripts/model/boundary.ts @@ -0,0 +1,172 @@ +import { EventDispatcher } from "three"; +import inside from 'point-in-polygon' +import alpha_shape from 'alpha-shape' + +import { EVENT_BOUNDARY_UPDATE, EVENT_EXTERNAL_FLOORPLAN_LOADED } from "../core/EventSystem" + +export class Boundary extends EventDispatcher { + constructor(floorplan, boundaryMetaData = {}) { + super(); + this.__floorplan = floorplan; + this.__metadata = { style: { type: 'color', color: '#00FF00', repeat: 50, colormap: null } }; + this.__boundaryRegions = []; + this.__boundaryRegionsRAW = []; + this.__roomRegions = []; + this.__roomRegionsRaw = []; + this.__externalRegions = []; + this.__externalRegionsRaw = []; + this.__width = 1.0; + this.__height = 1.0; + + this.__externalDesignEvent = this.__externalDesignBoundaries.bind(this); + + + for (var opt in this.__metadata) { + if (this.__metadata.hasOwnProperty(opt) && boundaryMetaData.hasOwnProperty(opt)) { + this.__metadata[opt] = boundaryMetaData[opt]; + } + } + this.__isValid = true; + this.__floorplan.addEventListener(EVENT_EXTERNAL_FLOORPLAN_LOADED, this.__externalDesignEvent); + } + + __externalDesignBoundaries(evt) { + let i = 0; + let pts = [], ptsraw = []; + this.__externalRegions = []; + this.__externalRegionsRaw = []; + + for (i = 0; i < this.__floorplan.externalCorners.length; i++) { + let c = this.__floorplan.externalCorners[i]; + pts.push(c.location.clone()); + ptsraw.push([c.location.x, c.location.y]); + } + let concave_hull = alpha_shape(0.1, ptsraw); + this.__externalRegionsRaw.push(ptsraw); + console.log(ptsraw); + console.log(concave_hull); + + } + + containsPoint(x, y, excludeBoundaryIndex = -1) { + let flag = true; + let i = 0, j = 0; + for (i = 0; i < this.__boundaryRegionsRAW.length; i++) { + if (i == excludeBoundaryIndex) { + continue; + } + let pts = this.__boundaryRegionsRAW[i]; + let isInside = inside([x, y], pts); + flag &= isInside; + } + return flag; + } + + intersectsExternalDesign(x, y) { + let flag = false; + let i = 0; + for (i = 0; i < this.__externalRegionsRaw.length; i++) { + let pts = this.__externalRegionsRaw[i]; + let isInside = inside([x, y], pts); + flag |= isInside; + } + return flag; + } + + update() { + + } + + clearBoundaryRegions() { + this.__boundaryRegions = []; + this.__boundaryRegionsRAW = [] + } + + addBoundaryRegion(points) { + let minX = Number.MAX_VALUE; + let minY = Number.MAX_VALUE; + let maxX = -Number.MAX_VALUE; + let maxY = -Number.MAX_VALUE; + let pts = points; + let ptsraw = []; + let i = 0; + for (i = 0; i < pts.length; i++) { + let point = pts[i]; + + minX = Math.min(minX, point.x); + minY = Math.min(minY, point.y); + + maxX = Math.max(maxX, point.x); + maxY = Math.max(maxY, point.y); + ptsraw.push([point.x, point.y]); + } + + this.__width = maxX - minX; + this.__height = maxY - minY; + + this.__boundaryRegions.push(points); + this.__boundaryRegionsRAW.push(ptsraw); + } + + get width() { + return this.__width; + } + + get height() { + return this.__height; + } + + get points() { + return (this.__boundaryRegions.length) ? this.__boundaryRegions[0] : []; + } + + get styleRepeat() { + return this.__metadata.style.repeat; + } + + /** + * return if style type is color or texture + */ + get styleType() { + return this.__metadata.style.type; + } + + set styleType(type) { + this.__metadata.style.type = type; + } + + get style() { + return this.__metadata.style; + } + + /** + * return a hexacolor string if styleType is color + * return a path to the ground texture if styleType is texture + */ + get styleValue() { + return this.__metadata.style.value; + } + + set styleValue(value) { + this.__metadata.style.value = value; + } + + get isValid() { + return this.__isValid; + } + + + get metadata() { + return this.__metadata; + } + + set metadata(mdata) { + for (let opt in this.__metadata) { + if (this.__metadata.hasOwnProperty(opt) && mdata.hasOwnProperty(opt)) { + this.__metadata[opt] = mdata[opt]; + console.log('OPTION :: ', opt, ', VALUE :: ', mdata[opt]); + } + } + this.dispatchEvent({ type: EVENT_BOUNDARY_UPDATE, item: this }); + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/model/corner.ts b/src/blueprint/scripts/model/corner.ts new file mode 100644 index 0000000..a6d366f --- /dev/null +++ b/src/blueprint/scripts/model/corner.ts @@ -0,0 +1,696 @@ +import { EVENT_ACTION, EVENT_DELETED, EVENT_MOVED, EVENT_CORNER_ATTRIBUTES_CHANGED } from '../core/EventSystem.js'; +import { Utils } from '../core/utils.js'; +import { WallTypes } from '../core/constants.js'; +//import {Dimensioning} from '../core/dimensioning.js'; +import { Configuration, configWallHeight, cornerTolerance } from '../core/configuration.js'; + + + +/** + * 角落用于定义墙 + */ +export class Corner extends EventDispatcher { + + /** Constructs a corner. + * @param {} floorplan The associated model floorplan. + * @param {Number} x X coordinate. + * @param {Number} y Y coordinate. + * @param {String} id An optional unique id. If not set, created internally. + */ + constructor(floorplan: Floorplan, x, y, id) { + super(); + /** + * @property {String} id The id of this corner. Autogenerated the first time + * @type {String} + **/ + this.id = id || Utils.guide(); + /** @property {Array} wallStarts Array of walls that are start walls + * @type {Array} + **/ + this.wallStarts = []; + /** @property {Array} wallEnds Array of walls that are end walls + * @type {Array} + **/ + this.wallEnds = []; + /** + * @deprecated Not in use. The EventDispatcher from threejs is used for emit and listen events + **/ + this.moved_callbacks = null; + /** + * @deprecated Not in use. The EventDispatcher from threejs is used for emit and listen events + **/ + this.deleted_callbacks = null; + /** + * @deprecated Not in use. The EventDispatcher from threejs is used for emit and listen events + **/ + this.action_callbacks = null; + /** + * @property {Floorplan} floorplan Reference to the model floorplan + * @type {Floorplan} + **/ + this.floorplan = floorplan; + /** + * @property {Number} x The position in x dimension + * @type {Number} + **/ + this._x = x; + /** + * @property {Number} y The position in y dimension + * @type {Number} + **/ + this._y = y; + + /** + * @property {Vector2} co The position as Vector2 + * @type {Vector2} + * @see https://threejs.org/docs/#api/en/math/Vector2 + **/ + this._co = new Vector2(this._x, this._y); + + /** + * @property {Number} _elevation The elevation at this corner + * @type {Number} + **/ + this._elevation = Configuration.getNumericValue(configWallHeight); + /** + * @property {Array} attachedRooms Array of rooms that have walls using this corner + * @type {Array} + **/ + this.attachedRooms = []; + + this.__hasBeenRemoved = false; + + this._angles = []; + this._angleDirections = []; + this._startAngles = []; + this._endAngles = []; + this._cyclicNeighbors = []; + /** + * @property {Boolean} _hasChanged A flag to indicate if something has changed about this corner + * @type {Boolean} + **/ + this._hasChanged = false; + + this.__isLocked = false; + } + + set isLocked(flag) { + this.__isLocked = flag; + } + + get isLocked() { + return this.__isLocked; + } + + get uuid() { + return this.id; + } + + get startAngles() { + return this._startAngles; + } + + get endAngles() { + return this._endAngles; + } + + get angles() { + return this._angles; + } + + get angleDirections() { + return this._angleDirections; + } + + get location() { + return this._co; + } + + set location(xy) { + this._co.x = xy.x; + this._co.y = xy.y; + this.x = xy.x; + this.y = xy.y; + } + + get x() { + return this._x; + } + + set x(value) { + let oldvalue = this._x; + if (Math.abs(value - this._x) > 1e-6) { + this._hasChanged = true; + } + this._x = value; + if (this._hasChanged) { + this._co.x = this._x; + this.updateAttachedRooms(); + // this.floorplan.update(false); + this.dispatchEvent({ type: EVENT_CORNER_ATTRIBUTES_CHANGED, item: this, info: { from: oldvalue, to: this._x } }); + } + } + + get y() { + return this._y; + } + + set y(value) { + let oldvalue = this._y; + if (Math.abs(value - this._y) > 1e-6) { + this._hasChanged = true; + } + this._y = value; + if (this._hasChanged) { + this._co.y = this._y; + this.updateAttachedRooms(); + // this.floorplan.update(false); + this.dispatchEvent({ type: EVENT_CORNER_ATTRIBUTES_CHANGED, item: this, info: { from: oldvalue, to: this._y } }); + } + } + + /** @type {Number} elevation The elevation value at this corner*/ + set elevation(value) { + let oldvalue = this._elevation; + if ((value - this._elevation) > 1e-6) { + this._hasChanged = true; + } + this._elevation = Number(value); //Dimensioning.cmFromMeasureRaw(Number(value)); + if (this._hasChanged) { + this.dispatchEvent({ type: EVENT_CORNER_ATTRIBUTES_CHANGED, item: this, info: { from: oldvalue, to: this._elevation } }); + } + } + + /** @type {Number} elevation The elevation value at this corner*/ + get elevation() { + return this._elevation; + } + + /** + * @param {Room} room - The room that should be attached to this corner + * @return {void} + */ + attachRoom(room) { + if (room) { + this.attachedRooms.push(room); + } + } + + /** + * @return {Room[]} Array of rooms attached to this corner + */ + getAttachedRooms() { + return this.attachedRooms; + } + + /** + * @return {void} Clear all the rooms attached to this corner + */ + clearAttachedRooms() { + this.attachedRooms = []; + } + + /** Add function to moved callbacks. + * @param func The function to be added. + */ + fireOnMove(func) { + this.moved_callbacks.add(func); + } + + /** Add function to deleted callbacks. + * @param func The function to be added. + */ + fireOnDelete(func) { + this.deleted_callbacks.add(func); + } + + /** Add function to action callbacks. + * @param func The function to be added. + */ + fireOnAction(func) { + this.action_callbacks.add(func); + } + + fireAction(action) { + this.dispatchEvent({ type: EVENT_ACTION, item: this, action: action }); + // this.action_callbacks.fire(action) + } + + /** + * @returns + * @deprecated + */ + getX() { + return this.x; + } + + /** + * @returns + * @deprecated + */ + getY() { + return this.y; + } + + /** + * @param {Number} tolerance - The tolerance value within which it will snap to adjacent corners + * @return {Object} snapped Contains keys x and y with true/false values + * @description The object with x and y that are boolean values to indicate if the snap happens in x and y + */ + snapToAxis(tolerance) { + // try to snap this corner to an axis + let snapped = { x: false, y: false }; + let scope = this; + + this.adjacentCorners().forEach((corner) => { + if (Math.abs(corner.x - scope.x) < tolerance) { + scope.x = corner.x; + snapped.x = true; + } + if (Math.abs(corner.y - scope.y) < tolerance) { + scope.y = corner.y; + snapped.y = true; + } + }); + return snapped; + } + + /** Moves corner to new position. + * @param {Number} newX The new x position. + * @param {Number} newY The new y position. + */ + move(newX, newY, mergeWithIntersections = false) { + // this.x = newX; + // this.y = newY; + this._x = newX; + this._y = newY; + this._co.x = newX; + this._co.y = newY; + + if (mergeWithIntersections) { + //The below line is crashing after makign the changes for curved walls + //While release v1.0.0 is stable even with this line enabled + this.mergeWithIntersected(); + if (this.floorplan.rooms.length < 10) { + this.updateAttachedRooms(true); + } + } + + // this.wallStarts.forEach((wall) => { + // wall.fireMoved(); + // }); + + // this.wallEnds.forEach((wall) => { + // wall.fireMoved(); + // }); + this.dispatchEvent({ type: EVENT_MOVED, item: this, position: new Vector2(newX, newY) }); + } + + /** Moves corner relatively to new position. + * @param {Number} dx The delta x. + * @param {Number} dy The delta y. + */ + relativeMove(dx, dy) { + this.move(this.x + dx, this.y + dy); + } + + /** + * Dispatches an event when removed from the floorplan({@link Floorplan}) instance. The event object contains reference to this {@link Corner} instance as item. + * @example + * let corner = new Corner(floorplan, 0, 0); + * function cornerRemoved(e) { console.log('I WAS REMOVED FROM LOCATION ', e.item.x, e.item.y) }; + * corner.remove(); + * @emits {EVENT_DELETED} + **/ + remove() { + this.__hasBeenRemoved = true; + this.dispatchEvent({ type: EVENT_DELETED, item: this }); + } + + /** + * Removes all the connected corners and itself. This in essence removes all the walls({@link Wall}) this corner is connected to. + * @example + * let corner1 = new Corner(floorplan, 0, 0); + * let corner2 = new Corner(floorplan, 10, 0); + * function cornerRemoved(e) { console.log('I WAS REMOVED FROM LOCATION ', e.item.x, e.item.y) } //Will log twice for two corners; + * corner.removeAll(); + **/ + removeAll() { + let i = 0; + for (i = 0; i < this.wallStarts.length; i++) { + this.wallStarts[i].remove(); + } + for (i = 0; i < this.wallEnds.length; i++) { + this.wallEnds[i].remove(); + } + this.remove(); + } + + //Angle is in degrees 0 - 360 + closestAngle(angle) { + let neighbors = this.adjacentCorners(); + let delta = 999999; + let closestAngle = 0; + let point = new Vector2(); + for (let i = 0; i < neighbors.length; i++) { + let wall = this.wallToOrFrom(neighbors[i]); + if (wall.wallType === WallTypes.CURVED) { + continue; + } + let neighbourAngle = neighbors[i].location.clone().sub(this.location).angle(); + neighbourAngle = (neighbourAngle * 180) / Math.PI; + let diff = Math.abs(angle - neighbourAngle); + if (diff < delta) { + delta = diff; + point.x = neighbors[i].location.x; + point.y = neighbors[i].location.y; + closestAngle = neighbourAngle; + } + } + return { angle: closestAngle, point: point }; + } + + updateAngles() { + let neighbors = this.adjacentCorners(); + this._angles = []; + this._angleDirections = []; + this._startAngles = []; + this._endAngles = []; + this._cyclicNeighbors = []; + if (neighbors.length < 2) { + return; + } + + let start = this.location.clone(); + let points = []; + for (let i = 0; i < neighbors.length; i++) { + points.push(neighbors[i].location); + } + let indicesAndAngles = Utils.getCyclicOrder(points, start); + let indices = indicesAndAngles['indices']; + let angles = indicesAndAngles['angles']; + // var N = (indices.length%2 === 0)? (indices.length < 3) ? indices.length - 1 : indices.length : indices.length - 1; + let N = (indices.length < 3) ? 1 : indices.length; + for (let i = 0; i < N; i++) { + let next = (i + 1) % indices.length; + let cindex = indices[i]; + let nindex = indices[next]; + + let cwall = this.wallToOrFrom(neighbors[cindex]); + let nwall = this.wallToOrFrom(neighbors[nindex]); + if (cwall != null && nwall != null) { + if (cwall.wallType === WallTypes.CURVED || nwall.wallType === WallTypes.CURVED) { + // No use in showing angle between two curved or two walls with intermixed types of straight and curved + // Set everything to zero + this._startAngles.push(0); + this._endAngles.push(0); + this._angles.push(0); + this._angleDirections.push(new Vector2(0, 0)); + this._cyclicNeighbors.push(neighbors[indices[i]]); + continue; + } + } + + let vectorA = points[cindex].clone().sub(start).normalize(); + let vectorB = points[nindex].clone().sub(start).normalize(); + let midVector = vectorA.add(vectorB).multiplyScalar(20.0); + + let diffAngle = Math.abs(angles[next] - angles[i]); + diffAngle = (diffAngle > 180) ? 360 - diffAngle : diffAngle; + diffAngle = Math.round(diffAngle * 10) / 10; + this._startAngles.push(angles[i]); + this._endAngles.push(angles[next]); + this._angles.push(diffAngle); + this._angleDirections.push(midVector); + this._cyclicNeighbors.push(neighbors[indices[i]]); + } + } + + /** + * When a corner is moved from its location it will impact the connected rooms ({@link Room}) shape, thus their areas. This will update the rooms + * @example + * let corner = new Corner(floorplan, 0, 0); + * corner.move(10, 0); + **/ + updateAttachedRooms(explicit = false) { + if (!this._hasChanged && !explicit) { + return; + } + // console.log('UPDATE ALL ATTACHED ROOMS :: '); + this.attachedRooms.forEach((room) => { + room.updateArea(); + }); + this._hasChanged = false; + } + + /** Gets the adjacent corners that are connected to this corner by walls ({@link Wall}). + * @returns {Corner[]} Array of corners. + */ + adjacentCorners() { + let retArray = []; + let i = 0; + for (i = 0; i < this.wallStarts.length; i++) { + retArray.push(this.wallStarts[i].getEnd()); + } + for (i = 0; i < this.wallEnds.length; i++) { + retArray.push(this.wallEnds[i].getStart()); + } + return retArray; + } + + /** Checks if a wall is connected. + * @param {Wall} wall A wall. + * @returns {boolean} in case of connection. + */ + isWallConnected(wall) { + let i = 0; + for (i = 0; i < this.wallStarts.length; i++) { + if (this.wallStarts[i] === wall) { + return true; + } + } + for (i = 0; i < this.wallEnds.length; i++) { + if (this.wallEnds[i] === wall) { + return true; + } + } + return false; + } + + /** + * Returns the distance between this corner and a point in 2d space + * @param {Vector2} point + * @see https://threejs.org/docs/#api/en/math/Vector2 + * @return {Number} distance The distance + **/ + distanceFrom(point) { + let distance = Utils.distance(point, new Vector2(this.x, this.y)); + //console.log('x,y ' + x + ',' + y + ' to ' + this.getX() + ',' + this.getY() + ' is ' + distance); + return distance; + } + + /** Gets the distance from a wall. + * @param {Wall} wall A wall. + * @returns {Number} distance The distance. + */ + distanceFromWall(wall) { + let cPoint = new Vector2(this.x, this.y); + if (wall.wallType === WallTypes.STRAIGHT) { + return wall.distanceFrom(cPoint); + } else if (wall.wallType === WallTypes.CURVED) { + let p = wall.bezier.project(cPoint); + let projected = new Vector2(p.x, p.y); + return projected.distanceTo(cPoint); + } + } + + /** Gets the distance from a corner. + * @param {Corner} corner A corner. + * @returns {Number} The distance. + */ + distanceFromCorner(corner) { + return this.distanceFrom(new Vector2(corner.x, corner.y)); + } + + /** Detaches a wall. + * @param {Wall} wall A wall. + */ + detachWall(wall) { + Utils.removeValue(this.wallStarts, wall); + Utils.removeValue(this.wallEnds, wall); + + /** + * If there are no walls connected to this corner then it is not + * necessary to keep this corner around anymore as an orphan point. + * But ensure you check if this corner has already been removed. Otherwise + * it will be lead to recursion + */ + if (this.wallStarts.length === 0 && this.wallEnds.length === 0 && !this.__hasBeenRemoved) { + this.remove(); + } + } + + /** Attaches a start wall. + * @param {Wall} wall A wall. + */ + attachStart(wall) { + this.wallStarts.push(wall); + } + + /** Attaches an end wall. + * @param {Wall} wall A wall. + */ + attachEnd(wall) { + this.wallEnds.push(wall); + } + + /** Get wall to corner. + * @param {Corner} corner A corner. + * @return {Wall} The associated wall or null. + */ + wallTo(corner) { + for (let i = 0; i < this.wallStarts.length; i++) { + if (this.wallStarts[i].getEnd() === corner) { + return this.wallStarts[i]; + } + } + return null; + } + + /** Get wall from corner. + * @param {Corner} corner A corner. + * @return {Wall} The associated wall or null. + */ + wallFrom(corner) { + for (let i = 0; i < this.wallEnds.length; i++) { + if (this.wallEnds[i].getStart() === corner) { + return this.wallEnds[i]; + } + } + return null; + } + + /** Get wall to or from corner. + * @param {Corner} corner A corner. + * @return {Wall} The associated wall or null. + */ + wallToOrFrom(corner) { + return this.wallTo(corner) || this.wallFrom(corner); + } + + /** Get wall from corner. + * @param {Corner} corner A corner. + */ + combineWithCorner(corner) { + let i = 0; + // update position to other corner's + // this.x = corner.x; + // this.y = corner.y; + this.move(corner.x, corner.y, false); + // absorb the other corner's wallStarts and wallEnds + for (i = corner.wallStarts.length - 1; i >= 0; i--) { + corner.wallStarts[i].setStart(this); + } + for (i = corner.wallEnds.length - 1; i >= 0; i--) { + corner.wallEnds[i].setEnd(this); + } + + let rooms = corner.getAttachedRooms(); + for (i = 0; i < rooms.length; i++) { + let room = rooms[i]; + //Below returns the roomname object + let roomname = this.floorplan.metaroomsdata[room.roomByCornersId]; + if (roomname) { + let oldId = room.roomByCornersId; + let newId = oldId.replace(corner.id, this.id); + this.floorplan.metaroomsdata[newId] = {}; + this.floorplan.metaroomsdata[newId]['name'] = roomname['name']; + delete this.floorplan.metaroomsdata[oldId]; + } + } + + // delete the other corner + corner.removeAll(); + this.removeDuplicateWalls(); + this.floorplan.update(); + } + + mergeWithIntersected(updateFloorPlan = true) { + let i = 0; + //console.log('mergeWithIntersected for object: ' + this.type); + // check corners + for (i = 0; i < this.floorplan.getCorners().length; i++) { + let corner = this.floorplan.getCorners()[i]; + if (this.distanceFromCorner(corner) < cornerTolerance && corner !== this) { + this.combineWithCorner(corner); + return true; + } + } + // check walls + for (i = 0; i < this.floorplan.getWalls().length; i++) { + let wall = this.floorplan.getWalls()[i]; + if (this.distanceFromWall(wall) < cornerTolerance && !this.isWallConnected(wall)) { + // update position to be on wall + let intersection; + if (wall.wallType === WallTypes.STRAIGHT) { + intersection = Utils.closestPointOnLine(new Vector2(this.x, this.y), wall.getStart(), wall.getEnd()); + } else if (wall.wallType === WallTypes.CURVED) { + intersection = wall.bezier.project(new Vector2(this.x, this.y)); + } + + if (wall.wallType === WallTypes.STRAIGHT) { + // merge this corner into wall by breaking wall into two parts + let newWall = this.floorplan.newWall(this, wall.getEnd()); + wall.setEnd(this); + newWall.clearAttachedRooms(); + wall.clearAttachedRooms(); + } else if (wall.wallType === WallTypes.CURVED) { + // merge this corner into wall by breaking wall into two parts + let newWall = this.floorplan.newWall(this, wall.getEnd()); + wall.setEnd(this); + newWall.clearAttachedRooms(); + wall.clearAttachedRooms(); + } + //The below line is crashing because of recursive. This function mergeWithIntersected is called + //From move(newX, newY) method. Now if we call move(newX, newY) from inside this method + //It will lead to recursion. So ensure in the move(newX, newY) method mergeWithIntersected is not called + //Hence added a third parameter to move(newX, newY, mergeWithIntersections) that is a boolean value + //Send this boolean value as false to avoid recursion crashing of the application + this.move(intersection.x, intersection.y, false, updateFloorPlan); //Causes Recursion if third parameter is true + this.floorplan.update(); + return true; + } + } + return false; + } + + /** Ensure we do not have duplicate walls (i.e. same start and end points) */ + removeDuplicateWalls() { + let i = 0; + // delete the wall between these corners, if it exists + let wallEndpoints = {}; + let wallStartpoints = {}; + for (i = this.wallStarts.length - 1; i >= 0; i--) { + if (this.wallStarts[i].getEnd() === this) { + // remove zero length wall + this.wallStarts[i].remove(); + } else if (this.wallStarts[i].getEnd().id in wallEndpoints) { + // remove duplicated wall + this.wallStarts[i].remove(); + } else { + wallEndpoints[this.wallStarts[i].getEnd().id] = true; + } + } + for (i = this.wallEnds.length - 1; i >= 0; i--) { + if (this.wallEnds[i].getStart() === this) { + // removed zero length wall + this.wallEnds[i].remove(); + } else if (this.wallEnds[i].getStart().id in wallStartpoints) { + // removed duplicated wall + this.wallEnds[i].remove(); + } else { + wallStartpoints[this.wallEnds[i].getStart().id] = true; + } + } + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/model/cornergroups.ts b/src/blueprint/scripts/model/cornergroups.ts new file mode 100644 index 0000000..cdec26d --- /dev/null +++ b/src/blueprint/scripts/model/cornergroups.ts @@ -0,0 +1,222 @@ +import { Vector2, Matrix4, Vector3 } from "three"; +import { EVENT_MOVED } from "../core/EventSystem"; + +export class CornerGroup { + /** + * + * @param {Array} array of corners instances + */ + constructor(corners) { + this.__corners = corners; + this.__size = new Vector2(); + this.__center = null; + this.__currentCenter = new Vector2(); + this.__deltaTranslation = new Vector2(); + this.__radians = 0.0; + this.__originalCornerPositions = null; + this.__tl = null; + this.__br = null; + this.__tr = null; + this.__bl = null; + this.__matrix = new Matrix4(); + this.__cornerMovedEvent = this.__cornerMoved.bind(this); + this.__addCornerListeners(); + this.__update(); + } + + __cornerMoved() { + // this.__update(); + } + + __addCornerListeners() { + for (let i = 0; i < this.__corners.length; i++) { + this.__corners[i].addEventListener(EVENT_MOVED, this.__cornerMovedEvent); + } + } + + __update() { + this.__originalCornerPositions = []; + let minPoint = new Vector2(Number.MAX_VALUE, Number.MAX_VALUE); + let maxPoint = new Vector2(-Number.MAX_VALUE, -Number.MAX_VALUE); + + for (let i = 0; i < this.__corners.length; i++) { + let corner = this.__corners[i]; + minPoint.x = Math.min(minPoint.x, corner.location.x); + minPoint.y = Math.min(minPoint.y, corner.location.y); + + maxPoint.x = Math.max(maxPoint.x, corner.location.x); + maxPoint.y = Math.max(maxPoint.y, corner.location.y); + this.__originalCornerPositions.push(corner.location.clone()); + } + this.__minPoint = minPoint.clone(); + this.__maxPoint = maxPoint.clone(); + this.__size = maxPoint.clone().sub(minPoint); + this.__size.x = Math.abs(this.__size.x); + this.__size.y = Math.abs(this.__size.y); + // if (!this.__center) { + this.__center = this.__size.clone().multiplyScalar(0.5).add(minPoint); + // } + this.__currentCenter = this.__size.clone().multiplyScalar(0.5).add(minPoint); + this.__matrix = this.__matrix.identity(); + } + + __applyTransformations(scale, radians, origin) { + let translation = origin.clone().sub(this.__center); + let translationMatrix = new Matrix4().makeTranslation(translation.x, translation.y, 0); + + let T = new Matrix4().makeTranslation(-origin.x, -origin.y, 0); //Translate to -origin of scaling + let TInv = new Matrix4().makeTranslation(origin.x, origin.y, 0); //Translate to origin of scaling (inverse) + + let rotationMatrix = TInv.clone().multiply(new Matrix4().makeRotationAxis(new Vector3(0, 0, 1), radians)).multiply(T); + let scaleMatrix = TInv.clone().multiply(new Matrix4().makeScale(scale.x, scale.y, 1)).multiply(T); + let transformMatrix = rotationMatrix.multiply(scaleMatrix).multiply(translationMatrix); + let i = 0; + for (i = 0; i < this.__corners.length; i++) { + let location = this.__originalCornerPositions[i].clone(); + let location3 = new Vector3(location.x, location.y, 0); + location3.applyMatrix4(transformMatrix); + // this.__corners[i].location = new Vector2(location3.x, location3.y); + this.__corners[i].move(location3.x, location3.y); + } + + // if (this.__corners[0]) { + // this.__corners[0].floorplan.update(); + // } + } + + applyTransformations(scale, radians, origin) { + this.__applyTransformations(scale, radians, origin); + } + + contains(corner) { + for (let i = 0; i < this.__corners.length; i++) { + if (corner.id === this.__corners[i].id) { + return true; + } + } + return false; + // return Utils.hasValue(this.__corners, corner); + } + + update() { + this.__update(); + } + + destroy() { + for (let i = 0; i < this.__corners.length; i++) { + this.__corners[i].removeEventListener(EVENT_MOVED, this.__cornerMovedEvent); + } + this.__corners = []; + } + + get matrix() { + return this.__matrix; + } + + set matrix(mat) { + this.__matrix = mat; + } + + get corners() { + return this.__corners; + } + + get size() { + return this.__size.clone(); + } + + get center() { + return this.__center.clone(); + } + + get boundary() { + let points = []; + for (let i = 0; i < this.__corners.length; i++) { + let corner = this.__corners[i]; + points.push([corner.location.x, corner.location.y]); + } + return points; + } + +} +export class CornerGroups { + /** + * + * @param {Floorplan} floorplan + * @description A class that groups connected corners together and also helps to \ + * to apply transformations on them + * + */ + constructor(floorplan) { + this.__groups = []; + this.__floorplan = floorplan; + this.createGroups(); + } + + getContainingGroup(corner) { + for (let i = 0; i < this.__groups.length; i++) { + if (this.__groups[i].contains(corner)) { + return this.__groups[i]; + } + } + return null; + } + + get groups() { + return this.__groups; + } + + /** + * @description - Determine heuristically the connected group of corners + */ + createGroups() { + function tinyCornerGroups(corner, array) { + let adjacentCorners = corner.adjacentCorners(); + //The below condition means this corner and its neighbors hasn't been analyzed + if (!array.includes(corner)) { + array.push(corner); + for (let j = 0; j < adjacentCorners.length; j++) { + array = tinyCornerGroups(adjacentCorners[j], array); + } + } + return array; + } + + function tinyNotInArray(mainarray, subarray) { + for (let j = 0; j < mainarray.length; j++) { + if (!subarray.includes(mainarray[j])) { + return mainarray[j]; + } + } + return null; + } + this.__groups.forEach((group) => { + group.destroy(); + }); + this.__groups.length = 0; + if (!this.__floorplan.corners.length) { + return; + } + + let firstCorner = this.__floorplan.corners[0]; + let cornerGroups = [ + [] + ]; + + cornerGroups[0] = tinyCornerGroups(firstCorner, cornerGroups[0]); + + while (cornerGroups.flat().length !== this.__floorplan.corners.length) { + let isolatedCorner = tinyNotInArray(this.__floorplan.corners, cornerGroups.flat()); + if (isolatedCorner) { + let index = cornerGroups.push([]) - 1; + cornerGroups[index] = tinyCornerGroups(isolatedCorner, cornerGroups[index]); + } else { + break; + } + } + for (let i = 0; i < cornerGroups.length; i++) { + let cornerGroup = new CornerGroup(cornerGroups[i]); + this.__groups.push(cornerGroup); + } + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/model/floorplan.ts b/src/blueprint/scripts/model/floorplan.ts new file mode 100644 index 0000000..1a6e310 --- /dev/null +++ b/src/blueprint/scripts/model/floorplan.ts @@ -0,0 +1,1298 @@ +import { EVENT_UPDATED, EVENT_LOADED, EVENT_NEW, EVENT_DELETED, EVENT_ROOM_NAME_CHANGED, EVENT_MODE_RESET, EVENT_EXTERNAL_FLOORPLAN_LOADED, EventSystem } from '../core/EventSystem'; +import { EVENT_CORNER_ATTRIBUTES_CHANGED, EVENT_WALL_ATTRIBUTES_CHANGED, EVENT_ROOM_ATTRIBUTES_CHANGED, EVENT_MOVED, EVENT_NEW_ROOMS_ADDED } from '../core/EventSystem'; +import { Utils } from '../core/utils'; +import { Dimensioning } from '../core/dimensioning'; +import { dimInch, dimFeetAndInch, dimMeter, dimCentiMeter, dimMilliMeter, defaultWallTexture, defaultFloorTexture } from '../core/constants'; +import { WallTypes } from '../core/constants'; +import { Version } from '../core/version'; +import { cornerTolerance, Configuration, configDimUnit } from '../core/configuration'; + + +import { HalfEdge } from './half_edge'; +import { Corner } from './corner'; +import { Wall } from './wall'; +import { Room } from './room'; +import { CornerGroups } from './cornergroups'; +import { Boundary } from './boundary'; +import { Vector2 } from 'babylonjs'; + +/** */ +export const defaultFloorPlanTolerance = 10.0; + +/** + * 平面图代表了许多墙壁、角落和房间。 这是一 + * 保持 2d 和 3d 同步的抽象 + */ +export class Floorplan { + // 墙集合 + walls: Wall[]; + // 角落集合 + corners: Corner[]; + // 房间集合 + rooms: Room[]; + // 边界 + __boundary: Boundary; + // + __externalCorners = []; + __externalWalls = []; + __externalRooms = []; + + __roofPlanesForIntersection = []; + __floorPlanesForIntersection = []; + __wallPlanesForIntersection = []; + + metaroomsdata: Object; + + new_wall_callbacks: []; + + new_corner_callbacks: []; + + redraw_callbacks: []; + + updated_rooms: []; + + roomLoadedCallbacks: []; + + floorTextures: {}; + + _carbonSheet: Object; + + __updatesOn: boolean; + + __cornerGroups: CornerGroups; + + + __wallAttributesChangedEvent: (event: any) => void; + __wallDeletedEvent: (event: any) => void; + __cornerAttributesChangedOrMovedEvent: (event: any) => void; + __cornerDeletedEvent: (event: any) => void; + /** + * 构造一个新的平面图 + * const floorplan = new Floorplan(); + */ + constructor() { + + this.walls = []; + + this.corners = []; + + this.rooms = []; + + + this.__boundary = new Boundary(this); + + this.__externalCorners = []; + this.__externalWalls = []; + this.__externalRooms = []; + + this.__roofPlanesForIntersection = []; + this.__floorPlanesForIntersection = []; + this.__wallPlanesForIntersection = []; + + this.metaroomsdata = {}; + + this.new_wall_callbacks = []; + + this.new_corner_callbacks = []; + + this.redraw_callbacks = []; + + this.updated_rooms = []; + + this.roomLoadedCallbacks = []; + + this.floorTextures = {}; + + this._carbonSheet = null; + + this.__updatesOn = true; + + this.__cornerGroups = new CornerGroups(this); + + this.__wallAttributesChangedEvent = event => { + this.__wallAttributesChanged(event) + }; + this.__wallDeletedEvent = event => { + this.__wallDeleted(event); + } + this.__cornerAttributesChangedOrMovedEvent = event => { + this.__cornerAttributesChangedOrMoved(event); + } + this.__cornerDeletedEvent = event => { + this.__cornerDeleted(event); + } + + } + + externalWallEdges(): any[] { + let edges = []; + this.__externalWalls.forEach((wall) => { + if (wall.frontEdge) { + edges.push(wall.frontEdge); + } + if (wall.backEdge) { + edges.push(wall.backEdge); + } + }); + return edges; + } + /** + * @return {HalfEdge[]} edges The array of {@link HalfEdge} + */ + wallEdges() { + var edges = []; + this.walls.forEach((wall) => { + if (wall.frontEdge) { + edges.push(wall.frontEdge); + } + if (wall.backEdge) { + edges.push(wall.backEdge); + } + }); + return edges; + } + + __wallDeleted(evt) { + let wall = evt.item; + wall.removeEventListener(EVENT_DELETED, this.__wallDeletedEvent); + wall.removeEventListener(EVENT_WALL_ATTRIBUTES_CHANGED, this.__wallAttributesChangedEvent); + this.removeWall(wall); + } + + __wallAttributesChanged(evt) { + // this.dispatchEvent(evt); + EventSystem.Instance.sendMessage("WALL_ATTRIBUTES_CHANGED_EVENT", evt); + } + + __cornerDeleted(evt) { + let corner = evt.item; + + corner.removeEventListener(EVENT_DELETED, this.__cornerDeletedEvent); + corner.removeEventListener(EVENT_CORNER_ATTRIBUTES_CHANGED, this.__cornerAttributesChangedOrMovedEvent); + corner.removeEventListener(EVENT_MOVED, this.__cornerAttributesChangedOrMovedEvent); + + this.removeCorner(corner); + this.update(); + // this.dispatchEvent({ type: EVENT_DELETED, item: this }); + EventSystem.Instance.sendMessage("DELETED_EVENT", this); + } + + __cornerAttributesChangedOrMoved(evt) { + // this.dispatchEvent(evt); + EventSystem.Instance.sendMessage("CORNER_ATTRIBUTES_CHANGED_EVENT", evt); + EventSystem.Instance.sendMessage("MOVED_EVENT", evt); + let updateCorners = evt.item.adjacentCorners(); + updateCorners.push(evt.item); + this.update(false, updateCorners); + } + + /** + * Returns the roof planes in the floorplan for intersection testing + * + * @return {Mesh[]} planes + * @see + */ + createRoofPlanes() { + var planes = []; + this.rooms.forEach((room) => { + planes.push(room.roofPlane); + }); + return planes; + } + + /** + * Returns all the planes for intersection of the floors in all room + * + * @return {Mesh[]} planes + * @see + */ + createFloorPlanes() { + return Utils.map(this.rooms, (room) => { + return room.floorPlane; + }); + } + + /** + * Returns all the planes for intersection for the walls + * + * @return {Mesh[]} planes + * @see + */ + createWallEdgePlanes() { + var planes = []; + this.walls.forEach((wall) => { + if (wall.frontEdge) { + planes.push(wall.frontEdge.plane); + if (wall.frontEdge.exteriorPlane) { + planes.push(wall.frontEdge.exteriorPlane); + } + } + if (wall.backEdge) { + planes.push(wall.backEdge.plane); + if (wall.backEdge.exteriorPlane) { + planes.push(wall.backEdge.exteriorPlane); + } + } + }); + return planes; + } + + fireOnNewWall(callback) { + this.new_wall_callbacks.add(callback); + } + + fireOnNewCorner(callback) { + this.new_corner_callbacks.add(callback); + } + + fireOnRedraw(callback) { + this.redraw_callbacks.add(callback); + } + + fireOnUpdatedRooms(callback) { + this.updated_rooms.add(callback); + } + + // This method needs to be called from the 2d floorplan whenever + // the other method newWall is called. + // This is to ensure that there are no floating walls going across + // other walls. If two walls are intersecting then the intersection point + // has to create a new wall. + /** + * Checks existing walls for any intersections they would make. If there are + * intersections then introduce new corners and new walls as required at + * places + * + * @param {Corner} + * start + * @param {Corner} + * end + * @return {boolean} intersects + */ + + newWallsForIntersections(start, end) { + var intersections = false; + // This is a bug in the logic + // When creating a new wall with a start and end + // it needs to be checked if it is cutting other walls + // If it cuts then all those walls have to removed and introduced as + // new walls along with this new wall + var cStart = new Vector2(start.getX(), start.getY()); + var cEnd = new Vector2(end.getX(), end.getY()); + var line = { p1: cStart, p2: cEnd }; + var newCorners = []; + + for (var i = 0; i < this.walls.length; i++) { + var twall = this.walls[i]; + var bstart = { x: twall.getStartX(), y: twall.getStartY() }; + var bend = { x: twall.getEndX(), y: twall.getEndY() }; + var iPoint; + if (twall.wallType === WallTypes.CURVED) { + iPoint = twall.bezier.intersects(line); + if (iPoint.length) { + iPoint = twall.bezier.get(iPoint[0]); + } + } else { + iPoint = Utils.lineLineIntersectPoint(cStart, cEnd, bstart, bend); + } + if (iPoint) { + var nCorner = this.newCorner(iPoint.x, iPoint.y); + newCorners.push(nCorner); + nCorner.mergeWithIntersected(false); + intersections = true; + } + } + this.update(); + + return intersections; + } + + /** + * Creates a new wall. + * + * @param {Corner} + * start The start corner. + * @param {Corner} + * end The end corner. + * @returns {Wall} The new wall. + */ + newWall(start, end, a, b) { + var scope = this; + var wall = new Wall(start, end, a, b); + + this.walls.push(wall); + // wall.addEventListener(EVENT_DELETED, function(o) { scope.removeWall(o.item); }); + // wall.addEventListener(EVENT_WALL_ATTRIBUTES_CHANGED, function(o) { + // scope.dispatchEvent(o); + // }); + + wall.addEventListener(EVENT_DELETED, this.__wallDeletedEvent); + wall.addEventListener(EVENT_WALL_ATTRIBUTES_CHANGED, this.__wallAttributesChangedEvent); + + this.dispatchEvent({ type: EVENT_NEW, item: this, newItem: wall }); + this.update(); + return wall; + } + + + + /** + * Creates a new corner. + * + * @param {Number} + * x The x coordinate. + * @param {Number} + * y The y coordinate. + * @param {String} + * id An optional id. If unspecified, the id will be created + * internally. + * @returns {Corner} The new corner. + */ + newCorner(x, y, id) { + var scope = this; + var corner = new Corner(this, x, y, id); + + for (var i = 0; i < this.corners.length; i++) { + var existingCorner = this.corners[i]; + if (existingCorner.distanceFromCorner(corner) < cornerTolerance) { + this.dispatchEvent({ type: EVENT_NEW, item: this, newItem: existingCorner }); + return existingCorner; + } + } + + this.corners.push(corner); + + corner.addEventListener(EVENT_DELETED, this.__cornerDeletedEvent); + corner.addEventListener(EVENT_CORNER_ATTRIBUTES_CHANGED, this.__cornerAttributesChangedOrMovedEvent); + corner.addEventListener(EVENT_MOVED, this.__cornerAttributesChangedOrMovedEvent); + this.dispatchEvent({ type: EVENT_NEW, item: this, newItem: corner }); + + // This code has been added by #0K. There should be an update whenever a + // new corner is inserted + this.update(); + + return corner; + } + + /** + * Removes a wall. + * + * @param {Wall} + * wall The wall to be removed. + */ + removeWall(wall) { + Utils.removeValue(this.walls, wall); + this.update(); + this.dispatchEvent({ type: EVENT_DELETED, item: this, deleted: wall, item_type: 'wall' }); + } + + /** + * Removes a corner. + * + * @param {Corner} + * corner The corner to be removed. + */ + removeCorner(corner) { + Utils.removeValue(this.corners, corner); + this.update(); + this.dispatchEvent({ type: EVENT_DELETED, item: this, deleted: corner, item_type: 'corner' }); + } + + /** + * Gets the walls. + * + * @return {Wall[]} + */ + getWalls() { + return this.walls; + } + + /** + * Gets the corners. + * + * @return {Corner[]} + */ + getCorners() { + return this.corners; + } + + /** + * Gets the rooms. + * + * @return {Room[]} + */ + getRooms() { + return this.rooms; + } + + /** + * Gets the room overlapping the location x, y. + * + * @param {Number} + * mx + * @param {Number} + * my + * @return {Room} + */ + overlappedRoom(mx, my) { + for (var i = 0; i < this.rooms.length; i++) { + var room = this.rooms[i]; + var flag = room.pointInRoom(new Vector2(mx, my)); + if (flag) { + return room; + } + } + + return null; + } + + /** + * Gets the Control of a Curved Wall overlapping the location x, y at a + * tolerance. + * + * @param {Number} + * x + * @param {Number} + * y + * @param {Number} + * tolerance + * @return {Corner} + */ + overlappedControlPoint(wall, x, y, tolerance) { + tolerance = tolerance || defaultFloorPlanTolerance * 5; + if (wall.a.distanceTo(new Vector2(x, y)) < tolerance && wall.wallType === WallTypes.CURVED) { + return wall.a; + } else if (wall.b.distanceTo(new Vector2(x, y)) < tolerance && wall.wallType === WallTypes.CURVED) { + return wall.b; + } + + return null; + } + + /** + * Gets the Corner overlapping the location x, y at a tolerance. + * + * @param {Number} + * x + * @param {Number} + * y + * @param {Number} + * tolerance + * @return {Corner} + */ + overlappedCorner(x, y, tolerance) { + tolerance = tolerance || defaultFloorPlanTolerance; + for (var i = 0; i < this.corners.length; i++) { + if (this.corners[i].distanceFrom(new Vector2(x, y)) < tolerance) { + return this.corners[i]; + } + } + return null; + } + + /** + * Gets the Wall overlapping the location x, y at a tolerance. + * + * @param {Number} + * x + * @param {Number} + * y + * @param {Number} + * tolerance + * @return {Wall} + */ + overlappedWall(x, y, tolerance) { + tolerance = tolerance || defaultFloorPlanTolerance; + for (var i = 0; i < this.walls.length; i++) { + var newtolerance = tolerance; // (tolerance+ + // ((this.walls[i].wallType == + // WallTypes.CURVED)*tolerance*10)); + if (this.walls[i].distanceFrom(new Vector2(x, y)) < newtolerance) { + return this.walls[i]; + } + } + return null; + } + + /** + * The metadata object with information about the rooms. + * + * @return {Object} metaroomdata an object with room corner ids as key and + * names as values + */ + getMetaRoomData() { + var metaRoomData = {}; + this.rooms.forEach((room) => { + var metaroom = {}; + // var cornerids = []; + // room.corners.forEach((corner)=>{ + // cornerids.push(corner.id); + // }); + // var ids = cornerids.join(','); + var ids = room.roomByCornersId; + metaroom['name'] = room.name; + metaRoomData[ids] = metaroom; + }); + return metaRoomData; + } + + // Save the floorplan as a json object file + /** + * @return {void} + */ + saveFloorplan() { + var floorplans = { version: Version.getTechnicalVersion(), corners: {}, walls: [], rooms: {}, wallTextures: [], floorTextures: {}, newFloorTextures: {}, carbonSheet: {} }; + var cornerIds = []; + // writing all the corners based on the corners array + // is having a bug. This is because some walls have corners + // that aren't part of the corners array anymore. This is a quick fix + // by adding the corners to the json file based on the corners in the walls + // this.corners.forEach((corner) => { + // floorplans.corners[corner.id] = {'x': corner.x,'y': corner.y}; + // }); + + this.walls.forEach((wall) => { + if (wall.getStart() && wall.getEnd()) { + floorplans.walls.push({ + 'corner1': wall.getStart().id, + 'corner2': wall.getEnd().id, + 'frontTexture': wall.frontTexture, + 'backTexture': wall.backTexture, + 'wallType': wall.wallType.description, + 'a': { x: wall.a.x, y: wall.a.y }, + 'b': { x: wall.b.x, y: wall.b.y }, + 'thickness': Dimensioning.cmToMeasureRaw(wall.thickness), + }); + cornerIds.push(wall.getStart()); + cornerIds.push(wall.getEnd()); + } + }); + + cornerIds.forEach((corner) => { + floorplans.corners[corner.id] = { 'x': Dimensioning.cmToMeasureRaw(corner.x), 'y': Dimensioning.cmToMeasureRaw(corner.y), 'elevation': Dimensioning.cmToMeasureRaw(corner.elevation) }; + }); + + // this.rooms.forEach((room)=>{ + // var metaroom = {}; + // var cornerids = []; + // room.corners.forEach((corner)=>{ + // cornerids.push(corner.id); + // }); + // var ids = cornerids.join(','); + // metaroom['name'] = room.name; + // floorplans.rooms[ids] = metaroom; + // }); + floorplans.rooms = this.metaroomsdata; + + if (this.carbonSheet) { + floorplans.carbonSheet['url'] = this.carbonSheet.url; + floorplans.carbonSheet['transparency'] = this.carbonSheet.transparency; + floorplans.carbonSheet['x'] = this.carbonSheet.x; + floorplans.carbonSheet['y'] = this.carbonSheet.y; + floorplans.carbonSheet['anchorX'] = this.carbonSheet.anchorX; + floorplans.carbonSheet['anchorY'] = this.carbonSheet.anchorY; + floorplans.carbonSheet['width'] = this.carbonSheet.width; + floorplans.carbonSheet['height'] = this.carbonSheet.height; + } + + if (this.__boundary) { + if (this.__boundary.isValid) { + let boundaryData = {}; + let measurePoints = []; + for (let i = 0; i < this.__boundary.points.length; i++) { + let cmPoint = this.__boundary.points[i]; + let measurePoint = { + x: Dimensioning.cmToMeasureRaw(cmPoint.x), + y: Dimensioning.cmToMeasureRaw(cmPoint.y), + elevation: Dimensioning.cmToMeasureRaw(cmPoint.elevation), + }; + measurePoints.push(measurePoint); + } + + boundaryData.points = measurePoints; + boundaryData.style = this.__boundary.style; + floorplans.boundary = boundaryData; + } + } + + floorplans.units = Configuration.getStringValue(configDimUnit); + + floorplans.newFloorTextures = this.floorTextures; + return floorplans; + } + + // Load the floorplan from a previously saved json object file + /** + * @param {JSON} + * floorplan + * @return {void} + * @emits {EVENT_LOADED} + */ + loadFloorplan(floorplan) { + this.reset(); + this.__updatesOn = false; + let corners = {}; + if (floorplan === null || !('corners' in floorplan) || !('walls' in floorplan)) { + return; + } + let currentUnit = Configuration.getStringValue(configDimUnit); + if (floorplan.units) { + switch (floorplan.units) { + case dimInch: + Configuration.setValue(configDimUnit, dimInch); + break; + case dimFeetAndInch: + Configuration.setValue(configDimUnit, dimFeetAndInch); + break; + case dimMeter: + Configuration.setValue(configDimUnit, dimMeter); + break; + case dimCentiMeter: + Configuration.setValue(configDimUnit, dimCentiMeter); + break; + case dimMilliMeter: + Configuration.setValue(configDimUnit, dimMilliMeter); + break; + } + + } + + for (let id in floorplan.corners) { + let corner = floorplan.corners[id]; + corners[id] = this.newCorner(Dimensioning.cmFromMeasureRaw(corner.x), Dimensioning.cmFromMeasureRaw(corner.y), id); + if (corner.elevation) { + corners[id].elevation = Dimensioning.cmFromMeasureRaw(corner.elevation); + } + } + let scope = this; + floorplan.walls.forEach((wall) => { + let newWall = scope.newWall(corners[wall.corner1], corners[wall.corner2]); + + if (wall.frontTexture) { + if (wall.frontTexture.colormap) { + newWall.frontTexture = wall.frontTexture; + } else { + newWall.frontTexture = defaultWallTexture; + } + + } + if (wall.backTexture) { + if (wall.backTexture.colormap) { + newWall.backTexture = wall.backTexture; + } else { + newWall.backTexture = defaultWallTexture; + } + + } + if (wall.thickness) { + newWall.thickness = Dimensioning.cmFromMeasureRaw(wall.thickness); + } + // Adding of a, b, wallType (straight, curved) for walls happened + // with introduction of 0.0.2a + if (Version.isVersionHigherThan(floorplan.version, '0.0.2a')) { + newWall.a = wall.a; + newWall.b = wall.b; + if (wall.wallType === 'CURVED') { + newWall.wallType = WallTypes.CURVED; + } else { + newWall.wallType = WallTypes.STRAIGHT; + } + } + }); + + if ('newFloorTextures' in floorplan) { + this.floorTextures = floorplan.newFloorTextures; + } + + if ('boundary' in floorplan) { + if (floorplan.boundary.points) { + let cmPoints = []; + for (let i = 0; i < floorplan.boundary.points.length; i++) { + let point = floorplan.boundary.points[i]; + let cmPoint = { + x: Dimensioning.cmFromMeasureRaw(point.x), + y: Dimensioning.cmFromMeasureRaw(point.y), + elevation: Dimensioning.cmFromMeasureRaw(point.elevation), + }; + cmPoints.push(cmPoint); + } + + floorplan.boundary.points = cmPoints; + this.__boundary.addBoundaryRegion(cmPoints); + this.__boundary.metadata = floorplan.boundary; + } + } + + this.__updatesOn = true; + this.metaroomsdata = floorplan.rooms; + this.update(); + Configuration.setValue(configDimUnit, currentUnit); + this.dispatchEvent({ type: EVENT_LOADED, item: this }); + // this.roomLoadedCallbacks.fire(); + } + + // Load the floorplan from a previously saved json object file + /** + * @param {JSON} + * floorplan + * @return {void} + * @emits {EVENT_LOADED} + */ + loadLockedFloorplan(floorplan) { + if (floorplan === null || !('corners' in floorplan) || !('walls' in floorplan)) { + return; + } + let currentUnit = Configuration.getStringValue(configDimUnit); + if (floorplan.units) { + switch (floorplan.units) { + case dimInch: + Configuration.setValue(configDimUnit, dimInch); + break; + case dimFeetAndInch: + Configuration.setValue(configDimUnit, dimFeetAndInch); + break; + case dimMeter: + Configuration.setValue(configDimUnit, dimMeter); + break; + case dimCentiMeter: + Configuration.setValue(configDimUnit, dimCentiMeter); + break; + case dimMilliMeter: + Configuration.setValue(configDimUnit, dimMilliMeter); + break; + } + } + + + let externalNewCorners = {}; + + for (let id in floorplan.corners) { + let cornerData = floorplan.corners[id]; + let corner = new Corner(this, Dimensioning.cmFromMeasureRaw(cornerData.x), Dimensioning.cmFromMeasureRaw(cornerData.y)); + corner.elevation = Dimensioning.cmFromMeasureRaw(cornerData.elevation); + corner.isLocked = true; + externalNewCorners[id] = corner; + this.__externalCorners.push(corner); + } + floorplan.walls.forEach((wall) => { + let corner1 = externalNewCorners[wall.corner1]; + let corner2 = externalNewCorners[wall.corner2]; + let newWall = new Wall(corner1, corner2); + newWall.isLocked = true; + if (wall.frontTexture) { + if (wall.frontTexture.colormap) { + newWall.frontTexture = wall.frontTexture; + } else { + newWall.frontTexture = defaultWallTexture; + } + + } + if (wall.backTexture) { + if (wall.backTexture.colormap) { + newWall.backTexture = wall.backTexture; + } else { + newWall.backTexture = defaultWallTexture; + } + + } + if (wall.thickness) { + newWall.thickness = Dimensioning.cmFromMeasureRaw(wall.thickness); + } + // Adding of a, b, wallType (straight, curved) for walls happened + // with introduction of 0.0.2a + if (Version.isVersionHigherThan(floorplan.version, '0.0.2a')) { + newWall.a = wall.a; + newWall.b = wall.b; + if (wall.wallType === 'CURVED') { + newWall.wallType = WallTypes.CURVED; + } else { + newWall.wallType = WallTypes.STRAIGHT; + } + } + this.__externalWalls.push(newWall); + }); + + + + for (let roomKey in floorplan.rooms) { + let cornerIds = roomKey.split(','); + let roomCorners = []; + let isValidRoom = true; + for (let j = 0; j < cornerIds.length; j++) { + let cornerId = cornerIds[j]; + if (!externalNewCorners[cornerId]) { + isValidRoom = false; + break; + } + roomCorners.push(externalNewCorners[cornerId]); + } + if (isValidRoom) { + let newRoom = new Room(this, roomCorners); + newRoom.updateArea(); + newRoom.isLocked = true; + this.__externalRooms.push(newRoom); + } + } + + // if('boundary' in floorplan){ + // if(floorplan.boundary.points){ + // let cmPoints = []; + // for (let i =0;i < floorplan.boundary.points.length;i++){ + // let point = floorplan.boundary.points[i]; + // let cmPoint = { + // x: Dimensioning.cmFromMeasureRaw(point.x), + // y: Dimensioning.cmFromMeasureRaw(point.y), + // elevation: Dimensioning.cmFromMeasureRaw(point.elevation), + // }; + // cmPoints.push(cmPoint); + // } + + // floorplan.boundary.points = cmPoints; + // this.__boundary = new Boundary(this, floorplan.boundary); + // } + // } + + Configuration.setValue(configDimUnit, currentUnit); + this.dispatchEvent({ type: EVENT_EXTERNAL_FLOORPLAN_LOADED, item: this }); + // this.roomLoadedCallbacks.fire(); + } + + /** + * @deprecated + */ + getFloorTexture(uuid) { + if (uuid in this.floorTextures) { + let floorTexture = this.floorTextures[uuid]; + if (floorTexture.colormap) { + return floorTexture; + } + + } + return null; + } + + /** + * @deprecated + */ + setFloorTexture(uuid, texturePack) { + this.floorTextures[uuid] = texturePack; + } + + /** clear out obsolete floor textures */ + /** + * @deprecated + */ + updateFloorTextures() { + var uuids = Utils.map(this.rooms, function (room) { return room.getUuid(); }); + for (var uuid in this.floorTextures) { + if (!Utils.hasValue(uuids, uuid)) { + delete this.floorTextures[uuid]; + } + } + } + + /** + * Resets the floorplan data to empty + * + * @return {void} + */ + reset() { + var tmpCorners = this.corners.slice(0); + var tmpWalls = this.walls.slice(0); + tmpCorners.forEach((corner) => { + corner.remove(); + }); + tmpWalls.forEach((wall) => { + wall.remove(); + }); + this.corners = []; + this.walls = []; + this.rooms = []; + this.metaroomsdata = {}; + this.__externalRooms = []; + this.__externalCorners = []; + this.__externalWalls = []; + this.dispatchEvent({ type: EVENT_MODE_RESET }); + } + + /** + * @param {Object} + * event + * @listens {EVENT_ROOM_NAME_CHANGED} When a room name is changed and + * updates to metaroomdata + */ + roomNameChanged(e) { + if (this.metaroomsdata) { + this.metaroomsdata[e.item.roomByCornersId] = e.newname; + } + } + + /** + * Returns the center of the floorplan in the y plane + * + * @return {Vector2} center + * @see https://threejs.org/docs/#api/en/math/Vector2 + */ + getCenter() { + return this.getDimensions(true); + } + + /** + * Returns the bounding volume of the full floorplan + * + * @return {Vector3} size + * @see https://threejs.org/docs/#api/en/math/Vector3 + */ + getSize() { + return this.getDimensions(false); + } + + getSize3() { + let size2D = this.getDimensions(); + let size3D = new Vector3(size2D.x, size2D.z, -Number.MAX_VALUE); + for (let i = 0; i < this.corners.length; i++) { + let corner = this.corners[i]; + size3D.z = Math.max(size3D.z, corner.elevation); + } + return size3D; + } + + setSize(newSize) { + let i = 0; + let m = new Matrix4(); + let currentSize = this.getSize3(); + let scale = newSize.clone().divide(currentSize); + m.scale(scale); + for (; i < this.corners.length; i++) { + let corner = this.corners[i]; + let vector = new Vector3(corner.location.x, corner.location.y, corner.elevation); + vector = vector.applyMatrix4(m); + corner.elevation = vector.z; + corner.move(vector.x, vector.y); + } + } + + /** + * Returns the bounding size or the center location of the full floorplan + * + * @param {boolean} + * center If true return the center else the size + * @return {Vector3} size + * @see https://threejs.org/docs/#api/en/math/Vector3 + */ + getDimensions(center) { + center = center || false; // otherwise, get size + let infinity = 1.0e10; + let xMin = infinity; + let xMax = -infinity; + let zMin = infinity; + let zMax = -infinity; + this.corners.forEach((corner) => { + xMin = Math.min(xMin, corner.x); + xMax = Math.max(xMax, corner.x); + zMin = Math.min(zMin, corner.y); + zMax = Math.max(zMax, corner.y); + // if (corner.x < xMin) xMin = corner.x; + // if (corner.x > xMax) xMax = corner.x; + // if (corner.y < zMin) zMin = corner.y; + // if (corner.y > zMax) zMax = corner.y; + }); + // console.log(xMin, xMax, zMin, zMax); + let ret; + if (xMin === infinity || xMax === -infinity || zMin === infinity || zMax === -infinity) { + ret = new Vector3(); + } else { + if (center) { + // center + ret = new Vector3(xMin + ((xMax - xMin) * 0.5), 0, zMin + ((zMax - zMin) * 0.5)); + } else { + // size + ret = new Vector3((xMax - xMin), 0, (zMax - zMin)); + } + } + return ret; + } + + /** + * An internal cleanup method + */ + assignOrphanEdges() { + // kinda hacky + // find orphaned wall segments (i.e. not part of rooms) and + // give them edges + let orphanWalls = []; + this.walls.forEach((wall) => { + // if (!wall.backEdge) { + // let back = new HalfEdge(null, wall, false); + // back.generatePlane(); + // } + // if (!wall.frontEdge) { + // let front = new HalfEdge(null, wall, true); + // front.generatePlane(); + // } + if (!wall.backEdge && !wall.frontEdge) { + let back = new HalfEdge(null, wall, false); + let front = new HalfEdge(null, wall, true); + wall.orphan = true; + back.generatePlane(); + front.generatePlane(); + orphanWalls.push(wall); + } + }); + } + + /** + * Update the floorplan with new rooms, remove old rooms etc. + * //Should include for , updatewalls=null, updaterooms=null + */ + update(updateroomconfiguration = true, updatecorners = null) { + if (!this.__updatesOn) { + return; + } + if (updatecorners != null) { + // console.log('UPDATE CORNER ANGLES ::: ', updatecorners.length); + updatecorners.forEach((corner) => { + corner.updateAngles(); + }); + } + if (!updateroomconfiguration) { + this.dispatchEvent({ type: EVENT_UPDATED, item: this }); + return; + } + + var scope = this; + this.walls.forEach((wall) => { + wall.resetFrontBack(); + }); + + + //Destroy current room objects + this.rooms.forEach((room) => { + room.destroy(); + }); + + + // this.rooms.forEach((room)=>{room.removeEventListener(EVENT_ROOM_NAME_CHANGED, + // scope.roomNameChanged)}); + + var roomCorners = this.findRooms(this.corners); + this.rooms = []; + + + this.corners.forEach((corner) => { + corner.clearAttachedRooms(); + // corner.updateAngles(); + }); + + roomCorners.forEach((corners) => { + var room = new Room(scope, corners); + room.updateArea(); + scope.rooms.push(room); + + room.addEventListener(EVENT_ROOM_NAME_CHANGED, (e) => { scope.roomNameChanged(e); }); + room.addEventListener(EVENT_ROOM_ATTRIBUTES_CHANGED, function (o) { + var room = o.item; + scope.dispatchEvent(o); + if (scope.metaroomsdata[room.roomByCornersId]) { + scope.metaroomsdata[room.roomByCornersId]['name'] = room.name; + } else { + scope.metaroomsdata[room.roomByCornersId] = {}; + scope.metaroomsdata[room.roomByCornersId]['name'] = room.name; + } + }); + + if (scope.metaroomsdata) { + if (scope.metaroomsdata[room.roomByCornersId]) { + room.name = scope.metaroomsdata[room.roomByCornersId]['name']; + } else { + scope.metaroomsdata[room.roomByCornersId] = {}; + scope.metaroomsdata[room.roomByCornersId]['name'] = room.name; + } + } + }); + + this.__roofPlanesForIntersection.length = 0; + this.__floorPlanesForIntersection.length = 0; + this.__wallPlanesForIntersection.length = 0; + + this.__roofPlanesForIntersection.push.apply(this.__roofPlanesForIntersection, this.createRoofPlanes()); + this.__floorPlanesForIntersection.push.apply(this.__floorPlanesForIntersection, this.createFloorPlanes()); + this.__wallPlanesForIntersection.push.apply(this.__wallPlanesForIntersection, this.createWallEdgePlanes()); + + this.__cornerGroups.createGroups(); + + this.assignOrphanEdges(); + this.updateFloorTextures(); + + this.dispatchEvent({ type: EVENT_UPDATED, item: this }); + this.dispatchEvent({ type: EVENT_NEW_ROOMS_ADDED, item: this }); + } + + /** + * Find the "rooms" in our planar straight-line graph. Rooms are set of the + * smallest (by area) possible cycles in this graph. The room corners are always + * ordered in clockwise direction + * + * @param corners + * The corners of the floorplan. + * @returns The rooms, each room as an array of corners. + * @param {Corners[]} + * corners + * @return {Corners[][]} loops + */ + findRooms(corners) { + + function _calculateTheta(previousCorner, currentCorner, nextCorner) { + var theta = Utils.angle2pi(new Vector2(previousCorner.x - currentCorner.x, previousCorner.y - currentCorner.y), new Vector2(nextCorner.x - currentCorner.x, nextCorner.y - currentCorner.y)); + return theta; + } + + function _removeDuplicateRooms(roomArray) { + var results = []; + var lookup = {}; + var hashFunc = function (corner) { + return corner.id; + }; + var sep = '-'; + for (var i = 0; i < roomArray.length; i++) { + // rooms are cycles, shift it around to check uniqueness + var add = true; + var room = roomArray[i]; + for (var j = 0; j < room.length; j++) { + var roomShift = Utils.cycle(room, j); + var str = Utils.map(roomShift, hashFunc).join(sep); + if (lookup.hasOwnProperty(str)) { + add = false; + } + } + if (add) { + results.push(roomArray[i]); + lookup[str] = true; + } + } + return results; + } + + /** + * An internal method to find rooms based on corners and their + * connectivities + */ + function _findTightestCycle(firstCorner, secondCorner) { + var stack = []; + var next = { corner: secondCorner, previousCorners: [firstCorner] }; + var visited = {}; + visited[firstCorner.id] = true; + + while (next) { + // update previous corners, current corner, and visited corners + var currentCorner = next.corner; + visited[currentCorner.id] = true; + + // did we make it back to the startCorner? + if (next.corner === firstCorner && currentCorner !== secondCorner) { + return next.previousCorners; + } + + var addToStack = []; + var adjacentCorners = next.corner.adjacentCorners(); + for (var i = 0; i < adjacentCorners.length; i++) { + var nextCorner = adjacentCorners[i]; + + // is this where we came from? + // give an exception if its the first corner and we aren't + // at the second corner + if (nextCorner.id in visited && !(nextCorner === firstCorner && currentCorner !== secondCorner)) { + continue; + } + + // nope, throw it on the queue + addToStack.push(nextCorner); + } + + var previousCorners = next.previousCorners.slice(0); + previousCorners.push(currentCorner); + if (addToStack.length > 1) { + // visit the ones with smallest theta first + var previousCorner = next.previousCorners[next.previousCorners.length - 1]; + addToStack.sort(function (a, b) { return (_calculateTheta(previousCorner, currentCorner, b) - _calculateTheta(previousCorner, currentCorner, a)); }); + } + + if (addToStack.length > 0) { + // add to the stack + addToStack.forEach((corner) => { + stack.push({ corner: corner, previousCorners: previousCorners }); + }); + } + + // pop off the next one + next = stack.pop(); + } + return []; + } + + // find tightest loops, for each corner, for each adjacent + // TODO: optimize this, only check corners with > 2 adjacents, or + // isolated cycles + var loops = []; + + corners.forEach((firstCorner) => { + firstCorner.adjacentCorners().forEach((secondCorner) => { + loops.push(_findTightestCycle(firstCorner, secondCorner)); + }); + }); + + // remove duplicates + var uniqueLoops = _removeDuplicateRooms(loops); + // remove CW loops + var uniqueCCWLoops = Utils.removeIf(uniqueLoops, Utils.isClockwise); + return uniqueCCWLoops; + } + + /** + * @param {CarbonSheet} + * val + */ + set carbonSheet(val) { + this._carbonSheet = val; + } + + /** + * @return {CarbonSheet} _carbonSheet reference to the instance of + * {@link CarbonSheet} + */ + get carbonSheet() { + return this._carbonSheet; + } + + get roofPlanesForIntersection() { + return this.__roofPlanesForIntersection; + } + + get floorPlanesForIntersection() { + return this.__floorPlanesForIntersection; + } + + get wallPlanesForIntersection() { + return this.__wallPlanesForIntersection; + } + + get cornerGroups() { + return this.__cornerGroups; + } + + get externalCorners() { + return this.__externalCorners; + } + + get externalWalls() { + return this.__externalWalls; + } + + get externalRooms() { + return this.__externalRooms; + } + + get boundary() { + return this.__boundary; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/model/half_edge.ts b/src/blueprint/scripts/model/half_edge.ts new file mode 100644 index 0000000..d8faaeb --- /dev/null +++ b/src/blueprint/scripts/model/half_edge.ts @@ -0,0 +1,1028 @@ +import { EventDispatcher, Vector2, Vector3, Matrix4, Face3, Mesh, Geometry, MeshBasicMaterial, Box3, BufferGeometry, Plane } from 'three'; +import { EVENT_REDRAW, EVENT_MOVED, EVENT_UPDATED, EVENT_UPDATE_TEXTURES, EVENT_DELETED, EVENT_MODIFY_TEXTURE_ATTRIBUTE, EVENT_CHANGED } from '../core/EventSystem.js'; +import { Utils } from '../core/utils.js'; +import { WallTypes, TEXTURE_DEFAULT_REPEAT } from '../core/constants.js'; + +/** + * Half Edges are created by Room. + * + * Once rooms have been identified, Half Edges are created for each interior wall. + * + * A wall can have two half edges if it is visible from both sides. + */ +export class HalfEdge extends EventDispatcher { + /** + * Constructs a half edge. + * @param {Room} room The associated room. Instance of Room + * @param {Wall} wall The corresponding wall. Instance of Wall + * @param {boolean} front True if front side. Boolean value + */ + constructor(room, wall, front) { + super(); + + /** The minimum point in space calculated from the bounds + * @property {Vector3} min The minimum point in space calculated from the bounds + * @type {Vector3} + * @see https://threejs.org/docs/#api/en/math/Vector3 + **/ + this.min = null; + + /** + * The maximum point in space calculated from the bounds + * @property {Vector3} max The maximum point in space calculated from the bounds + * @type {Vector3} + * @see https://threejs.org/docs/#api/en/math/Vector3 + **/ + this.max = null; + + /** + * The center of this half edge + * @property {Vector3} center The center of this half edge + * @type {Vector3} + * @see https://threejs.org/docs/#api/en/math/Vector3 + **/ + this.center = null; + + /** + * Reference to a Room instance + * @property {Room} room Reference to a Room instance + * @type {Room} + **/ + this.room = room || null; + + /** + * Reference to a Wall instance + * @property {Wall} room Reference to a Wall instance + * @type {Wall} + **/ + this.wall = wall; + + this.name = Utils.guide('Edge'); + + /** + * Reference to the next halfedge instance connected to this + * @property {HalfEdge} next Reference to the next halfedge instance connected to this + * @type {HalfEdge} + **/ + this.__next = null; + + /** + * Reference to the previous halfedge instance connected to this + * @property {HalfEdge} prev Reference to the previous halfedge instance connected to this + * @type {HalfEdge} + **/ + this.__prev = null; + + /** + * The offset to maintain for the front and back walls from the midline of a wall + * @property {Number} offset The offset to maintain for the front and back walls from the midline of a wall + * @type {Number} + **/ + this.offset = 0.0; + + /** + * The height of a wall + * @property {Number} height The height of a wall + * @type {Number} + **/ + this.height = 0.0; + + /** + * The plane mesh that will be used for checking intersections of wall items + * @property {Mesh} plane The plane mesh that will be used for checking intersections of wall items + * @type {Mesh} + * @see https://threejs.org/docs/#api/en/objects/Mesh + */ + this.__plane = null; + + this.__exteriorPlane = null; + + /** + * The interior transformation matrix that contains the homogeneous transformation of the plane based on the two corner positions of the wall + * @property {Matrix4} interiorTransform The interior transformation matrix that contains the homogeneous transformation of the plane based on the two corner positions of the wall + * @type {Matrix4} + * @see https://threejs.org/docs/#api/en/math/Matrix4 + */ + this.interiorTransform = new Matrix4(); + + /** + * The inverse of the interior transformation matrix that contains the homogeneous transformation of the plane based on the two corner positions of the wall + * @property {Matrix4} invInteriorTransform The inverse of the interior transformation matrix that contains the homogeneous transformation of the plane based on the two corner positions of the wall + * @type {Matrix4} + * @see https://threejs.org/docs/#api/en/math/Matrix4 + */ + this.invInteriorTransform = new Matrix4(); + + /** + * The exterior transformation matrix that contains the homogeneous transformation of the plane based on the two corner positions of the wall + * @property {Matrix4} exteriorTransform The exterior transformation matrix that contains the homogeneous transformation of the plane based on the two corner positions of the wall + * @type {Matrix4} + * @see https://threejs.org/docs/#api/en/math/Matrix4 + */ + this.exteriorTransform = new Matrix4(); + + /** + * The inverse of the exterior transformation matrix that contains the homogeneous transformation of the plane based on the two corner positions of the wall + * @property {Matrix4} invExteriorTransform The inverse of the exterior transformation matrix that contains the homogeneous transformation of the plane based on the two corner positions of the wall + * @type {Matrix4} + * @see https://threejs.org/docs/#api/en/math/Matrix4 + */ + this.invExteriorTransform = new Matrix4(); + + /** + * This is an array of callbacks to be call when redraw happens + * @depreceated + */ + this.redrawCallbacks = null; + + /** + * Is this an orphan edge? + */ + this.__isOrphan = false; + + /** + * Is this is the front edge or the back edge + * @property {boolean} front Is this is the front edge or the back edge + * @type {boolean} + */ + this.front = front || false; + + this.__vertices = null; + this.__normal = null; //new Vector3(0, 0, 0); + this.__mathPlane = null; + + this.__iStart = null; + this.__iEnd = null; + this.__iCenter = null; + this.__iDistance = 0; + + + this.__eStart = null; + this.__eEnd = null; + this.__eCenter = null; + this.__eDistance = null; + + this.offset = wall.thickness / 2.0; + this.height = wall.height; + + this.__wallMovedEvent = this.__wallMoved.bind(this); + this.__wallUpdatedEvent = this.__wallUpdated.bind(this); + + this.wall.addEventListener(EVENT_MOVED, this.__wallMovedEvent); + this.wall.addEventListener(EVENT_UPDATED, this.__wallUpdatedEvent); + if (this.room) { + this.room.addEventListener(EVENT_CHANGED, this.__wallMovedEvent); + } + if (this.front) { + this.wall.frontEdge = this; + } else { + this.wall.backEdge = this; + } + this.__updateInteriorsExteriors(); + } + + __updateInteriorsExteriors() { + this.__iStart = this.__interiorStart(); + this.__iEnd = this.__interiorEnd(); + this.__iCenter = this.__interiorCenter(); + this.__iDistance = this.__interiorDistance(); + + this.__eStart = this.__exteriorStart(); + this.__eEnd = this.__exteriorEnd(); + this.__eCenter = this.__exteriorCenter(); + this.__eDistance = this.__exteriorDistance(); + } + + __wallMoved(evt) { + let scope = this; + this.__updateInteriorsExteriors(); + // scope.computeTransforms(scope.interiorTransform, scope.invInteriorTransform, scope.interiorStart(), scope.interiorEnd()); + // scope.computeTransforms(scope.exteriorTransform, scope.invExteriorTransform, scope.exteriorStart(), scope.exteriorEnd()); + this.generatePlane(); + scope.dispatchEvent({ type: EVENT_REDRAW, item: scope }); + + } + + __wallUpdated(evt) { + let scope = this; + scope.offset = scope.wall.thickness * 0.5; + this.__updateInteriorsExteriors(); + // scope.computeTransforms(scope.interiorTransform, scope.invInteriorTransform, scope.interiorStart(), scope.interiorEnd()); + // scope.computeTransforms(scope.exteriorTransform, scope.invExteriorTransform, scope.exteriorStart(), scope.exteriorEnd()); + this.generatePlane(); + scope.dispatchEvent({ type: EVENT_REDRAW, item: scope }); + } + + /** + * This generates the invisible planes in the scene that are used for interesection testing for the wall items + */ + __generateEdgePlane(interior = true, plane = null) { + let geometry = new Geometry(); + let v1 = null; + let v2 = null; + + if (interior) { + v1 = this.transformCorner(this.interiorEnd()); + v2 = this.transformCorner(this.interiorStart()); + } + else { + v1 = this.transformCorner(this.exteriorStart()); + v2 = this.transformCorner(this.exteriorEnd()); + } + + let v3 = v2.clone(); + let v4 = v1.clone(); + + let ab = null; + let ac = null; + // v3.y = this.wall.height; + // v4.y = this.wall.height; + + v3.y = this.wall.startElevation; + v4.y = this.wall.endElevation; + + ab = v2.clone().sub(v1); + ac = v3.clone().sub(v1); + this.__vertices = [v1, v2, v3, v4]; + this.__normal = ab.cross(ac).normalize().negate(); + this.__mathPlane = new Plane(); + this.__mathPlane.setFromNormalAndCoplanarPoint(this.__normal.clone(), this.__vertices[0].clone()); + + geometry.vertices = [v1, v2, v3, v4]; + + // geometry.faces.push(new Face3(0, 1, 2)); + // geometry.faces.push(new Face3(0, 2, 3)); + + geometry.faces.push(new Face3(2, 1, 0)); + geometry.faces.push(new Face3(3, 2, 0)); + + geometry.computeFaceNormals(); + geometry.computeBoundingBox(); + + if (!plane) { + plane = new Mesh(new BufferGeometry().fromGeometry(geometry), new MeshBasicMaterial({ visible: true })); + } else { + plane.geometry.dispose(); + plane.geometry = new BufferGeometry().fromGeometry(geometry); //this.__plane.geometry.fromGeometry(geometry); + } + + //The below line was originally setting the plane visibility to false + //Now its setting visibility to true. This is necessary to be detected + //with the raycaster objects to click walls and floors. + plane.visible = true; + plane.edge = this; // js monkey patch + plane.wall = this.wall; + + plane.geometry.computeBoundingBox(); + plane.geometry.computeFaceNormals(); + + + this.computeTransforms(this.interiorTransform, this.invInteriorTransform, this.interiorStart(), this.interiorEnd()); + this.computeTransforms(this.exteriorTransform, this.invExteriorTransform, this.exteriorStart(), this.exteriorEnd()); + + let b3 = new Box3(); + b3.setFromObject(plane); + this.min = b3.min.clone(); + this.max = b3.max.clone(); + this.center = this.max.clone().sub(this.min).multiplyScalar(0.5).add(this.min); + + return plane; + } + + /** + * Calculate the transformation matrix for the edge (front/back) baesd on the parameters. + * @param {Matrix4} transform The matrix reference in which the transformation is stored + * @param {Matrix4} invTransform The inverse of the transform that is stored in the invTransform + * @param {Vector2} start The starting point location + * @param {Vector2} end The ending point location + * @see https://threejs.org/docs/#api/en/math/Matrix4 + * @see https://threejs.org/docs/#api/en/math/Vector2 + */ + computeTransforms(transform, invTransform, start, end) { + let v1 = start; + let v2 = end; + + let angle = Utils.angle(new Vector2(1, 0), new Vector2(v2.x - v1.x, v2.y - v1.y)); + + let tt = new Matrix4(); + let tr = new Matrix4(); + + tt.makeTranslation(-v1.x, 0, -v1.y); + tr.makeRotationY(-angle); + transform.multiplyMatrices(tr, tt); + invTransform.getInverse(transform); + } + + /** Gets the distance from specified point. + * @param {Number} x X coordinate of the point. + * @param {Number} y Y coordinate of the point. + * @returns {Number} The distance. + */ + distanceTo(x, y) { + if (this.wall.wallType === WallTypes.STRAIGHT) { + // x, y, x1, y1, x2, y2 + return Utils.pointDistanceFromLine(new Vector2(x, y), this.interiorStart(), this.interiorEnd()); + } else if (this.wall.wallType === WallTypes.CURVED) { + let p = this._bezier.project({ x: x, y: y }); + let projected = new Vector2(p.x, p.y); + return projected.distanceTo(new Vector2(x, y)); + } + return -1; + } + + /** + * Get the starting corner of the wall this instance represents + * @return {Corner} The starting corner + */ + getStart() { + if (this.front) { + return this.wall.getStart(); + } else { + return this.wall.getEnd(); + } + } + + /** + * Get the ending corner of the wall this instance represents + * @return {Corner} The ending corner + */ + getEnd() { + if (this.front) { + return this.wall.getEnd(); + } else { + return this.wall.getStart(); + } + } + + /** + * If this is the front edge then return the back edge. + * For example in a wall there are two halfedges, i.e one for front and one back. Based on which side this halfedge lies return the opposite {@link HalfEdge} + * @return {HalfEdge} The other HalfEdge + */ + getOppositeEdge() { + if (this.front) { + return this.wall.backEdge; + } else { + return this.wall.frontEdge; + } + } + + __factor(vector, inside = true) { + if (inside) { + return (vector.length() - 10) / vector.length(); + } + return 10 / vector.length(); + } + + /** + * Return the 2D interior location that is at the start. + * @return {Vector2} Return an object with attributes x, y + * @see https://threejs.org/docs/#api/en/math/Vector2 + */ + __interiorStart(debug = false) { + if (debug) { + console.log('*************************'); + console.log('CALCULATE INTERIOR START'); + } + let vec = this.interiorPointByEdges(this.prev, this, debug); //this.interiorPoint(this.prev, true);// + // vec = vec.multiplyScalar(0.5); + // vec = vec.multiplyScalar(this.__factor(vec)); + // vec = vec.clone().normalize().multiplyScalar(vec.length() - 10); + return this.getStart().location.clone().add(vec); + + // let vec = this.halfAngleVector(this.prev, this); + // return new Vector2(this.getStart().x + vec.x, this.getStart().y + vec.y); + + // return {x:this.getStart().x + vec.x, y:this.getStart().y + vec.y}; + } + + /** + * Return the 2D interior location that is at the end. + * @return {Vector2} Return an object with attributes x, y + * @see https://threejs.org/docs/#api/en/math/Vector2 + */ + // + __interiorEnd(debug = false) { + if (debug) { + console.log('*************************'); + console.log('CALCULATE INTERIOR END'); + } + let vec = this.interiorPointByEdges(this, this.next, debug); //this.interiorPoint(this.next, false);// + // vec = vec.multiplyScalar(0.5); + // vec = vec.multiplyScalar(this.__factor(vec)); + return this.getEnd().location.clone().add(vec); + + // let vec = this.halfAngleVector(this, this.next); + // return new Vector2(this.getEnd().x + vec.x, this.getEnd().y + vec.y); + + // return {x:this.getEnd().x + vec.x, y:this.getEnd().y + vec.y}; + } + + /** + * Return the 2D interior location that is at the center/middle. + * @return {Vector2} Return an object with attributes x, y + * @see https://threejs.org/docs/#api/en/math/Vector2 + */ + __interiorCenter() { + if (this.wall.wallType === WallTypes.STRAIGHT) { + // x, y, x1, y1, x2, y2 + return new Vector2((this.interiorStart().x + this.interiorEnd().x) / 2.0, (this.interiorStart().y + this.interiorEnd().y) / 2.0); + } else if (this.wall.wallType === WallTypes.CURVED) { + let c = this.wall.bezier.get(0.5); + return new Vector2(c.x, c.y); + } + return new Vector2((this.interiorStart().x + this.interiorEnd().x) / 2.0, (this.interiorStart().y + this.interiorEnd().y) / 2.0); + } + + /** + * Return the interior distance of the interior wall + * @return {Number} The distance + */ + __interiorDistance() { + let start = this.interiorStart(); + let end = this.interiorEnd(); + if (this.wall.wallType === WallTypes.STRAIGHT) { + return Utils.distance(start, end); + } else if (this.wall.wallType === WallTypes.CURVED) { + return this.wall.bezier.length(); + } + return Utils.distance(start, end); + } + + + /** + * Return the 2D exterior location that is at the start. + * @return {Vector2} Return an object with attributes x, y + * @see https://threejs.org/docs/#api/en/math/Vector2 + */ + __exteriorStart(debug = false) { + // let vec = this.interiorPointByEdges(this.prev, this); //this.interiorPoint(this.prev, true);// + // // vec = vec.multiplyScalar(-0.5); + // // vec = vec.multiplyScalar(-this.__factor(vec, false)); + // return this.getStart().location.clone().add(vec); + + // let vec = this.halfAngleVector(this.prev, this); + // return new Vector2(this.getStart().x - vec.x, this.getStart().y - vec.y); + + return new Vector2(this.getStart().x, this.getStart().y); + } + + /** + * Return the 2D exterior location that is at the end. + * @return {Vector2} Return an object with attributes x, y + * @see https://threejs.org/docs/#api/en/math/Vector2 + */ + __exteriorEnd(debug = false) { + // let vec = this.interiorPointByEdges(this, this.next); //this.interiorPoint(this.next, false);// + // // vec = vec.multiplyScalar(-0.5); + // // vec = vec.multiplyScalar(-this.__factor(vec, false)); + // return this.getEnd().location.clone().add(vec); + + // let vec = this.halfAngleVector(this, this.next); + // return new Vector2(this.getEnd().x - vec.x, this.getEnd().y - vec.y); + + return new Vector2(this.getEnd().x, this.getEnd().y); + } + + /** + * Return the 2D exterior location that is at the center/middle. + * @return {Vector2} Return an object with attributes x, y + * @see https://threejs.org/docs/#api/en/math/Vector2 + */ + __exteriorCenter() { + if (this.wall.wallType === WallTypes.STRAIGHT) { + // x, y, x1, y1, x2, y2 + return new Vector2((this.exteriorStart().x + this.exteriorEnd().x) / 2.0, (this.exteriorStart().y + this.exteriorEnd().y) / 2.0); + } else if (this.wall.wallType === WallTypes.CURVED) { + let c = this.wall.bezier.get(0.5); + return new Vector2(c.x, c.y); + } + return new Vector2((this.exteriorStart().x + this.exteriorEnd().x) / 2.0, (this.exteriorStart().y + this.exteriorEnd().y) / 2.0); + } + + /** + * Return the exterior distance of the exterior wall + * @return {Number} The distance + */ + __exteriorDistance() { + let start = this.exteriorStart(); + let end = this.exteriorEnd(); + if (this.wall.wallType === WallTypes.STRAIGHT) { + return Utils.distance(start, end); + } else if (this.wall.wallType === WallTypes.CURVED) { + return this.wall.bezier.length(); + } + return Utils.distance(start, end); + } + + interiorStart() { + return this.__iStart.clone(); + } + + interiorEnd() { + return this.__iEnd.clone(); + } + + interiorCenter() { + return this.__iCenter.clone(); + } + + interiorDistance() { + return this.__iDistance; + } + + exteriorStart() { + return this.__eStart.clone(); + } + + exteriorEnd() { + return this.__eEnd.clone(); + } + + exteriorCenter() { + return this.__eCenter.clone(); + } + + exteriorDistance() { + return this.__eDistance; + } + + /** Get the corners of the half edge. + * @returns {Corner[]} An array of x,y pairs. + */ + corners() { + return [this.interiorStart(), this.interiorEnd(), this.exteriorEnd(), this.exteriorStart()]; + } + + interiorPointByEdges(v1, v2, debug = false) { + if (!v1 || !v2) { + // throw new Error('Need a valid next or previous edge'); + // console.warn('Need a valid next or previous edge'); + return this.halfAngleVector(v1, v2);//.multiplyScalar(2.0); + } + + let u = null, + v = null, + w = null, + u3 = null, + v3 = null, + w3 = null, + axis3 = null; + let dot = 0; + + // let v2Thickness = v2.wall.thickness; + // let v1Thickness = v1.wall.thickness; + + let v2Thickness = (v2.wall.frontEdge && v2.wall.backEdge) ? v2.wall.thickness * 0.5 : v2.wall.thickness; + let v1Thickness = (v1.wall.frontEdge && v1.wall.backEdge) ? v1.wall.thickness * 0.5 : v1.wall.thickness; + + u = v1.getEnd().location.clone().sub(v1.getStart().location).normalize(); + v = v2.getEnd().location.clone().sub(v2.getStart().location).normalize(); + + u = u.multiplyScalar(v2Thickness); + v = v.multiplyScalar(v1Thickness); + // w = u.clone().add(v); + + u3 = new Vector3(u.x, u.y, 0.0); + v3 = new Vector3(v.x, v.y, 0.0); + // w3 = new Vector3(w.x, w.y, 0.0); + axis3 = u3.clone().normalize().cross(v3.clone().normalize()); + + if (axis3.z < 0) { + v = v.negate();//.multiplyScalar(-1); + } + else { + u = u.negate();//.multiplyScalar(-1); + } + + u3.x = u.x; + u3.y = u.y; + v3.x = v.x; + v3.y = v.y; + + dot = u.clone().normalize().dot(v.clone().normalize()); + + if (dot < -0.1) { + let uvAngle = Math.acos(dot); + let offsetTheta = uvAngle - (Math.PI * 0.5); + let v_temp = v.clone(); + if (dot < (1e-6 - 1.0)) { + v3.x -= 1e-2; + v3.y -= 1e-2; + v.x = v3.x; + v.y = v3.y; + axis3 = v3.clone().normalize().cross(u3.clone().normalize()).negate().normalize(); + } + v3 = v3.clone().applyAxisAngle(axis3.clone().normalize(), offsetTheta); + v.x = v3.x; + v.y = v3.y; + if (debug) { + console.log('AXIS OF ROTATION ::: ', axis3); + console.log('U VECTOR ::: ', u); + console.log('V BEFORE ::: ', v_temp); + console.log('V AFTER ::: ', v); + console.log('DOT PRODUCT ::: ', dot); + console.log('ANGLE UV ::: ', (uvAngle * 180) / Math.PI); + console.log('OFFSET THETA ::: ', (offsetTheta * 180) / Math.PI); + } + } + + w = u.clone().add(v); + // dot = u.clone().normalize().dot(v.clone().normalize()); + // let abs_dot = -dot;//Equivalent to 180 - degrees(math.cos(dot)) + // let abs_dot_acos = Math.acos(abs_dot); + // // let magnitude = Math.sqrt((Math.pow(u.length(),2) + Math.pow(v.length(), 2)) + (2 * u.length() * v.length() * abs_dot)); + // let magnitude = ((u.length() ** 2 + v.length() ** 2) + (2 * u.length() * v.length() * abs_dot)) ** 0.5; + // let theta = Math.asin((v.length() * Math.sin(abs_dot_acos)) / magnitude); + // w = (u.clone().rotateAround(new Vector2(), -theta)).normalize().multiplyScalar(magnitude); + + if (debug) { + console.log('=============================================='); + console.log('F :: ', u); + console.log('G :: ', v); + console.log('F FORCE :: ', u.length()); + console.log('G FORCE :: ', v.length()); + console.log('DOT PRODUCT VALUE :: ', dot); + console.log('ANGLE BETWEEN F AND G :: ', (Math.acos(dot) * 180.0) / Math.PI); + console.log('VECTOR ADDITION W LENGTH :: ', w.length()); + console.log('----------------------------------------------'); + } + + return w; + } + + /** + * This is the resultant of two forces at obtuse angles (angle > 90) + * So implement the cosine law for the actual vector calculation; + */ + interiorPointByEdges_V2(v1, v2, debug = false) { + if (!v1 || !v2) { + // throw new Error('Need a valid next or previous edge'); + // console.warn('Need a valid next or previous edge'); + return this.halfAngleVector(v1, v2).multiplyScalar(2.0); + } + + let f = null, + g = null, + o_f = null, + o_g = null, + w = null, + f3 = null, + g3 = null, + axis3 = null; + let dot = 0, abs_dot = 0.0, dot_acos = 0.0, abs_dot_acos = 0.0, magnitude = 0.0, theta = 0.0; + + f = v1.getEnd().location.clone().sub(v1.getStart().location).normalize(); + g = v2.getEnd().location.clone().sub(v2.getStart().location).normalize(); + o_f = f.clone(); + o_g = g.clone(); + + dot = f.dot(g); + abs_dot = -dot;//Equivalent to 180 - degrees(math.cos(dot)) + + if (dot > (1.0 - 1e-6) || dot < (1e-6 - 1.0)) { + w = f.clone().normalize().multiplyScalar(Math.min(v2.wall.thickness, v1.wall.thickness)); + w = w.rotateAround(new Vector2(0, 0), -Math.PI * 0.5); + if (debug) { + console.log('DOT PRODUCT TRIGGER ', dot); + } + return w; + } + + f3 = new Vector3(f.x, f.y, 0.0); + g3 = new Vector3(g.x, g.y, 0.0); + axis3 = f3.clone().cross(g3); + + // if(axis3.z < 0){ + // f = f.negate();//.multiplyScalar(-1); + // } + // else{ + // g = g.negate();//.multiplyScalar(-1); + // } + + f = f.multiplyScalar(v2.wall.thickness); + g = g.multiplyScalar(v1.wall.thickness); + o_f = o_f.multiplyScalar(v2.wall.thickness); + o_g = o_g.multiplyScalar(v1.wall.thickness); + + + dot_acos = Math.acos(dot); + abs_dot_acos = Math.acos(abs_dot); + // magnitude = Math.sqrt((Math.pow(f.length(),2) + Math.pow(g.length(), 2)) + (2 * f.length() * g.length() * abs_dot)); + magnitude = ((f.length() ** 2 + g.length() ** 2) + (2 * f.length() * g.length() * abs_dot)) ** 0.5; + theta = Math.asin((g.length() * Math.sin(abs_dot_acos)) / magnitude); + w = (f.clone().rotateAround(new Vector2(), -theta)).normalize().multiplyScalar(magnitude); + + if (debug) { + let w3 = f3.clone().add(g3); + let angle3 = w3.angleTo(f3); + console.log('=============================================='); + console.log('F :: ', f); + console.log('G :: ', g); + console.log('F FORCE :: ', f.length()); + console.log('G FORCE :: ', g.length()); + console.log('DOT PRODUCT VALUE :: ', dot); + console.log('ABS DOT PRODUCT VALUE :: ', abs_dot); + console.log('ANGLE ::: ', (angle3 * 180.0) / Math.PI); + console.log('ANGLE3 (sum f + g) ', (theta * 180.0) / Math.PI); + console.log('CROSS AXIS :: ', axis3); + console.log('MAGNITUDE VALUE : ', magnitude); + console.log('VECTOR ADDITION W LENGTH :: ', w.length()); + console.log('----------------------------------------------'); + } + return w; + } + + /** + * + * @param {HalfEdge} v1 + * @param {HalfEdge} v2 + * @description Get the point inside the room for interior ends Calculation + * @returns {Vector2} + */ + + interiorPointByEdgesOLD(v1, v2) { + let directionSelf = null, + directionOther = null; + if (!v1 || !v2) { + if (!v1) { + directionSelf = this.getEnd().location.clone().sub(this.getStart().location).normalize(); + directionSelf = directionSelf.multiplyScalar(this.wall.thickness); + directionSelf = directionSelf.rotateAround(new Vector2(), -0.785398); //Rotate by 45 degrees CW + } else if (!v2) { + directionSelf = this.getStart().location.clone().sub(this.getEnd().location).normalize(); + directionSelf = directionSelf.multiplyScalar(this.wall.thickness); + directionSelf = directionSelf.rotateAround(new Vector2(), 0.785398); //Rotate by 45 degrees CW + } + return directionSelf; + } + + let d1 = null, + d2 = null; + let dot = 0; + + d1 = v1.getEnd().location.clone().sub(v1.getStart().location).normalize(); + d2 = v2.getStart().location.clone().sub(v2.getEnd().location).normalize(); + dot = d1.dot(d2); + + if (dot > 1.0 - 1e-6 || dot < 1e-6 - 1.0) { + let maxThickness = Math.max(v1.wall.thickness, v2.wall.thickness); + d1 = d1.multiplyScalar(maxThickness); + d2 = d2.multiplyScalar(maxThickness); + } else { + + d1 = d1.multiplyScalar(v2.wall.thickness); + d2 = d2.multiplyScalar(v1.wall.thickness); + } + return d1.add(d2); + + // directionSelf = v2.getEnd().location.clone().sub(v2.getStart().location).normalize(); + // directionOther = v1.getStart().location.clone().sub(v1.getEnd().location).normalize(); + + // directionOther = directionOther.multiplyScalar(v2.wall.thickness); + // directionSelf = directionSelf.multiplyScalar(v1.wall.thickness); + // return directionSelf.add(directionOther); + } + + /** + * + * @param {HalfEdge} v1 + * @param {HalfEdge} v2 + * @description Get the point inside the room for interior ends Calculation + * @returns {Vector2} + */ + + interiorPoint(nextOrPrev, isFromStart = true) { + let directionOther = null, + directionSelf = null; + if (!nextOrPrev) { + if (isFromStart) { + directionSelf = this.getEnd().location.clone().sub(this.getStart().location).normalize(); + directionSelf = directionSelf.multiplyScalar(this.wall.thickness); + directionSelf = directionSelf.rotateAround(new Vector2(), -0.785398); //Rotate by 45 degrees CW + } else { + directionSelf = this.getStart().location.clone().sub(this.getEnd().location).normalize(); + directionSelf = directionSelf.multiplyScalar(this.wall.thickness); + directionSelf = directionSelf.rotateAround(new Vector2(), 0.785398); //Rotate by 45 degrees CW + } + return directionSelf; + } + if (isFromStart) { + directionSelf = this.getEnd().location.clone().sub(this.getStart().location).normalize(); + // Two connected edges have their end corners that will be either start or end in one, + // and vice-versa for the other one + directionOther = nextOrPrev.getStart().location.clone().sub(nextOrPrev.getEnd().location).normalize(); + } else { + directionSelf = this.getStart().location.clone().sub(this.getEnd().location).normalize(); + // Two connected edges have their end corners that will be either start or end in one, + // and vice-versa for the other one + directionOther = nextOrPrev.getEnd().location.clone().sub(nextOrPrev.getStart().location).normalize(); + } + + directionOther = directionOther.multiplyScalar(this.wall.thickness); + directionSelf = directionSelf.multiplyScalar(nextOrPrev.wall.thickness); + return directionSelf.add(directionOther); + } + + /** + * Gets CCW angle from v1 to v2 + * @param {Vector2} v1 The point a + * @param {Vector2} v1 The point b + * @return {Object} contains keys x and y with number representing the halfAngles + */ + halfAngleVector(v1, v2) { + let v1startX = 0.0, + v1startY = 0.0, + v1endX = 0.0, + v1endY = 0.0; + let v2startX = 0.0, + v2startY = 0.0, + v2endX = 0.0, + v2endY = 0.0; + + // make the best of things if we dont have prev or next + if (!v1) { + v1startX = v2.getStart().x - (v2.getEnd().x - v2.getStart().x); + v1startY = v2.getStart().y - (v2.getEnd().y - v2.getStart().y); + + v1endX = v2.getStart().x; + v1endY = v2.getStart().y; + } else { + v1startX = v1.getStart().x; + v1startY = v1.getStart().y; + v1endX = v1.getEnd().x; + v1endY = v1.getEnd().y; + } + + if (!v2) { + v2startX = v1.getEnd().x; + v2startY = v1.getEnd().y; + v2endX = v1.getEnd().x + (v1.getEnd().x - v1.getStart().x); + v2endY = v1.getEnd().y + (v1.getEnd().y - v1.getStart().y); + } else { + v2startX = v2.getStart().x; + v2startY = v2.getStart().y; + v2endX = v2.getEnd().x; + v2endY = v2.getEnd().y; + } + + // CCW angle between edges + let theta = Utils.angle2pi(new Vector2(v1startX - v1endX, v1startY - v1endY), new Vector2(v2endX - v1endX, v2endY - v1endY)); + + // cosine and sine of half angle + let cs = Math.cos(theta / 2.0); + let sn = Math.sin(theta / 2.0); + + // rotate v2 + let v2dx = v2endX - v2startX; + let v2dy = v2endY - v2startY; + + let vx = v2dx * cs - v2dy * sn; + let vy = v2dx * sn + v2dy * cs; + + // normalize + let mag = Utils.distance(new Vector2(0, 0), new Vector2(vx, vy)); + let desiredMag = (this.wall.thickness * 0.5) / sn; + let scalar = desiredMag / mag; + + let halfAngleVector = new Vector2(vx * scalar, vy * scalar); //{ x: vx * scalar, y: vy * scalar }; // + + return halfAngleVector; + } + + + setTextureMaps(texturePack) { + if (!texturePack.color) { + texturePack.color = '#FFFFFF'; + } + if (!texturePack.repeat) { + texturePack.repeat = TEXTURE_DEFAULT_REPEAT; //For every TEXTURE_DEFAULT_REPEAT cms + } + + if (this.front) { + this.wall.frontTexture = texturePack; + } else { + this.wall.backTexture = texturePack; + } + this.dispatchEvent({ type: EVENT_UPDATE_TEXTURES, item: this }); + } + + setTextureMapAttribute(attribute, value) { + if (attribute && value) { + let texturePack = this.getTexture(); + texturePack[attribute] = value; + this.dispatchEvent({ type: EVENT_MODIFY_TEXTURE_ATTRIBUTE, item: this, attribute: attribute, value: value }); + } + } + + /** + * Two separate textures are used for the walls. Based on which side of the wall this {HalfEdge} refers the texture is returned + * @return {Object} front/back Two separate textures are used for the walls. Based on which side of the wall this {@link HalfEdge} refers the texture is returned + */ + getTexture() { + if (this.front) { + return this.wall.frontTexture; + } else { + return this.wall.backTexture; + } + } + + /** + * Set a Texture to the wall. Based on the edge side as front or back the texture is applied appropriately to the wall + * @deprecated + * @param {String} textureUrl The path to the texture image + * @param {boolean} textureStretch Can the texture stretch? If not it will be repeated + * @param {Number} textureScale The scale value using which the number of repetitions of the texture image is calculated + * @emits {EVENT_REDRAW} + */ + setTexture(textureUrl, textureStretch, textureScale) { + let texture = { url: textureUrl, stretch: textureStretch, scale: textureScale }; + if (this.front) { + this.wall.frontTexture = texture; + } else { + this.wall.backTexture = texture; + } + + //this.redrawCallbacks.fire(); + this.dispatchEvent({ type: EVENT_REDRAW, item: this }); + } + + /** + * Emit the redraw event + * @emits {EVENT_REDRAW} + */ + dispatchRedrawEvent() { + this.dispatchEvent({ type: EVENT_REDRAW, item: this }); + } + + /** + * Transform the {@link Corner} instance to a Vector3 instance using the x and y position returned as x and z + * @param {Corner} corner + * @return {Vector3} + * @see https://threejs.org/docs/#api/en/math/Vector3 + */ + transformCorner(corner) { + return new Vector3(corner.x, 0, corner.y); + } + + generatePlane() { + this.__plane = this.__generateEdgePlane(true, this.__plane); + // this.__exteriorPlane = this.__plane; + // if (this.wall.start.getAttachedRooms().length < 2 || this.wall.end.getAttachedRooms().length < 2) { + // this.__exteriorPlane = this.__generateEdgePlane(false, this.__exteriorPlane); + // } + // else{ + // this.__exteriorPlane = null; + // } + } + + destroy() { + this.__plane = null; + // this.wall = null; + this.__isOrphan = true; + this.wall.removeEventListener(EVENT_MOVED, this.__wallMovedEvent); + this.wall.removeEventListener(EVENT_UPDATED, this.__wallUpdatedEvent); + this.dispatchEvent({ type: EVENT_DELETED, edge: this }); + } + + get vertices() { + return this.__vertices; + } + + get normal() { + return this.__normal; + } + + get isOrphan() { + return this.__isOrphan; + } + + get plane() { + return this.__plane; + } + + get exteriorPlane() { + return this.__exteriorPlane; + } + + get prev() { + return this.__prev; + } + + set prev(halfEdge) { + this.__prev = halfEdge; + this.__updateInteriorsExteriors(); + } + + get next() { + return this.__next; + } + + set next(halfEdge) { + this.__next = halfEdge; + this.__updateInteriorsExteriors(); + } + +} + +export default HalfEdge; \ No newline at end of file diff --git a/src/blueprint/scripts/model/model.ts b/src/blueprint/scripts/model/model.ts new file mode 100644 index 0000000..7b2fa35 --- /dev/null +++ b/src/blueprint/scripts/model/model.ts @@ -0,0 +1,146 @@ +import { EVENT_LOADED, EVENT_LOADING, EVENT_ITEM_REMOVED, EVENT_NEW_PARAMETRIC_ITEM, EVENT_NEW_ITEM, EVENT_MODE_RESET, EVENT_EXTERNAL_FLOORPLAN_LOADED } from '../core/EventSystem.js'; +import { EventDispatcher } from 'three'; +import { Floorplan } from './floorplan'; +import { Utils } from '../core/utils.js'; +import { Factory } from '../items/factory.js'; + +/** + * 模型是一个抽象概念,具有构建平面图的数据。 它连接了一个 {@link Floorplan} 和一个 {@link Scene} + */ +export class Model extends EventDispatcher { + __floorplan; + __roomItems; + textureDir; + scene; + /** Constructs a new model. + * @param textureDir The directory containing the textures. + */ + constructor(textureDir: string) { + super(); + this.__floorplan = new Floorplan(); + this.__roomItems = []; + this.textureDir = textureDir; + } + + switchWireframe(flag) { + this.scene.switchWireframe(flag); + } + + loadSerialized(json) { + // TODO: better documentation on serialization format. + // TODO: a much better serialization format. + this.dispatchEvent({ type: EVENT_LOADING, item: this }); + // this.roomLoadingCallbacks.fire(); + + var data = JSON.parse(json); + this.newDesign(data.floorplan, data.items); + this.dispatchEvent({ type: EVENT_LOADED, item: this, }); + } + + loadLockedSerialized(json) { + var data = JSON.parse(json); + this.floorplan.loadLockedFloorplan(data.floorplan); + this.dispatchEvent({ type: EVENT_EXTERNAL_FLOORPLAN_LOADED, item: this, }); + } + + exportSerialized() { + let floorplanJSON = this.floorplan.saveFloorplan(); + let roomItemsJSON = []; + this.__roomItems.forEach((item) => { + // item.updateMetadataExplicit(); + roomItemsJSON.push(item.metadata); + }); + var room = { floorplan: floorplanJSON, items: roomItemsJSON }; + return JSON.stringify(room); + } + + newDesign(floorplan, items) { + this.__roomItems = []; + this.floorplan.loadFloorplan(floorplan); + for (let i = 0; i < items.length; i++) { + let itemMetaData = items[i]; + let itemType = itemMetaData.itemType; + let item = new (Factory.getClass(itemType))(itemMetaData, this, itemMetaData.id); + this.__roomItems.push(item); + } + } + + reset() { + this.floorplan.reset(); + this.__roomItems.length = 0; + this.dispatchEvent({ type: EVENT_MODE_RESET }); + } + + /** Gets the items. + * @returns The items. + */ + getItems() { + return this.__roomItems; + } + + /** Gets the count of items. + * @returns The count. + */ + itemCount() { + return this.__roomItems.length; + } + + /** Removes all items. */ + clearItems() { + let scope = this; + this.__roomItems.forEach((item) => { + scope.removeItem(item, false); + }); + this.__roomItems = []; + } + + /** + * Removes an item. + * @param item The item to be removed. + * @param dontRemove If not set, also remove the item from the items list. + */ + removeItem(item, keepInList) { + // use this for item meshes + this.remove(item, keepInList); + this.dispatchEvent({ type: EVENT_ITEM_REMOVED, item: item }); + } + + /** Removes a non-item, basically a mesh, from the scene. + * @param mesh The mesh to be removed. + */ + remove(roomItem, keepInList) { + keepInList = keepInList || false; + if (!keepInList) { + roomItem.destroy(); + Utils.removeValue(this.__roomItems, roomItem); + } + } + + /** + * Creates an item and adds it to the scene. + * @param itemType The type of the item given by an enumerator. + * @param fileName The name of the file to load. + * @param metadata TODO + * @param position The initial position. + * @param rotation The initial rotation around the y axis. + * @param scale The initial scaling. + * @param fixed True if fixed. + * @param newItemDefinitions - Object with position and 'edge' attribute if it is a wall item + */ + addItemByMetaData(metadata) { + //TODO + this.dispatchEvent({ type: EVENT_NEW_ITEM, item: null }); + } + addItem(item) { + this.__roomItems.push(item); + this.dispatchEvent({ type: EVENT_NEW_ITEM, item: item }); + } + + get roomItems() { + return this.__roomItems; + } + + get floorplan() { + return this.__floorplan; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/model/room.ts b/src/blueprint/scripts/model/room.ts new file mode 100644 index 0000000..fb9f7e5 --- /dev/null +++ b/src/blueprint/scripts/model/room.ts @@ -0,0 +1,678 @@ +import { EventDispatcher, Vector2, Vector3, Face3, Geometry, Shape, ShapeGeometry, Mesh, MeshBasicMaterial, DoubleSide, Box3 } from 'three'; +import { Plane, Matrix4 } from 'three'; +import { EVENT_CHANGED, EVENT_ROOM_ATTRIBUTES_CHANGED, EVENT_MOVED, EVENT_UPDATED, EVENT_UPDATE_TEXTURES, EVENT_CORNER_ATTRIBUTES_CHANGED, EVENT_MODIFY_TEXTURE_ATTRIBUTE } from '../core/EventSystem.js'; +import { Region } from '../core/utils.js'; +import { WallTypes, TEXTURE_DEFAULT_REPEAT, defaultFloorTexture } from '../core/constants.js'; +import { Utils } from '../core/utils.js'; +import { HalfEdge } from './half_edge.js'; +import { BufferGeometry } from 'three/build/three.module'; +/** Default texture to be used if nothing is provided. */ +export const defaultRoomTexture = { url: 'rooms/textures/hardwood.png', scale: 400 }; + +/** + * A Room is the combination of a Floorplan with a floor plane. + */ +export class Room extends EventDispatcher { + _name = 'A New Room'; + min = null; + max = null; + center = null; + area = 0.0; + areaCenter = null; + _polygonPoints = []; + __walls = []; + + floorplan; + _corners; + interiorCorners = []; + interiorCorners3D = []; + floorRectangleSize = new Vector2(); + edgePointer = null; + floorPlane = null; + roofPlane = null; + customTexture = false; + floorChangeCallbacks = null; + + __destroyed = false; + + __isLocked = false; + __roomUpdatedEvent; + __wallsChangedEvent; + _roomByCornersId; + /** + * ordered CCW + */ + constructor(floorplan, corners) { + super(); + this._name = 'A New Room'; + this.min = null; + this.max = null; + this.center = null; + this.area = 0.0; + this.areaCenter = null; + this._polygonPoints = []; + this.__walls = []; + + this.floorplan = floorplan; + this._corners = corners; + this.interiorCorners = []; + this.interiorCorners3D = []; + this.floorRectangleSize = new Vector2(); + this.edgePointer = null; + this.floorPlane = null; + this.roofPlane = null; + this.customTexture = false; + this.floorChangeCallbacks = null; + + this.__destroyed = false; + + this.__isLocked = false; + + this.updateWalls(); + this.updateInteriorCorners(); + this.generateFloorPlane(); + this.generateRoofPlane(); + + let cornerids = []; + let i = 0; + + this.__roomUpdatedEvent = this._roomUpdated.bind(this); + this.__wallsChangedEvent = this.__wallsChanged.bind(this); + + for (; i < this.corners.length; i++) { + let c = this.corners[i]; + c.attachRoom(this); + cornerids.push(c.id); + c.addEventListener(EVENT_MOVED, this.__roomUpdatedEvent); + c.addEventListener(EVENT_CORNER_ATTRIBUTES_CHANGED, this.__roomUpdatedEvent); + } + + for (i = 0; i < this.__walls.length; i++) { + let wall = this.__walls[i]; + // wall.addRoom(this); + wall.addEventListener(EVENT_UPDATED, this.__wallsChangedEvent); + } + this._roomByCornersId = cornerids.join(','); + } + + __wallsChanged(evt) { + this.dispatchEvent({ type: EVENT_CHANGED, item: this }); + this.updateInteriorCorners(); + } + + _roomUpdated() { + this.updateInteriorCorners(); + this.updateArea(); + this.generateFloorPlane(); + this.generateRoofPlane(); + } + + destroy() { + let i = 0; + for (; i < this.corners.length; i++) { + let c = this.corners[i]; + c.removeEventListener(EVENT_MOVED, this.__roomUpdatedEvent); + } + for (i = 0; i < this.__walls.length; i++) { + let wall = this.__walls[i]; + wall.removeEventListener(EVENT_UPDATED, this.__wallsChangedEvent); + } + this.__destroyed = true; + this.dispatchEvent({ type: EVENT_CHANGED, item: this }); + } + + __getOrderedCorners(wall) { + let i = this.corners.indexOf(wall.start); + let j = this.corners.indexOf(wall.end); + if (i === -1 || j === -1) { + return null; + } + let start = this.corners[Math.max(i, j)].location.clone(); + let end = this.corners[Math.min(i, j)].location.clone(); + if ((i === 0 && j === this.corners.length - 1) || (j === 0 && i === this.corners.length - 1)) { + end = this.corners[this.corners.length - 1].location.clone(); + start = this.corners[0].location.clone(); + } + return { 'start': start, 'end': end }; + } + + getWallDirection(wall) { + let orderedCorners = this.__getOrderedCorners(wall); + if (orderedCorners === null) { + return null; + } + let start = orderedCorners['start']; + let end = orderedCorners['end']; + let vect = end.sub(start); + let vect3 = new Vector3(vect.x, vect.y, 0); + return vect3.normalize().clone(); + } + + getWallOutDirection(wall) { + let vect3 = this.getWallDirection(wall); //new Vector3(vect.x, vect.y, 0); + if (vect3 === null) { + return null; + } + // console.log('WALL DIRECTION : ', vect3); + vect3 = vect3.applyAxisAngle(new Vector3(0, 0, 1), Math.PI * 0.5); + // console.log('WALL NORMAL DIRECTION : ', vect3); + return vect3.normalize(); + } + + getWallStart(wall) { + let orderedCorners = this.__getOrderedCorners(wall); + if (orderedCorners === null) { + return null; + } + return orderedCorners['start']; + } + + getWallEnd(wall) { + let orderedCorners = this.__getOrderedCorners(wall); + if (orderedCorners === null) { + return null; + } + return orderedCorners['end']; + } + + getWallPlane(wall) { + let orderedCorners = this.__getOrderedCorners(wall); + if (orderedCorners === null) { + return null; + } + let planeLocation = wall.start.location.clone().add(wall.end.location).multiplyScalar(0.5); + let normal = this.getWallOutDirection(wall); + let plane = new Plane(normal, 0); + let m = new Matrix4(); + m.makeTranslation(planeLocation.x, planeLocation.y, 0); + // plane = plane.applyMatrix4(m); + plane.setFromNormalAndCoplanarPoint(normal, new Vector3(planeLocation.x, planeLocation.y, 0)); + return plane; + } + + roomIdentifier() { + let cornerids = []; + this.corners.forEach((corner) => { + cornerids.push(corner.id); + }); + let ids = cornerids.join(','); + return ids; + } + + getUuid() { + let cornerUuids = Utils.map(this.corners, function (c) { return c.id; }); + cornerUuids.sort(); + return cornerUuids.join(); + } + + fireOnFloorChange(callback) { + this.floorChangeCallbacks.add(callback); + } + + setRoomWallsTexture(textureUrl, textureStretch, textureScale) { + let edge = this.edgePointer; + let iterateWhile = true; + edge.setTexture(textureUrl, textureStretch, textureScale); + while (iterateWhile) { + if (edge.next === this.edgePointer) { + break; + } else { + edge = edge.next; + } + edge.setTexture(textureUrl, textureStretch, textureScale); + } + } + + /** + * @deprecated + * textureStretch always true, just an argument for consistency with walls + */ + setTexture(textureUrl, textureStretch, textureScale) { + let uuid = this.getUuid(); + this.floorplan.setFloorTexture(uuid, textureUrl, textureScale); + this.dispatchEvent({ type: EVENT_CHANGED, item: this }); + // this.floorChangeCallbacks.fire(); + } + + setRoomWallsTextureMaps(texturePack) { + let edge = this.edgePointer; + let iterateWhile = true; + if (!texturePack.color) { + texturePack.color = '#FFFFFF'; + } + if (!texturePack.repeat) { + texturePack.repeat = TEXTURE_DEFAULT_REPEAT; //For every TEXTURE_DEFAULT_REPEAT cms + } + edge.setTextureMaps(texturePack); + while (iterateWhile) { + if (edge.next === this.edgePointer) { + break; + } else { + edge = edge.next; + } + edge.setTextureMaps(texturePack); + } + } + + + setRoomWallsTextureMapsAttribute(attribute, value) { + let edge = this.edgePointer; + let iterateWhile = true; + edge.setTextureMapAttribute(attribute, value); + + while (iterateWhile) { + if (edge.next === this.edgePointer) { + break; + } else { + edge = edge.next; + } + edge.setTextureMapAttribute(attribute, value); + } + } + + setTextureMaps(texturePack) { + let uuid = this.getUuid(); + if (!texturePack.color) { + texturePack.color = '#FFFFFF'; + } + if (!texturePack.repeat) { + texturePack.repeat = TEXTURE_DEFAULT_REPEAT; //For every TEXTURE_DEFAULT_REPEAT cms + } + this.floorplan.setFloorTexture(uuid, texturePack); + this.dispatchEvent({ type: EVENT_UPDATE_TEXTURES, item: this }); + } + + setTextureMapAttribute(attribute, value) { + if (attribute && value) { + let uuid = this.getUuid(); + let texturePack = this.getTexture(); + texturePack[attribute] = value; + this.floorplan.setFloorTexture(uuid, texturePack); + this.dispatchEvent({ type: EVENT_MODIFY_TEXTURE_ATTRIBUTE, item: this, attribute: attribute, value: value }); + } + } + + getTexture() { + let uuid = this.getUuid(); + let tex = this.floorplan.getFloorTexture(uuid); + if (!tex) { + this.floorplan.setFloorTexture(uuid, defaultFloorTexture); + } + return tex || defaultFloorTexture; + } + + generateRoofPlane() { + // setup texture + let geometry = new Geometry(); + + this.corners.forEach((corner) => { + let vertex = new Vector3(corner.location.x, corner.elevation, corner.location.y); + geometry.vertices.push(vertex); + }); + for (let i = 2; i < geometry.vertices.length; i++) { + let face = new Face3(0, i - 1, i); + geometry.faces.push(face); + } + // geometry.computeBoundingBox(); + // geometry.computeFaceNormals(); + + if (!this.roofPlane) { + let buffGeometry = new BufferGeometry().fromGeometry(geometry); + this.roofPlane = new Mesh(buffGeometry, new MeshBasicMaterial({ side: DoubleSide, visible: false })); + } else { + this.roofPlane.geometry.dispose(); + this.roofPlane.geometry = new BufferGeometry().fromGeometry(geometry); //this.roofPlane.geometry.fromGeometry(geometry); + } + this.roofPlane.geometry.computeBoundingBox(); + this.roofPlane.geometry.computeFaceNormals(); + + this.roofPlane.room = this; + } + + generateFloorPlane() { + let points = []; + this.interiorCorners.forEach((corner) => { + points.push(new Vector2(corner.x, corner.y)); + }); + let shape = new Shape(points); + let geometry = new ShapeGeometry(shape); + + if (!this.floorPlane) { + let buffGeometry = new BufferGeometry().fromGeometry(geometry); + this.floorPlane = new Mesh(buffGeometry, new MeshBasicMaterial({ side: DoubleSide, visible: false })); + } else { + this.floorPlane.geometry.dispose(); + this.floorPlane.geometry = new BufferGeometry().fromGeometry(geometry); //this.floorPlane.geometry.fromGeometry(geometry); + } + + //The below line was originally setting the plane visibility to false + //Now its setting visibility to true. This is necessary to be detected + //with the raycaster objects to click walls and floors. + this.floorPlane.visible = true; + this.floorPlane.rotation.set(Math.PI / 2, 0, 0); + this.floorPlane.geometry.computeBoundingBox(); + this.floorPlane.geometry.computeFaceNormals(); + this.floorPlane.room = this; // js monkey patch + + let b3 = new Box3(); + b3.setFromObject(this.floorPlane); + this.min = b3.min.clone(); + this.max = b3.max.clone(); + this.center = this.max.clone().sub(this.min).multiplyScalar(0.5).add(this.min); + } + + cycleIndex(index) { + if (index < 0) { + return index += this.corners.length; + } else { + return index % this.corners.length; + } + } + + pointInRoom(pt) { + let polygon = []; + this.corners.forEach((corner) => { + let co = new Vector2(corner.x, corner.y); + polygon.push(co); + }); + return Utils.pointInPolygon2(pt, polygon); + } + + updateInteriorCorners() { + let minB = new Vector2(Number.MAX_VALUE, Number.MAX_VALUE); + let maxB = new Vector2(-Number.MAX_VALUE, -Number.MAX_VALUE); + let edge = this.edgePointer; + let iterateWhile = true; + this.interiorCorners = []; + this.interiorCorners3D = []; + while (iterateWhile) { + let iStart = edge.interiorStart(); + let cStart = edge.getStart(); + minB.x = Math.min(iStart.x, minB.x); + minB.y = Math.min(iStart.y, minB.y); + maxB.x = Math.max(maxB.x, iStart.x); + maxB.y = Math.max(maxB.y, iStart.y); + this.interiorCorners.push(iStart); + this.interiorCorners3D.push(new Vector3(iStart.x, cStart.elevation, iStart.y)); + edge.generatePlane(); + if (edge.next === this.edgePointer) { + break; + } else { + edge = edge.next; + } + } + this.floorRectangleSize = maxB.clone().sub(minB); + } + + updateArea() { + let oldarea = this.area; + let points = []; + let allpoints = []; + this.areaCenter = new Vector2(); + this._polygonPoints = []; + + let firstCorner, secondCorner, wall, i, corner, region; + + for (i = 0; i < this.corners.length; i++) { + corner = this.corners[i]; + firstCorner = this.corners[i]; + secondCorner = this.corners[(i + 1) % this.corners.length]; + wall = firstCorner.wallToOrFrom(secondCorner); + + if (wall != null) { + if (wall.wallType === WallTypes.CURVED) { + let begin = corner.location.clone().sub(wall.bezier.get(0)).length(); + let p; + let stepIndex; + allpoints.push(corner.location.clone()); + + if (begin < 1e-6) { + for (stepIndex = 1; stepIndex < 20; stepIndex++) { + p = wall.bezier.get(stepIndex / 20); + allpoints.push(new Vector2(p.x, p.y)); + } + } else { + for (stepIndex = 19; stepIndex > 0; stepIndex--) { + p = wall.bezier.get(stepIndex / 20); + allpoints.push(new Vector2(p.x, p.y)); + } + } + } else { + allpoints.push(corner.location.clone()); + } + } else { + allpoints.push(corner.location.clone()); + } + } + + points = allpoints; + region = new Region(points); + this.area = Math.abs(region.area()); + this.areaCenter = region.centroid(); + this._polygonPoints = points; + + //Update the planes for intersection purposes + this.generateFloorPlane(); + this.generateRoofPlane(); + + this.dispatchEvent({ type: EVENT_ROOM_ATTRIBUTES_CHANGED, item: this, info: { from: oldarea, to: this.area } }); + } + + updateArea2() { + let scope = this; + let isComplexRoom = false; + let oldarea = this.area; + let points = []; + let N = 0; + let area = 0; + this.areaCenter = new Vector2(); + this._polygonPoints = []; + + //The below makes this routine too slow + // this.updateWalls(); + // this.updateInteriorCorners(); + // this.generateFloorPlane(); + // this.generateRoofPlane(); + + + for (let i = 0; i < this.corners.length; i++) { + let firstCorner = this.corners[i]; + let secondCorner = this.corners[(i + 1) % this.corners.length]; + let wall = firstCorner.wallToOrFrom(secondCorner); + isComplexRoom || (wall.wallType === WallTypes.CURVED); + } + + let inext, a, b, ax_by, ay_bx, delta; + if (!isComplexRoom) { + this.corners.forEach((corner) => { + let co = new Vector2(corner.x, corner.y); + scope.areaCenter.add(co); + points.push(co); + }); + this.areaCenter.multiplyScalar(1.0 / points.length); + for (let i = 0; i < points.length; i++) { + inext = (i + 1) % points.length; + a = points[i]; + b = points[inext]; + ax_by = (a.x * b.y); + ay_bx = (a.y * b.x); + delta = ax_by - ay_bx; + area += delta; + } + this.area = Math.abs(area) * 0.5; + this._polygonPoints = points; + this.dispatchEvent({ type: EVENT_ROOM_ATTRIBUTES_CHANGED, item: this, info: { from: oldarea, to: this.area } }); + return; + } + + + // this.corners.forEach((corner) => { + // var co = new Vector2(corner.x,corner.y); + // this.areaCenter.add(co); + // points.push(co); + // }); + + N = this.corners.length; + + for (let i = 0; i < this.corners.length; i++) { + let firstCorner = this.corners[i]; + let secondCorner = this.corners[(i + 1) % this.corners.length]; + let wall = firstCorner.wallToOrFrom(secondCorner); + this.areaCenter.add(firstCorner.location); + + if (wall != null) { + if (wall.wallType === WallTypes.CURVED) { + points.push(firstCorner.location); + let LUT = wall.bezier.getLUT(20); + for (let j = 1; j < LUT.length - 1; j++) { + let p = LUT[j]; + p = new Vector2(p.x, p.y); + points.push(p); + } + } else { + points.push(firstCorner.location); + } + } else { + points.push(firstCorner.location); + } + } + + this.areaCenter.multiplyScalar(1.0 / N); + + let indicesAndAngles = Utils.getCyclicOrder(points, this.areaCenter); + points = indicesAndAngles['points']; + + for (let i = 0; i < points.length; i++) { + inext = (i + 1) % points.length; + a = points[i]; + b = points[inext]; + //Another irregular polygon method based on the url below + //https://www.mathsisfun.com/geometry/area-irregular-polygons.html + // var width = a.x - b.x; + // var height = (a.y + b.y) * 0.5; + // var delta = Math.abs(width * height); + ax_by = (a.x * b.y); + ay_bx = (a.y * b.x); + delta = ax_by - ay_bx; + area += delta; + } + this._polygonPoints = points; + this.area = Math.abs(area) * 0.5; + // if we are using the method in url https://www.mathsisfun.com/geometry/area-irregular-polygons.html + // then we dont have to multiply the area by 0.5; + // this.area = Math.abs(area); + this.dispatchEvent({ type: EVENT_ROOM_ATTRIBUTES_CHANGED, item: this, info: { from: oldarea, to: this.area } }); + } + + hasAllCornersById(ids) { + let sum = 0; + for (let i = 0; i < ids.length; i++) { + sum += this.hasACornerById(ids[i]); + } + return (sum === this.corners.length); + } + + hasACornerById(id) { + for (let i = 0; i < this.corners.length; i++) { + let corner = this.corners[i]; + if (corner.id === id) { + return 1; + } + } + return 0; + } + + /** + * Populates each wall's half edge relating to this room + * this creates a fancy doubly connected edge list (DCEL) + */ + updateWalls() { + + let prevEdge = null; + let firstEdge = null; + this.__walls = []; + + for (let i = 0; i < this.corners.length; i++) { + + let firstCorner = this.corners[i]; + let secondCorner = this.corners[(i + 1) % this.corners.length]; + + // find if wall is heading in that direction + let wallTo = firstCorner.wallTo(secondCorner); + let wallFrom = firstCorner.wallFrom(secondCorner); + let edge = null; + if (wallTo) { + edge = new HalfEdge(this, wallTo, true); + } else if (wallFrom) { + edge = new HalfEdge(this, wallFrom, false); + } else { + // something horrible has happened + console.log('corners arent connected by a wall, uh oh'); + } + + /** + * Ensure the room contains the list of wall pointers + */ + if (!this.__walls.includes(wallTo) && wallTo) { + this.__walls.push(wallTo); + wallTo.addRoom(this); + } + if (!this.__walls.includes(wallFrom) && wallFrom) { + this.__walls.push(wallFrom); + wallFrom.addRoom(this); + } + + if (i === 0) { + firstEdge = edge; + } else { + edge.prev = prevEdge; + prevEdge.next = edge; + if (i + 1 === this.corners.length) { + firstEdge.prev = edge; + edge.next = firstEdge; + } + } + prevEdge = edge; + } + + // hold on to an edge reference + this.edgePointer = firstEdge; + } + + set isLocked(flag) { + this.__isLocked = flag; + } + + get isLocked() { + return this.__isLocked; + } + + get uuid() { + return this.getUuid(); + } + + get corners() { + return this._corners; + } + + get sharedWalls() { + return this.__walls; + } + + get roomCornerPoints() { + return this._polygonPoints; + } + + get roomByCornersId() { + return this._roomByCornersId; + } + + set name(value) { + let oldname = this._name; + this._name = value; + this.dispatchEvent({ type: EVENT_ROOM_ATTRIBUTES_CHANGED, item: this, info: { from: oldname, to: this._name } }); + } + get name() { + return this._name; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/model/wall.ts b/src/blueprint/scripts/model/wall.ts new file mode 100644 index 0000000..21a7e26 --- /dev/null +++ b/src/blueprint/scripts/model/wall.ts @@ -0,0 +1,743 @@ +import { Bezier } from 'bezier-js'; +import { WallTypes, defaultWallTexture } from '../core/constants'; +import { Configuration, configWallThickness, configWallHeight } from '../core/configuration'; +import { Utils } from '../core/utils.js'; +import { InWallItem } from '../items/in_wall_item'; +import { InWallFloorItem } from '../items/in_wall_floor_item'; +import { WallItem } from '../items/wall_item'; +import { WallFloorItem } from '../items/wall_floor_item'; +import { Corner } from './corner'; +import { Plane, Vector2, Vector3 } from 'babylonjs'; +import { EventSystem } from '../core/EventSystem'; + + +/** The default wall texture. */ +// export const defaultWallTexture = { url: 'rooms/textures/wallmap.png', stretch: true, scale: 0 }; + +const UP_VECTOR = new Vector3(0, 0, 1); +/** + * A Wall is the basic element to create Rooms. + * + * Walls consists of two half edges. + */ +export class Wall { + start: Corner; + end: Corner; + name: string; + _walltype: WallTypes; + _a: Vector2; + _b: Vector2; + _a_vector: Vector2; + _b_vector: Vector2; + _bezier: Bezier; + id: string; + /** Front is the plane from start to end. */ + __frontEdge = null; + + /** Back is the plane from end to start. */ + __backEdge = null; + + __attachedRooms = []; + + /** */ + orphan = false; + + /** Items attached to this wall */ + items = []; + + /** */ + onItems = []; + + __onWallItems = []; + __inWallItems = []; + + __onWallItemsSnappedRatios = []; + __inWallItemsSnappedRatios = []; + + /** The front-side texture. */ + frontTexture = defaultWallTexture; + + /** The back-side texture. */ + backTexture = defaultWallTexture; + + /** Wall thickness. */ + _thickness = Configuration.getNumericValue(configWallThickness); + + /** Wall height. */ + height = Configuration.getNumericValue(configWallHeight); + + /** Actions to be applied after movement. */ + moved_callbacks = null; + + /** Actions to be applied on removal. */ + deleted_callbacks = null; + + /** Actions to be applied explicitly. */ + action_callbacks = null; + + __isLocked = false; + + __location = new Vector2(); + __wallPlane2D; + __wallNormal2D = new Vector2(); + + __cornerMovedEvent; + __cornerAttributesChangedEvent; + __cornerDeletedEvent; + constructor(start: Corner, end: Corner, aa, bb) { + this.start = start; + this.end = end; + this.name = 'wall'; + if (!aa && !bb) { + this._walltype = WallTypes.STRAIGHT; + } else { + this._walltype = WallTypes.CURVED; + } + let o = new Vector2(0, 0); + let abvector = end.location.clone().sub(start.location).multiplyScalar(0.5); + + let ab135plus = abvector.clone().rotateAround(o, Math.PI * 0.75); + let ab45plus = abvector.clone().rotateAround(o, Math.PI * 0.25); + + if (aa) { + this._a = new Vector2(0, 0); + this._a.x = aa.x; + this._a.y = aa.y; + } else { + this._a = start.location.clone().add(ab45plus); + } + + if (bb) { + this._b = new Vector2(0, 0); + this._b.x = bb.x; + this._b.y = bb.y; + } else { + this._b = end.location.clone().add(ab135plus); + } + this._a_vector = this._a.clone().subtract(start.location); + this._b_vector = this._b.clone().subtract(start.location); + + this._bezier = new Bezier(start.location.x, start.location.y, this._a.x, this._a.y, this._b.x, this._b.y, end.location.x, end.location.y); + + this.id = this.getUuid(); + + this.start.attachStart(this); + this.end.attachEnd(this); + + /** Front is the plane from start to end. */ + this.__frontEdge = null; + + /** Back is the plane from end to start. */ + this.__backEdge = null; + + this.__attachedRooms = []; + + /** */ + this.orphan = false; + + /** Items attached to this wall */ + this.items = []; + + /** */ + this.onItems = []; + + this.__onWallItems = []; + this.__inWallItems = []; + + this.__onWallItemsSnappedRatios = []; + this.__inWallItemsSnappedRatios = []; + + /** The front-side texture. */ + this.frontTexture = defaultWallTexture; + + /** The back-side texture. */ + this.backTexture = defaultWallTexture; + + /** Wall thickness. */ + this._thickness = Configuration.getNumericValue(configWallThickness); + + /** Wall height. */ + this.height = Configuration.getNumericValue(configWallHeight); + + /** Actions to be applied after movement. */ + this.moved_callbacks = null; + + /** Actions to be applied on removal. */ + this.deleted_callbacks = null; + + /** Actions to be applied explicitly. */ + this.action_callbacks = null; + + this.__isLocked = false; + + this.__location = new Vector2(); + this.__wallPlane2D = new Plane(1, 0, 0, 0); + this.__wallNormal2D = new Vector2(); + + this.__cornerMovedEvent = this.__cornerMoved.bind(this); + this.__cornerAttributesChangedEvent = this.__cornerAttributesChanged.bind(this); + this.__cornerDeletedEvent = this.__cornerDeleted.bind(this); + + // this.start.addEventListener(EVENT_MOVED, () => { + // scope.updateControlVectors(); + // }); + // this.end.addEventListener(EVENT_MOVED, () => { + // scope.updateControlVectors(); + // }); + this.addCornerMoveListener(this.start); + this.addCornerMoveListener(this.end); + } + + + __updateItemPositions() { + let i = 0; + let vect = this.end.location.clone().sub(this.start.location); + this.__onWallItems.forEach((item) => { + let snappedRatio = this.__onWallItemsSnappedRatios[i]; + let newPosition = vect.clone().multiplyScalar(snappedRatio).add(this.start.location); + item.position = new Vector3(newPosition.x, item.position.y, newPosition.y); + i++; + }); + i = 0; + this.__inWallItems.forEach((item) => { + let snappedRatio = this.__inWallItemsSnappedRatios[i]; + let newPosition = vect.clone().multiplyScalar(snappedRatio).add(this.start.location); + item.position = new Vector3(newPosition.x, item.position.y, newPosition.y); + i++; + }); + } + + __cornerMoved() { + this.updateControlVectors(); + // this.dispatchEvent({ type: EVENT_MOVED, item: this, position: null }); + EventSystem.Instance.sendMessage("MOVED_EVENT", this); + } + + __cornerAttributesChanged() { + this.__updateItemPositions(); + // this.dispatchEvent({ type: EVENT_MOVED, item: this, position: null }); + EventSystem.Instance.sendMessage("MOVED_EVENT", this); + } + + __cornerDeleted(evt) { + this.addCornerMoveListener(evt.item, true); + this.remove(); + } + + addItem(item) { + if (item instanceof InWallItem || item instanceof InWallFloorItem) { + if (!Utils.hasValue(this.__inWallItems, item)) { + this.__inWallItems.push(item); + } + // this.dispatchEvent({ type: EVENT_MOVED, item: this, position: null }); + EventSystem.Instance.sendMessage("MOVED_EVENT", this); + } + + if (item instanceof WallItem || item instanceof WallFloorItem) { + if (!Utils.hasValue(this.__onWallItems, item)) { + this.__onWallItems.push(item); + } + // this.dispatchEvent({ type: EVENT_MOVED, item: this, position: null }); + EventSystem.Instance.sendMessage("MOVED_EVENT", this); + } + } + + removeItem(item) { + if (item instanceof InWallItem || item instanceof InWallFloorItem) { + if (Utils.hasValue(this.__inWallItems, item)) { + Utils.removeValue(this.__inWallItems, item); + } + // this.dispatchEvent({ type: EVENT_MOVED, item: this, position: null }); + EventSystem.Instance.sendMessage("MOVED_EVENT", this); + } + if (item instanceof WallItem || item instanceof WallFloorItem) { + if (Utils.hasValue(this.__onWallItems, item)) { + Utils.removeValue(this.__onWallItems, item); + } + // this.dispatchEvent({ type: EVENT_MOVED, item: this, position: null }); + EventSystem.Instance.sendMessage("MOVED_EVENT", this); + } + } + + addCornerMoveListener(corner, remove = false) { + // if (remove) { + // corner.removeEventListener(EVENT_MOVED, this.__cornerMovedEvent); + // corner.removeEventListener(EVENT_CORNER_ATTRIBUTES_CHANGED, this.__cornerAttributesChangedEvent); + // corner.removeEventListener(EVENT_DELETED, this.__cornerDeletedEvent); + // return; + // } + // corner.addEventListener(EVENT_MOVED, this.__cornerMovedEvent); + // corner.addEventListener(EVENT_CORNER_ATTRIBUTES_CHANGED, this.__cornerAttributesChangedEvent); + // corner.addEventListener(EVENT_DELETED, this.__cornerDeletedEvent); + } + + projectOnWallPlane(pt2d) { + let projected3D = new Vector3(); + projected3D = this.__wallPlane2D.projectPoint(new Vector3(pt2d.x, pt2d.y, 0), projected3D); + return new Vector2(projected3D.x, projected3D.y); + } + + updateControlVectors() { + //Update the location as a mid point between two corners + let s = this.start.location.clone(); + let e = this.end.location.clone(); + let vect = e.clone().sub(s.clone()); + let halfVect = vect.clone().multiplyScalar(0.5); + let midPoint = s.clone().add(halfVect); + this.__location = midPoint.clone(); + + //Update the wall plane in a 2D sense + let vect3d = new Vector3(vect.x, vect.y, 0); + let normal = vect3d.clone().normalize().cross(UP_VECTOR); + this.__wallPlane2D = this.__wallPlane2D.setFromNormalAndCoplanarPoint(normal, new Vector3(midPoint.x, midPoint.y, 0)); + this.__wallNormal2D.x = vect3d.x; + this.__wallNormal2D.y = vect3d.y; + + // console.log(this.__wallPlane2D.normal, this.__wallPlane2D.constant); + + this._bezier.points[0].x = this.start.location.x; + this._bezier.points[0].y = this.start.location.y; + + this._bezier.points[1].x = this.a.x; + this._bezier.points[1].y = this.a.y; + + this._bezier.points[2].x = this.b.x; + this._bezier.points[2].y = this.b.y; + + this._bezier.points[3].x = this.end.location.x; + this._bezier.points[3].y = this.end.location.y; + this._bezier.update(); + if (this.getStart() || this.getEnd()) { + (this.getStart() != null) ? this.getStart().floorplan.update(false) : (this.getEnd() != null) ? this.getEnd().floorplan.update(false) : false; + } + // this._a_vector = this._a.clone().sub(this.start.location); + // this._b_vector = this._b.clone().sub(this.start.location); + } + + getUuid() { + return [this.start.id, this.end.id].join(); + } + + resetFrontBack() { + if (this.frontEdge) { + this.frontEdge.destroy(); + } + if (this.backEdge) { + this.backEdge.destroy(); + } + this.frontEdge = null; + this.backEdge = null; + this.orphan = false; + this.__attachedRooms = []; + } + + snapToAxis(tolerance) { + // order here is important, but unfortunately arbitrary + this.start.snapToAxis(tolerance); + this.end.snapToAxis(tolerance); + } + + fireOnMove(func) { + this.moved_callbacks.add(func); + } + + fireOnDelete(func) { + this.deleted_callbacks.add(func); + } + + dontFireOnDelete(func) { + this.deleted_callbacks.remove(func); + } + + fireOnAction(func) { + this.action_callbacks.add(func); + } + + fireAction(action) { + this.dispatchEvent({ type: EVENT_ACTION, action: action }); + //this.action_callbacks.fire(action); + } + + move(newX, newY) { + let dx = newX - ((this.start.location.x + this.end.location.x) * 0.5); + let dy = newY - ((this.start.location.y + this.end.location.y) * 0.5); + this.relativeMove(dx, dy); + } + + relativeMove(dx, dy, corner) { + if (!corner) { + this.start.relativeMove(dx, dy); + this.end.relativeMove(dx, dy); + } else { + corner.relativeMove(dx, dy); + } + this.updateControlVectors(); + } + + fireMoved() { + this.dispatchEvent({ type: EVENT_MOVED, item: this, position: null }); + } + + fireRedraw() { + if (this.frontEdge) { + // this.frontEdge.dispatchEvent({type: EVENT_REDRAW}); + this.frontEdge.dispatchRedrawEvent(); + //this.frontEdge.redrawCallbacks.fire(); + } + if (this.backEdge) { + // this.backEdge.dispatchEvent({type: EVENT_REDRAW}); + this.backEdge.dispatchRedrawEvent(); + //this.backEdge.redrawCallbacks.fire(); + } + } + + set isLocked(flag) { + this.__isLocked = flag; + } + + get isLocked() { + return this.__isLocked; + } + + set wallSize(value) { + if (this.wallType === WallTypes.STRAIGHT) { + let vector = this.getEnd().location.clone().sub(this.getStart().location); + let currentLength = this.wallLength(); + let changeInLength = value / currentLength; + + let neighboursCountStart = (this.getStart().adjacentCorners().length === 1); + let neighboursCountEnd = (this.getEnd().adjacentCorners().length === 1); + + let changeInLengthOffset, movementVector, startPoint, endPoint; + + changeInLengthOffset = (changeInLength - 1); + + if ((!neighboursCountStart && !neighboursCountEnd) || (neighboursCountStart && neighboursCountEnd)) { + changeInLengthOffset *= 0.5; + movementVector = vector.clone().multiplyScalar(changeInLengthOffset); + startPoint = movementVector.clone().multiplyScalar(-1).add(this.getStart().location); + endPoint = movementVector.clone().add(this.getEnd().location); + } else if (neighboursCountStart) { + movementVector = vector.clone().multiplyScalar(changeInLengthOffset); + startPoint = movementVector.clone().multiplyScalar(-1).add(this.getStart().location); + endPoint = this.getEnd().location; + } else if (neighboursCountEnd) { + movementVector = vector.clone().multiplyScalar(changeInLengthOffset); + endPoint = movementVector.clone().add(this.getEnd().location); + startPoint = this.getStart().location; + } + this.getStart().move(startPoint.x, startPoint.y); + this.getEnd().move(endPoint.x, endPoint.y); + + this.updateAttachedRooms(); + + // vector = vector.multiplyScalar(changeInLength).add(this.getStart().location); + // this.getEnd().move(vector.x, vector.y); + } + /** + * No need for the below statement. Because the corners moved will trigger the event to this instance + * Then this instance will also trigger the move event + */ + // this.dispatchEvent({ type: EVENT_UPDATED, item: this }); + } + + get onWallItems() { + return this.__onWallItems; + } + + get inWallItems() { + return this.__inWallItems; + } + + get attachedRooms() { + return this.__attachedRooms; + } + + get thickness() { + return this._thickness; + } + + set thickness(thick) { + this._thickness = thick; + this.start.move(this.start.location.x, this.start.location.y); + this.end.move(this.end.location.x, this.end.location.y); + // this.dispatchEvent({ type: EVENT_UPDATED, item: this }); //This is stupid. You need to say what event exactly happened + } + + get uuid() { + return this.getUuid(); + } + + get a() { + return this._a; + } + + set a(location) { + this._a.x = location.x; + this._a.y = location.y; + this._a_vector = this._a.clone().sub(this.start.location); + this.updateControlVectors(); + } + + get b() { + return this._b; + } + + set b(location) { + this._b.x = location.x; + this._b.y = location.y; + this._b_vector = this._b.clone().sub(this.start.location); + this.updateControlVectors(); + } + + get aVector() { + return this._a_vector.clone(); + } + + get bVector() { + return this._b_vector.clone(); + } + + get bezier() { + return this._bezier; + } + + get wallSize() { + return this.wallLength(); + } + + get wallType() { + return this._walltype; + } + + set wallType(value) { + if (value === WallTypes.STRAIGHT || value === WallTypes.CURVED) { + this._walltype = value; + } + this.updateControlVectors(); + this.updateAttachedRooms(true); + } + + get startElevation() { + if (this.start && this.start != null) { + return this.start.elevation; + } + return 0.0; + } + + get endElevation() { + if (this.end && this.end != null) { + return this.end.elevation; + } + return 0.0; + } + + get location() { + return this.__location; + } + + set location(vec2) { + let s = this.start.location.clone(); + let e = this.end.location.clone(); + let vect = e.clone().sub(s); + let midPoint = s.clone().add(vect.clone().multiplyScalar(0.5)); + let vectorSToMid = s.clone().sub(midPoint); + let vectorEToMid = e.clone().sub(midPoint); + let sNewLocation = vec2.clone().add(vectorSToMid); + let eNewLocation = vec2.clone().add(vectorEToMid); + this.start.move(sNewLocation.x, sNewLocation.y); + this.end.move(eNewLocation.x, eNewLocation.y); + this.__location = vec2; + } + + getStart() { + return this.start; + } + + getEnd() { + return this.end; + } + + getStartX() { + return this.start.getX(); + } + + getEndX() { + return this.end.getX(); + } + + getStartY() { + return this.start.getY(); + } + + getEndY() { + return this.end.getY(); + } + + wallDirection() { + let vector = this.end.location.clone().sub(this.start.location); + return vector; + } + + wallDirectionNormalized() { + return this.wallDirection().normalize(); + } + + wallDirection3() { + let wd = this.wallDirection(); + return new Vector3(wd.x, wd.y, 0); + } + + wallDirectionNormalized3() { + let wd3 = this.wallDirection3(); + return wd3.normalize(); + } + + wallLength() { + if (this.wallType === WallTypes.STRAIGHT) { + let start = this.getStart(); + let end = this.getEnd(); + return Utils.distance(start, end); + } else if (this.wallType === WallTypes.CURVED) { + return this._bezier.length(); + } + return -1; + } + + wallCenter() { + if (this.wallType === WallTypes.STRAIGHT) { + return new Vector2((this.getStart().x + this.getEnd().x) / 2.0, (this.getStart().y + this.getEnd().y) / 2.0); + } else if (this.wallType === WallTypes.CURVED) { + let p = this._bezier.get(0.5); + return new Vector2(p.x, p.y); + } + return new Vector2(0, 0); + } + + remove() { + this.start.detachWall(this); + this.end.detachWall(this); + + //Remove the listeners also + this.addCornerMoveListener(this.start, true); + this.addCornerMoveListener(this.end, true); + + this.dispatchEvent({ type: EVENT_DELETED, item: this }); + //this.deleted_callbacks.fire(this); + } + + setStart(corner) { + this.start.detachWall(this); + this.addCornerMoveListener(this.start, true); + + corner.attachStart(this); + this.start = corner; + this.addCornerMoveListener(this.start); + this.fireMoved(); + } + + setEnd(corner) { + + this.end.detachWall(this); + this.addCornerMoveListener(this.end); + + corner.attachEnd(this); + this.end = corner; + this.addCornerMoveListener(this.end, true); + this.fireMoved(); + } + + distanceFrom(point) { + if (this.wallType === WallTypes.STRAIGHT) { + return Utils.pointDistanceFromLine(point, new Vector2(this.getStartX(), this.getStartY()), new Vector2(this.getEndX(), this.getEndY())); + } else if (this.wallType === WallTypes.CURVED) { + let p = this._bezier.project(point); + let projected = new Vector2(p.x, p.y); + return projected.distanceTo(point); + } + return -1; + } + + /** Return the corner opposite of the one provided. + * @param corner The given corner. + * @returns The opposite corner. + */ + oppositeCorner(corner) { + if (this.start === corner) { + return this.end; + } else if (this.end === corner) { + return this.start; + } else { + console.log('Wall does not connect to corner'); + return null; + } + } + + getClosestCorner(point) { + let startVector = new Vector2(this.start.x, this.start.y); + let endVector = new Vector2(this.end.x, this.end.y); + let startDistance = point.distanceTo(startVector); + let endDistance = point.distanceTo(endVector); + if (startDistance <= (this.thickness * 2)) { + return this.start; + } else if (endDistance <= (this.thickness * 2)) { + return this.end; + } + return null; + } + + updateAttachedRooms(explicit = false) { + if (this.start != null) { + this.start.updateAttachedRooms(explicit); + } + if (this.end) { + this.end.updateAttachedRooms(explicit); + } + } + + addRoom(room) { + this.__attachedRooms.push(room); + } + + clearAttachedRooms() { + this.__attachedRooms = []; + } + + get frontEdge() { + return this.__frontEdge; + } + + set frontEdge(edge) { + if (this.__frontEdge) { + this.__frontEdge.destroy(); + } + this.__frontEdge = edge; + this.__inWallItems.forEach((item) => { + item.newWallEdge(); + }); + this.__onWallItems.forEach((item) => { + item.newWallEdge(); + }); + this.dispatchEvent({ type: EVENT_UPDATED, item: this }); + } + + get backEdge() { + return this.__backEdge; + } + + set backEdge(edge) { + if (this.__backEdge) { + this.__backEdge.destroy(); + } + this.__backEdge = edge; + this.__inWallItems.forEach((item) => { + item.newWallEdge(); + }); + this.__onWallItems.forEach((item) => { + item.newWallEdge(); + }); + this.dispatchEvent({ type: EVENT_UPDATED, item: this }); + } +} + +export default Wall; \ No newline at end of file diff --git a/src/blueprint/scripts/page-not-found/page-not-found.component.css b/src/blueprint/scripts/page-not-found/page-not-found.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/blueprint/scripts/page-not-found/page-not-found.component.html b/src/blueprint/scripts/page-not-found/page-not-found.component.html new file mode 100644 index 0000000..010accc --- /dev/null +++ b/src/blueprint/scripts/page-not-found/page-not-found.component.html @@ -0,0 +1,123 @@ + + + + + Flip Jump + + + + + + + + + + + + + + +
+
+
+
+
+ + +
+
+
+ +
+ + + + + + +
+ +
+
+ +
+
+
+ +
+ +
+ +
+
+ +
+
+
+ +
+ +
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+ +
+ +
+
+ +
+
+
+ +
+ +
+ +
+
+ +
+
+
+ +
+ +
+ +
+
+ +
+ + + + + + + diff --git a/src/blueprint/scripts/page-not-found/page-not-found.component.spec.ts b/src/blueprint/scripts/page-not-found/page-not-found.component.spec.ts new file mode 100644 index 0000000..aa242a9 --- /dev/null +++ b/src/blueprint/scripts/page-not-found/page-not-found.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PageNotFoundComponent } from './page-not-found.component'; + +describe('PageNotFoundComponent', () => { + let component: PageNotFoundComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PageNotFoundComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PageNotFoundComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/blueprint/scripts/page-not-found/page-not-found.component.ts b/src/blueprint/scripts/page-not-found/page-not-found.component.ts new file mode 100644 index 0000000..8aeb748 --- /dev/null +++ b/src/blueprint/scripts/page-not-found/page-not-found.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-page-not-found', + templateUrl: './page-not-found.component.html', + styleUrls: ['./page-not-found.component.css'] +}) +export class PageNotFoundComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/blueprint/scripts/parametrics/ParametricFactory.js b/src/blueprint/scripts/parametrics/ParametricFactory.js new file mode 100644 index 0000000..5d1b646 --- /dev/null +++ b/src/blueprint/scripts/parametrics/ParametricFactory.js @@ -0,0 +1,23 @@ +import Enum from "es6-enum"; +import { DoorFactory } from "./doors/DoorFactory"; + +export const TYPE_DOOR = "DOOR"; +export const TYPE_WINDOW = "WINDOW"; +export const TYPE_CABINET = "CABINET"; +export const TYPE_SHELVES = "SHELVES"; + +export const BASE_PARAMETRIC_TYPES = Enum(TYPE_DOOR, TYPE_WINDOW, TYPE_CABINET, TYPE_SHELVES); + +export const BASE_PARAMETRIC_OBJECTS = { DOOR: DoorFactory }; + +/** Factory class to create items. */ +export class ParametricFactory { + /** Gets the class for the specified item. */ + static getParametricClass(parametricType) { + let parametricClass = BASE_PARAMETRIC_OBJECTS[parametricType]; + if (parametricClass !== undefined) { + return parametricClass; + } + throw new Error('Unimplemented parametric class error'); + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/parametrics/doors/DoorFactory.js b/src/blueprint/scripts/parametrics/doors/DoorFactory.js new file mode 100644 index 0000000..ab5da8a --- /dev/null +++ b/src/blueprint/scripts/parametrics/doors/DoorFactory.js @@ -0,0 +1,16 @@ +import { ParametricBaseDoor } from "./ParametricBaseDoor"; +import { ParametricDoorType2 } from "./ParametricDoorType2"; +import { ParametricDoorType3 } from "./ParametricDoorType3"; +import { ParametricDoorType4 } from "./ParametricDoorType4"; +import { ParametricDoorType5 } from "./ParametricDoorType5"; +import { ParametricDoorType6 } from "./ParametricDoorType6"; + +export const DOOR_TYPES = { 1: ParametricBaseDoor, 2: ParametricDoorType2, 3: ParametricDoorType3, 4: ParametricDoorType4, 5: ParametricDoorType5, 6: ParametricDoorType6 }; + +/** Factory class to create items. */ +export class DoorFactory { + /** Gets the class for the specified item. */ + static getClass(doorType) { + return DOOR_TYPES[doorType]; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/parametrics/doors/ParametricBaseDoor.js b/src/blueprint/scripts/parametrics/doors/ParametricBaseDoor.js new file mode 100644 index 0000000..19f293e --- /dev/null +++ b/src/blueprint/scripts/parametrics/doors/ParametricBaseDoor.js @@ -0,0 +1,531 @@ +import Enum from "es6-enum"; +import { BufferGeometry, Matrix4, Vector3, Face3, Geometry, DoubleSide, Color } from "three"; +import { MeshStandardMaterial, EventDispatcher } from "three"; +import { EVENT_PARAMETRIC_GEOMETRY_UPATED } from "../../core/events"; +import { DoorHandleGenerator } from "./doorhandles/DoorHandleGenerator"; + + +export const DOOR_OPEN_DIRECTIONS = Enum('RIGHT', 'LEFT', 'BOTH_SIDES', 'NO_DOORS'); +export const DOOR_HANDLE_TYPES = Enum('None', 'HANDLE_01', 'HANDLE_02', 'HANDLE_03', 'HANDLE_04'); + +/** + * ParametricBaseDoor is the implementation of Model 01 from Archimesh + */ +export class ParametricBaseDoor extends EventDispatcher { + constructor(parameters) { + super(); + let opts = { frameSize: 5, frameColor: '#FF0000', doorColor: '#E0E0EE', frameWidth: 100, frameHeight: 200, frameThickness: 20, doorRatio: 0.5, openDirection: DOOR_OPEN_DIRECTIONS.RIGHT.description, handleType: DOOR_HANDLE_TYPES.HANDLE_01.description, doorHandleColor: '#F0F0F0', glassColor: '#87CEEB' }; + for (var opt in opts) { + if (opt === 'frameColor' || opt === 'doorColor' || opt === 'doorHandleColor' || opt === 'glassColor') { + opts[opt] = new Color(parameters[opt]); + } else if (opts.hasOwnProperty(opt) && parameters.hasOwnProperty(opt)) { + opts[opt] = parameters[opt]; + } + } + opts = this.__validateParameters(opts); + this.__doorType = 1; + this.__name = 'Door'; + + this.__frameSize = opts.frameSize; //This value will be set in validatePArameters + this.__frameWidth = opts.frameWidth; + this.__frameHeight = opts.frameHeight; + this.__frameThickness = opts.frameThickness; + this.__doorRatio = opts.doorRatio; + + + this.__openDirection = null; + this.__handleType = null; + switch (opts.openDirection) { + case DOOR_OPEN_DIRECTIONS.RIGHT.description: + this.__openDirection = DOOR_OPEN_DIRECTIONS.RIGHT; //This value will be set in validatePArameters + break; + case DOOR_OPEN_DIRECTIONS.LEFT.description: + this.__openDirection = DOOR_OPEN_DIRECTIONS.LEFT; //This value will be set in validatePArameters + break; + case DOOR_OPEN_DIRECTIONS.BOTH_SIDES.description: + this.__openDirection = DOOR_OPEN_DIRECTIONS.BOTH_SIDES; //This value will be set in validatePArameters + break; + case DOOR_OPEN_DIRECTIONS.NO_DOORS.description: + this.__openDirection = DOOR_OPEN_DIRECTIONS.NO_DOORS; //This value will be set in validatePArameters + break; + } + + switch (opts.handleType) { + case DOOR_HANDLE_TYPES.None.description: + this.__handleType = DOOR_HANDLE_TYPES.None; //This value will be set in validatePArameters + break; + case DOOR_HANDLE_TYPES.HANDLE_01.description: + this.__handleType = DOOR_HANDLE_TYPES.HANDLE_01; //This value will be set in validatePArameters + break; + case DOOR_HANDLE_TYPES.HANDLE_02.description: + this.__handleType = DOOR_HANDLE_TYPES.HANDLE_02; //This value will be set in validatePArameters + break; + case DOOR_HANDLE_TYPES.HANDLE_03.description: + this.__handleType = DOOR_HANDLE_TYPES.HANDLE_03; //This value will be set in validatePArameters + break; + case DOOR_HANDLE_TYPES.HANDLE_04.description: + this.__handleType = DOOR_HANDLE_TYPES.HANDLE_04; //This value will be set in validatePArameters + break; + } + this.__frameMaterial = new MeshStandardMaterial({ color: opts.frameColor, side: DoubleSide }); + this.__doorMaterial = new MeshStandardMaterial({ color: opts.doorColor, side: DoubleSide, wireframe: false }); + this.__handleMaterial = new MeshStandardMaterial({ color: '#F0F0FF', side: DoubleSide, wireframe: false }); + this.__rightDoorMaterial = this.__doorMaterial; //new MeshStandardMaterial({ color: '#FF0000', wireframe: false }); //Right is red color + this.__leftDoorMaterial = this.__doorMaterial; //new MeshStandardMaterial({ color: '#0000FF', wireframe: false }); //Left is blue color + this.__doorHandleMaterial = new MeshStandardMaterial({ color: opts.doorHandleColor, wireframe: false, roughness: 0.0, metalness: 0.0 }); + this.__glassMaterial = new MeshStandardMaterial({ color: opts.glassColor, side: DoubleSide, wireframe: false, transparent: true, opacity: 0.6 }); + this.__doorFrameMaterialId = 0; + this.__doorMaterialId = 1; + this.__leftDoorMaterialId = 2; + this.__rightDoorMaterialId = 3; + this.__doorHandleMaterialId = 4; + this.__glassMaterialId = 5; + this.__material = [ + this.__frameMaterial, + this.__doorMaterial, + this.__leftDoorMaterial, + this.__rightDoorMaterial, + this.__doorHandleMaterial, + this.__glassMaterial + ]; + this.__doorMaterial.normalScale.set(100, 100, 100); + this.__geometry = this.__proceedure(); + } + + __convertFrom4ToFace3(facegroups, materialId = 0) { + let faces = []; + for (let i = 0; i < facegroups.length; i += 4) { + let f1 = new Face3(facegroups[i], facegroups[i + 1], facegroups[i + 2]); + let f2 = new Face3(facegroups[i], facegroups[i + 2], facegroups[i + 3]); + f1.materialIndex = materialId; + f2.materialIndex = materialId; + faces.push(f1); + faces.push(f2); + } + return faces; + } + + __validateParameters(parameters) { + parameters.frameSize = Math.max(5, Math.min(25, parameters.frameSize)); //Expressed in centimeters + parameters.doorRatio = Math.max(0.0, Math.min(1.0, parameters.doorRatio)); //Expressed in centimeters + let doorOpenParameter = parameters.openDirection; + switch (doorOpenParameter) { + case DOOR_OPEN_DIRECTIONS.RIGHT.description: + case DOOR_OPEN_DIRECTIONS.LEFT.description: + case DOOR_OPEN_DIRECTIONS.BOTH_SIDES.description: + case DOOR_OPEN_DIRECTIONS.NO_DOORS.description: + break; + default: + throw new Error('Unindentifiable door type'); + } + return parameters; + } + + __updateGeometry() { + let updatedGeometry = this.__proceedure(); + this.__geometry.dispose(); + this.__geometry = updatedGeometry; + + this.dispatchEvent({ type: EVENT_PARAMETRIC_GEOMETRY_UPATED, target: this }); + } + + __proceedure() { + let returnGeometry = null; + let doorGeometry = new Geometry(); + let doorFrameGeometry = this.__shapeMesh(); + let doorsToGenerate = this.__shapeChildren(); + if (doorFrameGeometry) { + doorGeometry.merge(doorFrameGeometry); + } + if (doorsToGenerate.right) { + doorGeometry.merge(doorsToGenerate.right); + } + if (doorsToGenerate.left) { + doorGeometry.merge(doorsToGenerate.left); + } + + doorGeometry.computeVertexNormals(); + doorGeometry.computeFaceNormals(); + doorGeometry.computeBoundingBox(); + + returnGeometry = new BufferGeometry().fromGeometry(doorGeometry); + returnGeometry.normalizeNormals(); + return returnGeometry; + } + + __shapeMesh() { + let doorFrameGeometry = this.__createDoorFrame(); + return doorFrameGeometry; + } + + __createDoorFrame() { + let tf = this.__frameThickness / 3.0; + let sf = this.__frameSize; + let wf = (this.__frameWidth * 0.5) - sf; + let hf = this.__frameHeight - sf; + let gap = 0.02; + let deep = this.__frameThickness * 0.50; + + let verts = [ + new Vector3(-wf - sf, -tf, 0), + new Vector3(-wf - sf, tf * 2, 0), + new Vector3(-wf, tf * 2, 0), + new Vector3(-wf - sf, -tf, hf + sf), + new Vector3(-wf - sf, tf * 2, hf + sf), + new Vector3(wf + sf, tf * 2, hf + sf), + new Vector3(wf + sf, -tf, hf + sf), + new Vector3(wf, -tf, hf), + new Vector3(-wf, tf * 2, hf), + new Vector3(wf, -tf, 0), + new Vector3(wf + sf, -tf, 0), + new Vector3(wf + sf, tf * 2, 0), + new Vector3(wf, -tf + deep, hf), + new Vector3(-wf, -tf + deep, hf), + new Vector3(-wf, -tf + deep, 0), + new Vector3(-wf + gap, -tf + deep, hf), + new Vector3(-wf + gap, -tf + deep, 0), + new Vector3(-wf + gap, tf * 2, hf), + new Vector3(-wf + gap, tf * 2, 0), + new Vector3(wf, -tf + deep, 0), + new Vector3(-wf, -tf, hf), + new Vector3(-wf, -tf, 0), + new Vector3(wf, tf * 2, hf), + new Vector3(wf, tf * 2, 0), + new Vector3(wf - gap, tf * 2, 0), + new Vector3(wf - gap, -tf + deep, 0), + new Vector3(wf - gap, tf * 2, hf), + new Vector3(wf - gap, -tf + deep, hf - gap), + new Vector3(wf - gap, -tf + deep, hf), + new Vector3(-wf + gap, tf * 2, hf - gap), + new Vector3(-wf + gap, -tf + deep, hf - gap), + new Vector3(wf - gap, tf * 2, hf - gap) + ]; + let geometry = new Geometry(); + let faceIds = [3, 4, 1, 0, 7, 12, 19, 9, 4, 3, 6, 5, 10, 11, 5, 6, 13, 20, 21, 14, 17, 15, 16, 18, 11, 23, 22, 5, 20, 13, 12, 7, 20, 3, 0, 21, 9, 10, 6, 7, 13, 14, 16, 15, 4, 8, 2, 1, 29, 30, 27, 31, 7, 6, 3, 20, 8, 4, 5, 22, 14, 2, 18, 16, 17, 18, 2, 8, 28, 25, 19, 12, 28, 26, 24, 25, 25, 24, 23, 19, 22, 23, 24, 26, 29, 31, 26, 17, 15, 28, 27, 30]; + let faces = this.__convertFrom4ToFace3(faceIds, 0); + let extraFace = new Face3(8, 22, 26); + extraFace.materialIndex = 0; + faces.push(extraFace); + geometry.vertices = verts; + geometry.faces = faces; + geometry.elementsNeedUpdate = true; + geometry.applyMatrix4(new Matrix4().makeRotationAxis(new Vector3(1, 0, 0), -Math.PI * 0.5)); + geometry.applyMatrix4(new Matrix4().makeTranslation(0, -this.__frameHeight * 0.5, 0)); + geometry.computeVertexNormals(); + geometry.computeFaceNormals(); + geometry.computeBoundingBox(); + return geometry; //new BufferGeometry().fromGeometry(geometry); + } + + __shapeChildren() { + let doorRight = null, + doorLeft = null; + let w = this.__frameWidth; + let w1 = (w * this.__doorRatio); + let w2 = (w - w1); + switch (this.__openDirection) { + case DOOR_OPEN_DIRECTIONS.NO_DOORS: + break; + case DOOR_OPEN_DIRECTIONS.LEFT: + //Get the buffergeometry of only one door + doorLeft = this.__makeOneDoor(w, this.__openDirection, this.__leftDoorMaterialId, 'Left'); + doorLeft.applyMatrix4(new Matrix4().makeTranslation(-(this.__frameWidth * 0.5) + this.__frameSize, 0, 0)); + break; + case DOOR_OPEN_DIRECTIONS.RIGHT: + //Get the buffergeometry of only one door + doorRight = this.__makeOneDoor(w, this.__openDirection, this.__rightDoorMaterialId, 'Right'); + doorRight.applyMatrix4(new Matrix4().makeTranslation((this.__frameWidth * 0.5) - this.__frameSize, 0, 0)); + break; + case DOOR_OPEN_DIRECTIONS.BOTH_SIDES: + //Get the buffergeometry of left door + doorLeft = this.__makeOneDoor(w1 + this.__frameSize, DOOR_OPEN_DIRECTIONS.LEFT, this.__leftDoorMaterialId, 'Left'); + doorLeft.applyMatrix4(new Matrix4().makeTranslation(-(this.__frameWidth * 0.5) + this.__frameSize, 0, 0)); + //Get the buffergeometry of right door + doorRight = this.__makeOneDoor(w2 + this.__frameSize, DOOR_OPEN_DIRECTIONS.RIGHT, this.__rightDoorMaterialId, 'Right'); + doorRight.applyMatrix4(new Matrix4().makeTranslation((this.__frameWidth * 0.5) - this.__frameSize, 0, 0)); + break; + default: + throw new Error(`Unindentifiable door type ${this.__openDirection}`); + } + return { right: doorRight, left: doorLeft }; + } + + __makeOneDoor(frameWidth, openingDirection, materialId = 1, doorSide = 'Right') { + let aDoorGeometry = this.__createDoorData(frameWidth, openingDirection, materialId); + + if (this.__handleType !== DOOR_HANDLE_TYPES.None) { + let doorRatio = (doorSide === 'Right') ? 1.0 - this.doorRatio : this.doorRatio; + let front_handle = DoorHandleGenerator.generate_handle(this.__handleType.description, 'Front', doorSide, doorRatio, this.frameWidth, this.frameSize, this.frameThickness, this.__openDirection.description, this.__doorHandleMaterialId); + let back_handle = DoorHandleGenerator.generate_handle(this.__handleType.description, 'Back', doorSide, doorRatio, this.frameWidth, this.frameSize, this.frameThickness, this.__openDirection.description, this.__doorHandleMaterialId); + + aDoorGeometry.merge(front_handle); + aDoorGeometry.merge(back_handle); + } + + return aDoorGeometry; + } + + __createDoorData(frameWidth, openingDirection, materialId = 1) { + let doorModelData = this.__createForDoorModel(frameWidth, openingDirection, materialId); + let geometry = new Geometry(); + let m = new Matrix4(); + let tx = (doorModelData.widthFactor * 0.5) * doorModelData.side; + let ty = this.__frameHeight * 0.5; + let tz = -(doorModelData.depth * 0.65); + geometry.vertices = doorModelData.vertices; + geometry.faces = doorModelData.faces; + geometry.elementsNeedUpdate = true; + + m.makeRotationAxis(new Vector3(1, 0, 0), -Math.PI * 0.5); + // m.multiply(new Matrix4().makeTranslation(0, tz, ty)); + // m.makeTranslation(tx, ty, tz); + geometry.applyMatrix4(m); + geometry.elementsNeedUpdate = true; + geometry.computeVertexNormals(); + geometry.computeFaceNormals(); + geometry.computeBoundingBox(); + return geometry; //new BufferGeometry().fromGeometry(geometry); + } + + /** + * Based on the DoorType the below method will change + * This can be replaced by the appropriate door model class + * This method will change with logic based on the door model type + */ + __createForDoorModel(frameWidth, openingDirection, materialId = 1) { + + let gap = 0.25; //0.002; + let sf = this.__frameSize; + let wf = frameWidth - (sf * 2) - (gap * 2); + let hf = (this.__frameHeight / 2) - (gap * 2); + let deep = (this.__frameThickness * 0.50) - (gap * 3); + let side = 0, + minx = 0, + maxx = 0; + // # Open to right or left + if (openingDirection === DOOR_OPEN_DIRECTIONS.RIGHT) { + side = 1; + minx = wf * -1; + maxx = 0.0; + } else { + side = -1; + minx = 0.0; + maxx = wf; + } + let miny = 0.0; //# locked + let maxy = deep; + let minz = -hf; + let maxz = hf - sf; // - gap; + + let faceids = [4, 5, 1, 0, 5, 6, 2, 1, 6, 7, 3, 2, 7, 4, 0, 3, 0, 1, 2, 3, 7, 6, 5, 4]; + // # Vertex + let myvertex = [new Vector3(minx, miny, minz), new Vector3(minx, maxy, minz), new Vector3(maxx, maxy, minz), new Vector3(maxx, miny, minz), new Vector3(minx, miny, maxz), new Vector3(minx, maxy, maxz), new Vector3(maxx, maxy, maxz), new Vector3(maxx, miny, maxz)]; + // # Faces + let myfaces = this.__convertFrom4ToFace3(faceids, materialId); + // let myfaces = [new Face3(4, 5, 1, 0), new Face3(5, 6, 2, 1), new Face3(6, 7, 3, 2), new Face3(7, 4, 0, 3), new Face3(0, 1, 2, 3), new Face3(7, 6, 5, 4)]; + return { vertices: myvertex, faces: myfaces, widthFactor: wf, depth: deep, side: side }; + } + + get frameWidth() { + return this.__frameWidth; + } + + set frameWidth(value) { + this.__frameWidth = (value) ? value : 100; + this.__updateGeometry(); + } + + get frameHeight() { + return this.__frameHeight; + } + + set frameHeight(value) { + this.__frameHeight = (value) ? value : 200; + this.__updateGeometry(); + } + + get frameThickness() { + return this.__frameThickness; + } + + set frameThickness(value) { + this.__frameThickness = (value) ? value : 20; + this.__updateGeometry(); + } + + get frameSize() { + return this.__frameSize; + } + + set frameSize(value) { + this.__frameSize = Math.max(5, Math.min(25, value)); //Expressed in centimeters + this.__updateGeometry(); + } + + get doorRatio() { + return this.__doorRatio; + } + + set doorRatio(value) { + this.__doorRatio = Math.max(0.0, Math.min(1.0, value)); //Expressed as a ratio between 0 -> 1 + this.__updateGeometry(); + } + + get doorHandleColor() { + return `#${this.__doorHandleMaterial.color.getHexString()}`; + } + + set doorHandleColor(color) { + this.__doorHandleMaterial.color = new Color(color); + this.__doorHandleMaterial.needsUpdate = true; + this.__material.needsUpdate = true; + } + + get doorGlassColor() { + return `#${this.__glassMaterial.color.getHexString()}`; + } + + set doorGlassColor(color) { + this.__glassMaterial.color = new Color(color); + this.__glassMaterial.needsUpdate = true; + this.__material.needsUpdate = true; + } + + get doorColor() { + return `#${this.__doorMaterial.color.getHexString()}`; + } + + set doorColor(color) { + this.__doorMaterial.color = new Color(color); + this.__doorMaterial.needsUpdate = true; + this.__material.needsUpdate = true; + } + + get frameColor() { + return `#${this.__frameMaterial.color.getHexString()}`; + } + + set frameColor(color) { + this.__frameMaterial.color = new Color(color); + this.__frameMaterial.needsUpdate = true; + this.__material.needsUpdate = true; + } + + get openDirection() { + return this.__openDirection.description; + } + + set openDirection(direction) { + switch (direction) { + case DOOR_OPEN_DIRECTIONS.RIGHT.description: + this.__openDirection = DOOR_OPEN_DIRECTIONS.RIGHT; //This value will be set in validatePArameters + break; + case DOOR_OPEN_DIRECTIONS.LEFT.description: + this.__openDirection = DOOR_OPEN_DIRECTIONS.LEFT; //This value will be set in validatePArameters + break; + case DOOR_OPEN_DIRECTIONS.BOTH_SIDES.description: + this.__openDirection = DOOR_OPEN_DIRECTIONS.BOTH_SIDES; //This value will be set in validatePArameters + break; + case DOOR_OPEN_DIRECTIONS.NO_DOORS.description: + this.__openDirection = DOOR_OPEN_DIRECTIONS.NO_DOORS; //This value will be set in validatePArameters + break; + } + this.__updateGeometry(); + } + + get handleType() { + return this.__handleType.description; + } + + set handleType(type) { + switch (type) { + case DOOR_HANDLE_TYPES.None.description: + this.__handleType = DOOR_HANDLE_TYPES.None; //This value will be set in validatePArameters + break; + case DOOR_HANDLE_TYPES.HANDLE_01.description: + this.__handleType = DOOR_HANDLE_TYPES.HANDLE_01; //This value will be set in validatePArameters + break; + case DOOR_HANDLE_TYPES.HANDLE_02.description: + this.__handleType = DOOR_HANDLE_TYPES.HANDLE_02; //This value will be set in validatePArameters + break; + case DOOR_HANDLE_TYPES.HANDLE_03.description: + this.__handleType = DOOR_HANDLE_TYPES.HANDLE_03; //This value will be set in validatePArameters + break; + case DOOR_HANDLE_TYPES.HANDLE_04.description: + this.__handleType = DOOR_HANDLE_TYPES.HANDLE_04; //This value will be set in validatePArameters + break; + } + this.__updateGeometry(); + } + + get doorType() { + return this.__doorType; + } + + get geometry() { + return this.__geometry; + } + + get material() { + return this.__material; + } + + get metadata() { + return { + type: this.__doorType, + frameColor: this.__frameMaterial.color, + doorColor: this.__doorMaterial.color, + doorHandleColor: this.__doorHandleMaterial.color, + glassColor: this.__glassMaterial.color, + frameWidth: this.frameWidth, + frameHeight: this.frameHeight, + frameSize: this.frameSize, + frameThickness: this.frameThickness, + doorRatio: this.doorRatio, + openDirection: this.__openDirection.description, + handleType: this.__handleType.description + }; + } + + + get parameters() { + return { + frameColor: { type: 'color' }, + doorColor: { type: 'color' }, + doorHandleColor: { type: 'color' }, + doorGlassColor: { type: 'color' }, + frameWidth: { type: 'number' }, + frameHeight: { type: 'number' }, + frameSize: { type: 'range', min: 5, max: 25, step: 0.1 }, + frameThickness: { type: 'number' }, + doorRatio: { type: 'range', min: 0.2, max: 0.8, step: 0.001 }, + openDirection: { + type: 'choice', + value: [ + DOOR_OPEN_DIRECTIONS.RIGHT.description, + DOOR_OPEN_DIRECTIONS.LEFT.description, + DOOR_OPEN_DIRECTIONS.BOTH_SIDES.description, + DOOR_OPEN_DIRECTIONS.NO_DOORS.description + ] + }, + handleType: { + type: 'choice', + value: [ + DOOR_HANDLE_TYPES.None.description, + DOOR_HANDLE_TYPES.HANDLE_01.description, + DOOR_HANDLE_TYPES.HANDLE_02.description, + DOOR_HANDLE_TYPES.HANDLE_03.description, + DOOR_HANDLE_TYPES.HANDLE_04.description + ] + } + }; + } + + get name() { + return this.__name; + } + + set name(value) { + this.__name = value; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/parametrics/doors/ParametricDoorType2.js b/src/blueprint/scripts/parametrics/doors/ParametricDoorType2.js new file mode 100644 index 0000000..434ca6e --- /dev/null +++ b/src/blueprint/scripts/parametrics/doors/ParametricDoorType2.js @@ -0,0 +1,147 @@ +import { ParametricBaseDoor, DOOR_OPEN_DIRECTIONS } from "./ParametricBaseDoor"; +import { Vector3, Face3 } from "three"; + +export class ParametricDoorType2 extends ParametricBaseDoor { + constructor(parameters) { + super(parameters); + this.__doorType = 2; + } + + /** + * Based on the DoorType the below method will change + * This can be replaced by the appropriate door model class + * This method will change with logic based on the door model type + */ + __createForDoorModel(frameWidth, openingDirection) { + + let gap = 0.25; //0.002; + let sf = this.__frameSize; + let wf = frameWidth - (sf * 2) - (gap * 2); + let hf = (this.__frameHeight / 2) - (gap * 2); + let deep = (this.__frameThickness * 0.5); + + let side = 0, + minx = 0, + maxx = 0; + // # Open to right or left + if (openingDirection === DOOR_OPEN_DIRECTIONS.RIGHT) { + side = 1; + minx = wf * -1; + maxx = 0.0; + } else { + side = -1; + minx = 0.0; + maxx = wf; + } + let miny = 0.0; //# locked + let maxy = deep; + let minz = -hf; + let maxz = hf - sf - gap; + + let myvertex = [new Vector3(minx, (-1.57160684466362e-08 * 100), minz + (2.384185791015625e-06 * 100)), + new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz), + new Vector3(minx, (-1.5599653124809265e-08 * 100), maxz), + new Vector3(minx, (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), + new Vector3(minx, (-1.57160684466362e-08 * 100), minz + (0.2500007152557373 * 100)), + new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz + (0.25000011920928955 * 100)), + new Vector3(maxx, (-1.5599653124809265e-08 * 100), maxz), + new Vector3(maxx, (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), + new Vector3(maxx - (0.11609852313995361 * 100), (-1.5599653124809265e-08 * 100), maxz), + new Vector3(maxx - (0.12357193231582642 * 100), (-1.5599653124809265e-08 * 100), minz), + new Vector3(maxx - (0.11658430099487305 * 100), (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), + new Vector3(maxx - (0.12263774871826172 * 100), (-1.5599653124809265e-08 * 100), minz + (0.25000011920928955 * 100)), + new Vector3(minx, (-1.57160684466362e-08 * 100), minz + (0.8700000941753387 * 100)), + new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz + (0.8700000941753387 * 100)), + new Vector3(maxx - (0.12076938152313232 * 100), (-1.5599653124809265e-08 * 100), minz + (0.7500001192092896 * 100)), + new Vector3(minx + (0.11735659837722778 * 100), (-1.57160684466362e-08 * 100), minz + (0.25000011920928955 * 100)), + new Vector3(minx + (0.12341010570526123 * 100), (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), + new Vector3(minx + (0.11642247438430786 * 100), (-1.57160684466362e-08 * 100), minz), + new Vector3(minx + (0.11967337131500244 * 100), (-1.57160684466362e-08 * 100), minz + (0.8700000941753387 * 100)), + new Vector3(minx, (-1.57160684466362e-08 * 100), minz + (0.7500001192092896 * 100)), + new Vector3(maxx - (0.12032097578048706 * 100), (-1.5599653124809265e-08 * 100), minz + (0.8700000941753387 * 100)), + new Vector3(minx + (0.12389582395553589 * 100), (-1.5599653124809265e-08 * 100), maxz), + new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz + (0.7500001192092896 * 100)), + new Vector3(minx + (0.11922496557235718 * 100), (-1.57160684466362e-08 * 100), minz + (0.7500001192092896 * 100)), + new Vector3(minx + (0.11922496557235718 * 100), (-0.010000014677643776 * 100), minz + (0.7500001192092896 * 100)), + new Vector3(minx + (0.12341010570526123 * 100), (-0.010000014677643776 * 100), maxz - (0.12999999523162842 * 100)), + new Vector3(maxx - (0.12032097578048706 * 100), (-0.010000014677643776 * 100), minz + (0.8700000941753387 * 100)), + new Vector3(minx + (0.11735659837722778 * 100), (-0.010000014677643776 * 100), minz + (0.25000011920928955 * 100)), + new Vector3(maxx - (0.11658430099487305 * 100), (-0.010000014677643776 * 100), maxz - (0.12999999523162842 * 100)), + new Vector3(maxx - (0.12263774871826172 * 100), (-0.010000014677643776 * 100), minz + (0.25000011920928955 * 100)), + new Vector3(minx + (0.11967337131500244 * 100), (-0.010000014677643776 * 100), minz + (0.8700000941753387 * 100)), + new Vector3(maxx - (0.12076938152313232 * 100), (-0.010000014677643776 * 100), minz + (0.7500001192092896 * 100)), + new Vector3(minx + (0.13388586044311523 * 100), (-0.010000014677643776 * 100), minz + (0.7375001013278961 * 100)), + new Vector3(minx + (0.1321108341217041 * 100), (-0.010000014677643776 * 100), minz + (0.2625001072883606 * 100)), + new Vector3(maxx - (0.1372986137866974 * 100), (-0.010000014677643776 * 100), minz + (0.2625001072883606 * 100)), + new Vector3(maxx - (0.13552364706993103 * 100), (-0.010000014677643776 * 100), minz + (0.7375001013278961 * 100)), + new Vector3(minx + (0.13802427053451538 * 100), (-0.010000014677643776 * 100), maxz - (0.14747536182403564 * 100)), + new Vector3(maxx - (0.13493508100509644 * 100), (-0.010000014677643776 * 100), minz + (0.8866067305207253 * 100)), + new Vector3(maxx - (0.13138526678085327 * 100), (-0.010000014677643776 * 100), maxz - (0.14747536182403564 * 100)), + new Vector3(minx + (0.13447439670562744 * 100), (-0.010000014677643776 * 100), minz + (0.8866067305207253 * 100)), + new Vector3(minx + (0.13388586044311523 * 100), (-0.008776669390499592 * 100), minz + (0.7375001013278961 * 100)), + new Vector3(minx + (0.1321108341217041 * 100), (-0.008776669390499592 * 100), minz + (0.2625001072883606 * 100)), + new Vector3(maxx - (0.1372986137866974 * 100), (-0.008776669390499592 * 100), minz + (0.2625001072883606 * 100)), + new Vector3(maxx - (0.13552364706993103 * 100), (-0.008776669390499592 * 100), minz + (0.7375001013278961 * 100)), + new Vector3(minx + (0.13802427053451538 * 100), (-0.008776669390499592 * 100), maxz - (0.14747536182403564 * 100)), + new Vector3(maxx - (0.13493508100509644 * 100), (-0.008776669390499592 * 100), minz + (0.8866067305207253 * 100)), + new Vector3(maxx - (0.13138526678085327 * 100), (-0.008776669390499592 * 100), maxz - (0.14747536182403564 * 100)), + new Vector3(minx + (0.13447439670562744 * 100), (-0.008776669390499592 * 100), minz + (0.8866067305207253 * 100)), + new Vector3(minx, maxy - (0.009999999776482582 * 100), minz + (2.384185791015625e-06 * 100)), + new Vector3(maxx, maxy - (0.009999999776482582 * 100), minz), + new Vector3(minx, maxy - (0.009999999776482582 * 100), maxz), + new Vector3(minx, maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), + new Vector3(minx, maxy - (0.009999999776482582 * 100), minz + (0.2500007152557373 * 100)), + new Vector3(maxx, maxy - (0.009999999776482582 * 100), minz + (0.25000011920928955 * 100)), + new Vector3(maxx, maxy - (0.009999999776482582 * 100), maxz), + new Vector3(maxx, maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), + new Vector3(maxx - (0.11609852313995361 * 100), maxy - (0.009999999776482582 * 100), maxz), + new Vector3(maxx - (0.12357193231582642 * 100), maxy - (0.009999999776482582 * 100), minz), + new Vector3(maxx - (0.11658430099487305 * 100), maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), + new Vector3(maxx - (0.12263774871826172 * 100), maxy - (0.009999999776482582 * 100), minz + (0.25000011920928955 * 100)), + new Vector3(minx, maxy - (0.009999999776482582 * 100), minz + (0.8700000941753387 * 100)), + new Vector3(maxx, maxy - (0.009999999776482582 * 100), minz + (0.8700000941753387 * 100)), + new Vector3(maxx - (0.12076938152313232 * 100), maxy - (0.009999999776482582 * 100), minz + (0.7500001192092896 * 100)), + new Vector3(minx + (0.11735659837722778 * 100), maxy - (0.009999999776482582 * 100), minz + (0.25000011920928955 * 100)), + new Vector3(minx + (0.12341010570526123 * 100), maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), + new Vector3(minx + (0.11642247438430786 * 100), maxy - (0.009999999776482582 * 100), minz), + new Vector3(minx + (0.11967337131500244 * 100), maxy - (0.009999999776482582 * 100), minz + (0.8700000941753387 * 100)), + new Vector3(minx, maxy - (0.009999999776482582 * 100), minz + (0.7500001192092896 * 100)), + new Vector3(maxx - (0.12032097578048706 * 100), maxy - (0.009999999776482582 * 100), minz + (0.8700000941753387 * 100)), + new Vector3(minx + (0.12389582395553589 * 100), maxy - (0.009999999776482582 * 100), maxz), + new Vector3(maxx, maxy - (0.009999999776482582 * 100), minz + (0.7500001192092896 * 100)), + new Vector3(minx + (0.11922496557235718 * 100), maxy - (0.009999999776482582 * 100), minz + (0.7500001192092896 * 100)), + new Vector3(minx + (0.11922496557235718 * 100), maxy, minz + (0.7500001192092896 * 100)), + new Vector3(minx + (0.12341010570526123 * 100), maxy, maxz - (0.12999999523162842 * 100)), + new Vector3(maxx - (0.12032097578048706 * 100), maxy, minz + (0.8700000941753387 * 100)), + new Vector3(minx + (0.11735659837722778 * 100), maxy, minz + (0.25000011920928955 * 100)), + new Vector3(maxx - (0.11658430099487305 * 100), maxy, maxz - (0.12999999523162842 * 100)), + new Vector3(maxx - (0.12263774871826172 * 100), maxy, minz + (0.25000011920928955 * 100)), + new Vector3(minx + (0.11967337131500244 * 100), maxy, minz + (0.8700000941753387 * 100)), + new Vector3(maxx - (0.12076938152313232 * 100), maxy, minz + (0.7500001192092896 * 100)), + new Vector3(minx + (0.13388586044311523 * 100), maxy, minz + (0.7375001013278961 * 100)), + new Vector3(minx + (0.1321108341217041 * 100), maxy, minz + (0.2625001072883606 * 100)), + new Vector3(maxx - (0.1372986137866974 * 100), maxy, minz + (0.2625001072883606 * 100)), + new Vector3(maxx - (0.13552364706993103 * 100), maxy, minz + (0.7375001013278961 * 100)), + new Vector3(minx + (0.13802427053451538 * 100), maxy, maxz - (0.14747536182403564 * 100)), + new Vector3(maxx - (0.13493508100509644 * 100), maxy, minz + (0.8866067305207253 * 100)), + new Vector3(maxx - (0.13138526678085327 * 100), maxy, maxz - (0.14747536182403564 * 100)), + new Vector3(minx + (0.13447439670562744 * 100), maxy, minz + (0.8866067305207253 * 100)), + new Vector3(minx + (0.13388586044311523 * 100), maxy - (0.0012233443558216095 * 100), minz + (0.7375001013278961 * 100)), + new Vector3(minx + (0.1321108341217041 * 100), maxy - (0.0012233443558216095 * 100), minz + (0.2625001072883606 * 100)), + new Vector3(maxx - (0.1372986137866974 * 100), maxy - (0.0012233443558216095 * 100), minz + (0.2625001072883606 * 100)), + new Vector3(maxx - (0.13552364706993103 * 100), maxy - (0.0012233443558216095 * 100), minz + (0.7375001013278961 * 100)), + new Vector3(minx + (0.13802427053451538 * 100), maxy - (0.0012233443558216095 * 100), maxz - (0.14747536182403564 * 100)), + new Vector3(maxx - (0.13493508100509644 * 100), maxy - (0.0012233443558216095 * 100), minz + (0.8866067305207253 * 100)), + new Vector3(maxx - (0.13138526678085327 * 100), maxy - (0.0012233443558216095 * 100), maxz - (0.14747536182403564 * 100)), + new Vector3(minx + (0.13447439670562744 * 100), maxy - (0.0012233443558216095 * 100), minz + (0.8866067305207253 * 100)) + ]; + let myfaces = [new Face3(0, 4, 15), new Face3(17, 0, 15), new Face3(3, 2, 21), new Face3(16, 3, 21), new Face3(4, 19, 23), new Face3(15, 4, 23), new Face3(10, 8, 6), new Face3(7, 10, 6), new Face3(16, 21, 8), new Face3(10, 16, 8), new Face3(12, 3, 16), new Face3(18, 12, 16), new Face3(17, 15, 11), new Face3(9, 17, 11), new Face3(23, 18, 20), new Face3(14, 23, 20), new Face3(19, 12, 18), new Face3(23, 19, 18), new Face3(9, 11, 5), new Face3(1, 9, 5), new Face3(11, 14, 22), new Face3(5, 11, 22), new Face3(20, 10, 7), new Face3(13, 20, 7), new Face3(14, 20, 13), new Face3(22, 14, 13), new Face3(28, 10, 20), new Face3(26, 28, 20), new Face3(25, 16, 10), new Face3(28, 25, 10), new Face3(30, 18, 16), new Face3(25, 30, 16), new Face3(26, 20, 18), new Face3(30, 26, 18), new Face3(29, 11, 15), new Face3(27, 29, 15), new Face3(24, 23, 14), new Face3(31, 24, 14), new Face3(27, 15, 23), new Face3(24, 27, 23), new Face3(31, 14, 11), new Face3(29, 31, 11), new Face3(32, 24, 31), new Face3(35, 32, 31), new Face3(33, 27, 24), new Face3(32, 33, 24), new Face3(34, 29, 27), new Face3(33, 34, 27), new Face3(35, 31, 29), new Face3(34, 35, 29), new Face3(38, 28, 26), new Face3(37, 38, 26), new Face3(37, 26, 30), new Face3(39, 37, 30), new Face3(36, 25, 28), new Face3(38, 36, 28), new Face3(39, 30, 25), new Face3(36, 39, 25), new Face3(42, 34, 33), new Face3(41, 42, 33), new Face3(47, 39, 36), new Face3(44, 47, 36), new Face3(43, 35, 34), new Face3(42, 43, 34), new Face3(46, 38, 37), new Face3(45, 46, 37), new Face3(41, 33, 32), new Face3(40, 41, 32), new Face3(44, 36, 38), new Face3(46, 44, 38), new Face3(40, 32, 35), new Face3(43, 40, 35), new Face3(45, 37, 39), new Face3(47, 45, 39), new Face3(10, 20, 18), new Face3(16, 10, 18), new Face3(15, 23, 14), new Face3(11, 15, 14), new Face3(48, 52, 63), new Face3(65, 48, 63), new Face3(51, 50, 69), new Face3(64, 51, 69), new Face3(52, 67, 71), new Face3(63, 52, 71), new Face3(58, 56, 54), new Face3(55, 58, 54), new Face3(64, 69, 56), new Face3(58, 64, 56), new Face3(60, 51, 64), new Face3(66, 60, 64), new Face3(65, 63, 59), new Face3(57, 65, 59), new Face3(71, 66, 68), new Face3(62, 71, 68), new Face3(67, 60, 66), new Face3(71, 67, 66), new Face3(57, 59, 53), new Face3(49, 57, 53), new Face3(59, 62, 70), new Face3(53, 59, 70), new Face3(68, 58, 55), new Face3(61, 68, 55), new Face3(62, 68, 61), new Face3(70, 62, 61), new Face3(76, 58, 68), new Face3(74, 76, 68), new Face3(73, 64, 58), new Face3(76, 73, 58), new Face3(78, 66, 64), new Face3(73, 78, 64), new Face3(74, 68, 66), new Face3(78, 74, 66), new Face3(77, 59, 63), new Face3(75, 77, 63), new Face3(72, 71, 62), new Face3(79, 72, 62), new Face3(75, 63, 71), new Face3(72, 75, 71), new Face3(79, 62, 59), new Face3(77, 79, 59), new Face3(80, 72, 79), new Face3(83, 80, 79), new Face3(81, 75, 72), new Face3(80, 81, 72), new Face3(82, 77, 75), new Face3(81, 82, 75), new Face3(83, 79, 77), new Face3(82, 83, 77), new Face3(86, 76, 74), new Face3(85, 86, 74), new Face3(85, 74, 78), new Face3(87, 85, 78), new Face3(84, 73, 76), new Face3(86, 84, 76), new Face3(87, 78, 73), new Face3(84, 87, 73), new Face3(90, 82, 81), new Face3(89, 90, 81), new Face3(95, 87, 84), new Face3(92, 95, 84), new Face3(91, 83, 82), new Face3(90, 91, 82), new Face3(94, 86, 85), new Face3(93, 94, 85), new Face3(89, 81, 80), new Face3(88, 89, 80), new Face3(92, 84, 86), new Face3(94, 92, 86), new Face3(88, 80, 83), new Face3(91, 88, 83), new Face3(93, 85, 87), new Face3(95, 93, 87), new Face3(58, 68, 66), new Face3(64, 58, 66), new Face3(63, 71, 62), new Face3(59, 63, 62), new Face3(21, 2, 50), new Face3(69, 21, 50), new Face3(69, 56, 8), new Face3(21, 69, 8), new Face3(56, 54, 6), new Face3(8, 56, 6), new Face3(7, 6, 54), new Face3(55, 7, 54), new Face3(13, 7, 55), new Face3(61, 13, 55), new Face3(22, 13, 61), new Face3(70, 22, 61), new Face3(70, 53, 5), new Face3(22, 70, 5), new Face3(53, 49, 1), new Face3(5, 53, 1), new Face3(9, 1, 49), new Face3(57, 9, 49), new Face3(17, 9, 57), new Face3(65, 17, 57), new Face3(65, 48, 0), new Face3(17, 65, 0), new Face3(4, 0, 48), new Face3(52, 4, 48), new Face3(19, 4, 52), new Face3(67, 19, 52), new Face3(67, 60, 12), new Face3(19, 67, 12), new Face3(60, 51, 3), new Face3(12, 60, 3), new Face3(51, 50, 2), new Face3(3, 51, 2)]; + + let normal_ids = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187]; + let glass_ids = []; + let i = 0; + for (i = 0; i < normal_ids.length; i++) { myfaces[normal_ids[i]].materialIndex = this.__doorMaterialId; } + for (i = 0; i < glass_ids.length; i++) { myfaces[glass_ids[i]].materialIndex = this.__glassMaterialId; } + return { vertices: myvertex, faces: myfaces, widthFactor: wf, depth: deep, side: side }; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/parametrics/doors/ParametricDoorType3.js b/src/blueprint/scripts/parametrics/doors/ParametricDoorType3.js new file mode 100644 index 0000000..721e071 --- /dev/null +++ b/src/blueprint/scripts/parametrics/doors/ParametricDoorType3.js @@ -0,0 +1,54 @@ +import { ParametricBaseDoor, DOOR_OPEN_DIRECTIONS } from "./ParametricBaseDoor"; +import { Vector3, Face3 } from "three"; + +export class ParametricDoorType3 extends ParametricBaseDoor { + constructor(parameters) { + super(parameters); + this.__doorType = 3; + } + + /** + * Based on the DoorType the below method will change + * This can be replaced by the appropriate door model class + * This method will change with logic based on the door model type + */ + __createForDoorModel(frameWidth, openingDirection) { + + let gap = 0.25; //0.002; + let sf = this.__frameSize; + let wf = frameWidth - (sf * 2) - (gap * 2); + let hf = (this.__frameHeight / 2) - (gap * 2); + let deep = (this.__frameThickness * 0.5); + + let side = 0, + minx = 0, + maxx = 0; + // # Open to right or left + if (openingDirection === DOOR_OPEN_DIRECTIONS.RIGHT) { + side = 1; + minx = wf * -1; + maxx = 0.0; + } else { + side = -1; + minx = 0.0; + maxx = wf; + } + let miny = 0.0; //# locked + let maxy = deep; + let minz = -hf; + let maxz = hf - sf - gap; + + let myvertex = [new Vector3(minx, (-1.5599653124809265e-08 * 100), maxz), new Vector3(maxx, (-1.5599653124809265e-08 * 100), maxz), new Vector3(minx, maxy, maxz), new Vector3(maxx, maxy, maxz), new Vector3(maxx - (0.10429960489273071 * 100), (-1.5832483768463135e-08 * 100), maxz), new Vector3(minx + (0.10429966449737549 * 100), (-1.5832483768463135e-08 * 100), maxz), new Vector3(minx + (0.10429966449737549 * 100), maxy, maxz), new Vector3(minx, (-1.5628756955266e-08 * 100), maxz - (0.5012519359588623 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), maxz - (0.5012525320053101 * 100)), new Vector3(minx, maxy, maxz - (0.5012519359588623 * 100)), new Vector3(maxx, maxy, maxz - (0.5012525320053101 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), (-1.5832483768463135e-08 * 100), maxz - (0.501252293586731 * 100)), new Vector3(minx + (0.10429966449737549 * 100), (-1.5832483768463135e-08 * 100), maxz - (0.5012521147727966 * 100)), new Vector3(minx + (0.10429966449737549 * 100), maxy, maxz - (0.5012521147727966 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy, maxz - (0.501252293586731 * 100)), new Vector3(minx + (0.11909735202789307 * 100), (-1.5832483768463135e-08 * 100), maxz), new Vector3(maxx - (0.11909729242324829 * 100), (-1.5832483768463135e-08 * 100), maxz), new Vector3(minx + (0.11909735202789307 * 100), maxy, maxz), new Vector3(minx + (0.11909735202789307 * 100), (-1.5832483768463135e-08 * 100), maxz - (0.5012521743774414 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), (-1.5832483768463135e-08 * 100), maxz - (0.5012522339820862 * 100)), new Vector3(minx, (-1.5629622041046787e-08 * 100), maxz - (0.516154021024704 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), maxz - (0.5161546468734741 * 100)), new Vector3(minx, maxy, maxz - (0.516154021024704 * 100)), new Vector3(maxx, maxy, maxz - (0.5161546468734741 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), (-1.5832483768463135e-08 * 100), maxz - (0.516154408454895 * 100)), new Vector3(minx + (0.10429966449737549 * 100), (-1.5832483768463135e-08 * 100), maxz - (0.5161541998386383 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy, maxz - (0.516154408454895 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), (-1.5832483768463135e-08 * 100), maxz - (0.5161543190479279 * 100)), new Vector3(minx + (0.11909735202789307 * 100), (-1.5832483768463135e-08 * 100), maxz - (0.5161542594432831 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy, maxz - (0.5161542594432831 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), miny + (0.009999999776482582 * 100), maxz), new Vector3(minx + (0.10429966449737549 * 100), miny + (0.009999999776482582 * 100), maxz), new Vector3(maxx - (0.10429960489273071 * 100), miny + (0.009999999776482582 * 100), maxz - (0.501252293586731 * 100)), new Vector3(minx + (0.10429966449737549 * 100), miny + (0.009999999776482582 * 100), maxz - (0.5012521147727966 * 100)), new Vector3(minx + (0.11909735202789307 * 100), miny + (0.009999999776482582 * 100), maxz), new Vector3(maxx - (0.11909729242324829 * 100), miny + (0.009999999776482582 * 100), maxz), new Vector3(minx + (0.11909735202789307 * 100), miny + (0.009999999776482582 * 100), maxz - (0.5012521743774414 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), miny + (0.009999999776482582 * 100), maxz - (0.5012522339820862 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), miny + (0.009999999776482582 * 100), maxz - (0.516154408454895 * 100)), new Vector3(minx + (0.10429966449737549 * 100), miny + (0.009999999776482582 * 100), maxz - (0.5161541998386383 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), miny + (0.009999999776482582 * 100), maxz - (0.5161543190479279 * 100)), new Vector3(minx + (0.11909735202789307 * 100), miny + (0.009999999776482582 * 100), maxz - (0.5161542594432831 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), (-1.5832483768463135e-08 * 100), maxz - (0.992994874715805 * 100)), new Vector3(minx + (0.11909735202789307 * 100), (-1.5832483768463135e-08 * 100), maxz - (0.9929947257041931 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy, maxz - (0.9929947257041931 * 100)), new Vector3(maxx - (0.11909738183021545 * 100), maxy, maxz - (0.992994874715805 * 100)), new Vector3(minx, (-1.565730833874568e-08 * 100), maxz - (0.9929942488670349 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), maxz - (0.9929954260587692 * 100)), new Vector3(minx, maxy, maxz - (0.9929942488670349 * 100)), new Vector3(maxx, maxy, maxz - (0.9929954260587692 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), (-1.5832483768463135e-08 * 100), maxz - (0.9929950088262558 * 100)), new Vector3(minx + (0.10429966449737549 * 100), (-1.5832483768463135e-08 * 100), maxz - (0.9929945915937424 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy, maxz - (0.9929950088262558 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), miny + (0.009999999776482582 * 100), maxz - (0.9929950088262558 * 100)), new Vector3(minx + (0.10429966449737549 * 100), miny + (0.009999999776482582 * 100), maxz - (0.9929945915937424 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), miny + (0.009999999776482582 * 100), maxz - (0.992994874715805 * 100)), new Vector3(minx + (0.11909735202789307 * 100), miny + (0.009999999776482582 * 100), maxz - (0.9929947257041931 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), maxy - (0.0004077646881341934 * 100), maxz - (0.992994874715805 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy - (0.0004077646881341934 * 100), maxz - (0.9929950088262558 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy, maxz), new Vector3(maxx - (0.11909729242324829 * 100), maxy, maxz), new Vector3(maxx - (0.11909738183021545 * 100), maxy, maxz - (0.5012522339820862 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy, maxz - (0.5012521743774414 * 100)), new Vector3(minx + (0.10429966449737549 * 100), maxy, maxz - (0.5161541998386383 * 100)), new Vector3(maxx - (0.11909738183021545 * 100), maxy, maxz - (0.5161543190479279 * 100)), new Vector3(minx + (0.10429966449737549 * 100), maxy, maxz - (0.9929945915937424 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy - (0.008999999612569809 * 100), maxz), new Vector3(minx + (0.10429966449737549 * 100), maxy - (0.008999999612569809 * 100), maxz), new Vector3(minx + (0.10429966449737549 * 100), maxy - (0.008999999612569809 * 100), maxz - (0.5012521147727966 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy - (0.008999999612569809 * 100), maxz - (0.501252293586731 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy - (0.008999999612569809 * 100), maxz), new Vector3(maxx - (0.11909729242324829 * 100), maxy - (0.008999999612569809 * 100), maxz), new Vector3(maxx - (0.11909738183021545 * 100), maxy - (0.008999999612569809 * 100), maxz - (0.5012522339820862 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy - (0.008999999612569809 * 100), maxz - (0.5012521743774414 * 100)), new Vector3(minx + (0.10429966449737549 * 100), maxy - (0.008999999612569809 * 100), maxz - (0.5161541998386383 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy - (0.008999999612569809 * 100), maxz - (0.516154408454895 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy - (0.008999999612569809 * 100), maxz - (0.5161542594432831 * 100)), new Vector3(maxx - (0.11909738183021545 * 100), maxy - (0.008999999612569809 * 100), maxz - (0.5161543190479279 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy - (0.008999999612569809 * 100), maxz - (0.9929947257041931 * 100)), new Vector3(maxx - (0.11909738183021545 * 100), maxy - (0.008999999612569809 * 100), maxz - (0.992994874715805 * 100)), new Vector3(minx + (0.10429966449737549 * 100), maxy - (0.008999999612569809 * 100), maxz - (0.9929945915937424 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy - (0.008999999612569809 * 100), maxz - (0.9929950088262558 * 100)), new Vector3(minx, (-1.5599653124809265e-08 * 100), minz), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz), new Vector3(minx, maxy, minz), new Vector3(maxx, maxy, minz), new Vector3(maxx - (0.10429960489273071 * 100), (-1.5832483768463135e-08 * 100), minz), new Vector3(minx + (0.10429966449737549 * 100), (-1.5832483768463135e-08 * 100), minz), new Vector3(minx + (0.10429966449737549 * 100), maxy, minz), new Vector3(minx, (-1.5628756955266e-08 * 100), minz + (0.5012519359588623 * 100)), new Vector3(minx, (-1.5657860785722733e-08 * 100), minz + (1.0025038719177246 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz + (0.5012525320053101 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz + (1.0025050640106201 * 100)), new Vector3(minx, maxy, minz + (0.5012519359588623 * 100)), new Vector3(minx, maxy, minz + (1.0025038719177246 * 100)), new Vector3(maxx, maxy, minz + (0.5012525320053101 * 100)), new Vector3(maxx, maxy, minz + (1.0025050640106201 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), (-1.5832483768463135e-08 * 100), minz + (0.501252293586731 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), (-1.5832483768463135e-08 * 100), minz + (1.0025046467781067 * 100)), new Vector3(minx + (0.10429966449737549 * 100), (-1.5832483768463135e-08 * 100), minz + (0.5012521147727966 * 100)), new Vector3(minx + (0.10429966449737549 * 100), (-1.5832483768463135e-08 * 100), minz + (1.0025042295455933 * 100)), new Vector3(minx + (0.10429966449737549 * 100), maxy, minz + (0.5012521147727966 * 100)), new Vector3(minx + (0.10429966449737549 * 100), maxy, minz + (1.0025042295455933 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy, minz + (0.501252293586731 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy, minz + (1.0025046467781067 * 100)), new Vector3(minx + (0.11909735202789307 * 100), (-1.5832483768463135e-08 * 100), minz), new Vector3(maxx - (0.11909729242324829 * 100), (-1.5832483768463135e-08 * 100), minz), new Vector3(minx + (0.11909735202789307 * 100), maxy, minz), new Vector3(minx + (0.11909735202789307 * 100), (-1.5832483768463135e-08 * 100), minz + (0.5012521743774414 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), (-1.5832483768463135e-08 * 100), minz + (0.5012522339820862 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy, minz + (1.0025043686230788 * 100)), new Vector3(minx, (-1.5629622041046787e-08 * 100), minz + (0.516154021024704 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz + (0.5161546468734741 * 100)), new Vector3(minx, maxy, minz + (0.516154021024704 * 100)), new Vector3(maxx, maxy, minz + (0.5161546468734741 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), (-1.5832483768463135e-08 * 100), minz + (0.516154408454895 * 100)), new Vector3(minx + (0.10429966449737549 * 100), (-1.5832483768463135e-08 * 100), minz + (0.5161541998386383 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy, minz + (0.516154408454895 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), (-1.5832483768463135e-08 * 100), minz + (0.5161543190479279 * 100)), new Vector3(minx + (0.11909735202789307 * 100), (-1.5832483768463135e-08 * 100), minz + (0.5161542594432831 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy, minz + (0.5161542594432831 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), miny + (0.009999999776482582 * 100), minz), new Vector3(minx + (0.10429966449737549 * 100), miny + (0.009999999776482582 * 100), minz), new Vector3(maxx - (0.10429960489273071 * 100), miny + (0.009999999776482582 * 100), minz + (0.501252293586731 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), miny + (0.009999999776482582 * 100), minz + (1.0025046467781067 * 100)), new Vector3(minx + (0.10429966449737549 * 100), miny + (0.009999999776482582 * 100), minz + (0.5012521147727966 * 100)), new Vector3(minx + (0.10429966449737549 * 100), miny + (0.009999999776482582 * 100), minz + (1.0025042295455933 * 100)), new Vector3(minx + (0.11909735202789307 * 100), miny + (0.009999999776482582 * 100), minz), new Vector3(maxx - (0.11909729242324829 * 100), miny + (0.009999999776482582 * 100), minz), new Vector3(minx + (0.11909735202789307 * 100), miny + (0.009999999776482582 * 100), minz + (0.5012521743774414 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), miny + (0.009999999776482582 * 100), minz + (0.5012522339820862 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), miny + (0.009999999776482582 * 100), minz + (0.516154408454895 * 100)), new Vector3(minx + (0.10429966449737549 * 100), miny + (0.009999999776482582 * 100), minz + (0.5161541998386383 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), miny + (0.009999999776482582 * 100), minz + (0.5161543190479279 * 100)), new Vector3(minx + (0.11909735202789307 * 100), miny + (0.009999999776482582 * 100), minz + (0.5161542594432831 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), (-1.5832483768463135e-08 * 100), minz + (0.992994874715805 * 100)), new Vector3(minx + (0.11909735202789307 * 100), (-1.5832483768463135e-08 * 100), minz + (0.9929947257041931 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy, minz + (0.9929947257041931 * 100)), new Vector3(maxx - (0.11909738183021545 * 100), maxy, minz + (0.992994874715805 * 100)), new Vector3(minx, (-1.565730833874568e-08 * 100), minz + (0.9929942488670349 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz + (0.9929954260587692 * 100)), new Vector3(minx, maxy, minz + (0.9929942488670349 * 100)), new Vector3(maxx, maxy, minz + (0.9929954260587692 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), (-1.5832483768463135e-08 * 100), minz + (0.9929950088262558 * 100)), new Vector3(minx + (0.10429966449737549 * 100), (-1.5832483768463135e-08 * 100), minz + (0.9929945915937424 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy, minz + (0.9929950088262558 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), miny + (0.009999999776482582 * 100), minz + (0.9929950088262558 * 100)), new Vector3(minx + (0.10429966449737549 * 100), miny + (0.009999999776482582 * 100), minz + (0.9929945915937424 * 100)), new Vector3(minx + (0.11909735202789307 * 100), miny + (0.009999999776482582 * 100), minz + (1.0025043686231356 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), miny + (0.009999999776482582 * 100), minz + (1.0025045077006212 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy - (0.0004077646881341934 * 100), minz + (1.0025046467781067 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), maxy - (0.0004077646881341934 * 100), minz + (1.0025045077006212 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), miny + (0.009999999776482582 * 100), minz + (0.992994874715805 * 100)), new Vector3(minx + (0.11909735202789307 * 100), miny + (0.009999999776482582 * 100), minz + (0.9929947257041931 * 100)), new Vector3(maxx - (0.11909729242324829 * 100), maxy - (0.0004077646881341934 * 100), minz + (0.992994874715805 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy - (0.0004077646881341934 * 100), minz + (0.9929950088262558 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy, minz), new Vector3(maxx - (0.11909729242324829 * 100), maxy, minz), new Vector3(maxx - (0.11909738183021545 * 100), maxy, minz + (0.5012522339820862 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy, minz + (0.5012521743774414 * 100)), new Vector3(maxx - (0.11909738183021545 * 100), maxy, minz + (1.0025045077005643 * 100)), new Vector3(minx + (0.10429966449737549 * 100), maxy, minz + (0.5161541998386383 * 100)), new Vector3(maxx - (0.11909738183021545 * 100), maxy, minz + (0.5161543190479279 * 100)), new Vector3(minx + (0.10429966449737549 * 100), maxy, minz + (0.9929945915937424 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy - (0.008999999612569809 * 100), minz), new Vector3(minx + (0.10429966449737549 * 100), maxy - (0.008999999612569809 * 100), minz), new Vector3(minx + (0.10429966449737549 * 100), maxy - (0.008999999612569809 * 100), minz + (0.5012521147727966 * 100)), new Vector3(minx + (0.10429966449737549 * 100), maxy - (0.008999999612569809 * 100), minz + (1.0025042295455933 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy - (0.008999999612569809 * 100), minz + (0.501252293586731 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy - (0.008999999612569809 * 100), minz + (1.0025046467781067 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy - (0.008999999612569809 * 100), minz), new Vector3(maxx - (0.11909729242324829 * 100), maxy - (0.008999999612569809 * 100), minz), new Vector3(maxx - (0.11909738183021545 * 100), maxy - (0.008999999612569809 * 100), minz + (0.5012522339820862 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy - (0.008999999612569809 * 100), minz + (0.5012521743774414 * 100)), new Vector3(maxx - (0.11909738183021545 * 100), maxy - (0.008999999612569809 * 100), minz + (1.0025045077005643 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy - (0.008999999612569809 * 100), minz + (1.0025043686230788 * 100)), new Vector3(minx + (0.10429966449737549 * 100), maxy - (0.008999999612569809 * 100), minz + (0.5161541998386383 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy - (0.008999999612569809 * 100), minz + (0.516154408454895 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy - (0.008999999612569809 * 100), minz + (0.5161542594432831 * 100)), new Vector3(maxx - (0.11909738183021545 * 100), maxy - (0.008999999612569809 * 100), minz + (0.5161543190479279 * 100)), new Vector3(minx + (0.11909735202789307 * 100), maxy - (0.008999999612569809 * 100), minz + (0.9929947257041931 * 100)), new Vector3(maxx - (0.11909738183021545 * 100), maxy - (0.008999999612569809 * 100), minz + (0.992994874715805 * 100)), new Vector3(minx + (0.10429966449737549 * 100), maxy - (0.008999999612569809 * 100), minz + (0.9929945915937424 * 100)), new Vector3(maxx - (0.10429960489273071 * 100), maxy - (0.008999999612569809 * 100), minz + (0.9929950088262558 * 100))]; + + let myfaces = [new Face3(5, 0, 2), new Face3(6, 5, 2), new Face3(8, 1, 3), new Face3(10, 8, 3), new Face3(92, 47, 49), new Face3(96, 92, 49), new Face3(9, 2, 0), new Face3(7, 9, 0), new Face3(94, 48, 46), new Face3(90, 94, 46), new Face3(7, 0, 5), new Face3(12, 7, 5), new Face3(90, 46, 51), new Face3(100, 90, 51), new Face3(96, 49, 52), new Face3(104, 96, 52), new Face3(11, 4, 1), new Face3(8, 11, 1), new Face3(98, 50, 47), new Face3(92, 98, 47), new Face3(39, 25, 12), new Face3(33, 39, 12), new Face3(13, 6, 2), new Face3(9, 13, 2), new Face3(33, 12, 5), new Face3(31, 33, 5), new Face3(18, 15, 16), new Face3(19, 18, 16), new Face3(34, 15, 18), new Face3(36, 34, 18), new Face3(21, 8, 10), new Face3(23, 21, 10), new Face3(22, 9, 7), new Face3(20, 22, 7), new Face3(20, 7, 12), new Face3(25, 20, 12), new Face3(23, 10, 14), new Face3(26, 23, 14), new Face3(24, 11, 8), new Face3(21, 24, 8), new Face3(126, 100, 51), new Face3(54, 126, 51), new Face3(32, 11, 24), new Face3(38, 32, 24), new Face3(37, 19, 16), new Face3(35, 37, 16), new Face3(33, 31, 34), new Face3(36, 33, 34), new Face3(37, 35, 30), new Face3(32, 37, 30), new Face3(39, 33, 36), new Face3(41, 39, 36), new Face3(40, 37, 32), new Face3(38, 40, 32), new Face3(41, 36, 37), new Face3(40, 41, 37), new Face3(36, 18, 19), new Face3(37, 36, 19), new Face3(40, 27, 28), new Face3(41, 40, 28), new Face3(48, 22, 20), new Face3(46, 48, 20), new Face3(30, 4, 11), new Face3(32, 30, 11), new Face3(47, 21, 23), new Face3(49, 47, 23), new Face3(38, 24, 50), new Face3(53, 38, 50), new Face3(46, 20, 25), new Face3(51, 46, 25), new Face3(49, 23, 26), new Face3(52, 49, 26), new Face3(50, 24, 21), new Face3(47, 50, 21), new Face3(43, 28, 27), new Face3(42, 43, 27), new Face3(54, 51, 25), new Face3(39, 54, 25), new Face3(53, 50, 98), new Face3(124, 53, 98), new Face3(148, 56, 55), new Face3(149, 148, 55), new Face3(56, 148, 126), new Face3(54, 56, 126), new Face3(56, 43, 42), new Face3(55, 56, 42), new Face3(55, 53, 124), new Face3(149, 55, 124), new Face3(71, 60, 61), new Face3(72, 71, 61), new Face3(66, 30, 35), new Face3(71, 66, 35), new Face3(70, 34, 31), new Face3(67, 70, 31), new Face3(69, 66, 71), new Face3(72, 69, 71), new Face3(169, 81, 79), new Face3(174, 169, 79), new Face3(73, 70, 67), new Face3(68, 73, 67), new Face3(175, 78, 80), new Face3(167, 175, 80), new Face3(174, 79, 78), new Face3(175, 174, 78), new Face3(75, 69, 72), new Face3(77, 75, 72), new Face3(76, 73, 68), new Face3(74, 76, 68), new Face3(77, 72, 73), new Face3(76, 77, 73), new Face3(81, 75, 77), new Face3(79, 81, 77), new Face3(78, 76, 74), new Face3(80, 78, 74), new Face3(72, 61, 62), new Face3(73, 72, 62), new Face3(74, 63, 65), new Face3(80, 74, 65), new Face3(1, 4, 59), new Face3(3, 1, 59), new Face3(10, 3, 59), new Face3(14, 10, 59), new Face3(102, 65, 48), new Face3(94, 102, 48), new Face3(16, 15, 17), new Face3(60, 16, 17), new Face3(61, 60, 17), new Face3(62, 61, 17), new Face3(63, 13, 9), new Face3(22, 63, 9), new Face3(41, 28, 43), new Face3(56, 41, 43), new Face3(55, 42, 27), new Face3(40, 55, 27), new Face3(65, 63, 22), new Face3(48, 65, 22), new Face3(45, 64, 29), new Face3(44, 45, 29), new Face3(54, 39, 41), new Face3(56, 54, 41), new Face3(55, 40, 38), new Face3(53, 55, 38), new Face3(78, 44, 29), new Face3(76, 78, 29), new Face3(68, 13, 63), new Face3(74, 68, 63), new Face3(73, 62, 17), new Face3(70, 73, 17), new Face3(169, 104, 52), new Face3(81, 169, 52), new Face3(76, 29, 64), new Face3(77, 76, 64), new Face3(67, 6, 13), new Face3(68, 67, 13), new Face3(69, 14, 59), new Face3(66, 69, 59), new Face3(79, 45, 44), new Face3(78, 79, 44), new Face3(77, 64, 45), new Face3(79, 77, 45), new Face3(75, 26, 14), new Face3(69, 75, 14), new Face3(81, 52, 26), new Face3(75, 81, 26), new Face3(80, 65, 102), new Face3(167, 80, 102), new Face3(87, 88, 84), new Face3(82, 87, 84), new Face3(91, 95, 85), new Face3(83, 91, 85), new Face3(92, 96, 142), new Face3(140, 92, 142), new Face3(93, 89, 82), new Face3(84, 93, 82), new Face3(94, 90, 139), new Face3(141, 94, 139), new Face3(89, 99, 87), new Face3(82, 89, 87), new Face3(90, 100, 144), new Face3(139, 90, 144), new Face3(96, 104, 145), new Face3(142, 96, 145), new Face3(97, 91, 83), new Face3(86, 97, 83), new Face3(98, 92, 140), new Face3(143, 98, 140), new Face3(132, 125, 99), new Face3(116, 132, 99), new Face3(101, 93, 84), new Face3(88, 101, 84), new Face3(125, 122, 87), new Face3(99, 125, 87), new Face3(108, 109, 106), new Face3(105, 108, 106), new Face3(127, 129, 108), new Face3(105, 127, 108), new Face3(112, 114, 95), new Face3(91, 112, 95), new Face3(113, 111, 89), new Face3(93, 113, 89), new Face3(111, 116, 99), new Face3(89, 111, 99), new Face3(114, 117, 103), new Face3(95, 114, 103), new Face3(115, 112, 91), new Face3(97, 115, 91), new Face3(126, 147, 144), new Face3(100, 126, 144), new Face3(123, 131, 115), new Face3(97, 123, 115), new Face3(130, 128, 106), new Face3(109, 130, 106), new Face3(125, 129, 127), new Face3(122, 125, 127), new Face3(130, 123, 121), new Face3(128, 130, 121), new Face3(132, 134, 129), new Face3(125, 132, 129), new Face3(133, 131, 123), new Face3(130, 133, 123), new Face3(134, 133, 130), new Face3(129, 134, 130), new Face3(129, 130, 109), new Face3(108, 129, 109), new Face3(133, 134, 119), new Face3(118, 133, 119), new Face3(141, 139, 111), new Face3(113, 141, 111), new Face3(121, 123, 97), new Face3(86, 121, 97), new Face3(140, 142, 114), new Face3(112, 140, 114), new Face3(131, 146, 143), new Face3(115, 131, 143), new Face3(139, 144, 116), new Face3(111, 139, 116), new Face3(142, 145, 117), new Face3(114, 142, 117), new Face3(143, 140, 112), new Face3(115, 143, 112), new Face3(136, 135, 118), new Face3(119, 136, 118), new Face3(147, 132, 116), new Face3(144, 147, 116), new Face3(146, 124, 98), new Face3(143, 146, 98), new Face3(148, 149, 152), new Face3(153, 148, 152), new Face3(153, 147, 126), new Face3(148, 153, 126), new Face3(153, 152, 135), new Face3(136, 153, 135), new Face3(152, 149, 124), new Face3(146, 152, 124), new Face3(171, 172, 158), new Face3(157, 171, 158), new Face3(164, 171, 128), new Face3(121, 164, 128), new Face3(170, 165, 122), new Face3(127, 170, 122), new Face3(168, 172, 171), new Face3(164, 168, 171), new Face3(169, 174, 181), new Face3(183, 169, 181), new Face3(173, 166, 165), new Face3(170, 173, 165), new Face3(175, 167, 182), new Face3(180, 175, 182), new Face3(174, 175, 180), new Face3(181, 174, 180), new Face3(177, 179, 172), new Face3(168, 177, 172), new Face3(178, 176, 166), new Face3(173, 178, 166), new Face3(179, 178, 173), new Face3(172, 179, 173), new Face3(183, 181, 179), new Face3(177, 183, 179), new Face3(180, 182, 176), new Face3(178, 180, 176), new Face3(172, 173, 159), new Face3(158, 172, 159), new Face3(176, 182, 163), new Face3(161, 176, 163), new Face3(83, 85, 156), new Face3(86, 83, 156), new Face3(95, 103, 156), new Face3(85, 95, 156), new Face3(102, 94, 141), new Face3(163, 102, 141), new Face3(106, 157, 107), new Face3(105, 106, 107), new Face3(158, 159, 107), new Face3(157, 158, 107), new Face3(161, 113, 93), new Face3(101, 161, 93), new Face3(134, 153, 136), new Face3(119, 134, 136), new Face3(152, 133, 118), new Face3(135, 152, 118), new Face3(163, 141, 113), new Face3(161, 163, 113), new Face3(138, 137, 120), new Face3(162, 138, 120), new Face3(147, 153, 134), new Face3(132, 147, 134), new Face3(152, 146, 131), new Face3(133, 152, 131), new Face3(180, 178, 120), new Face3(137, 180, 120), new Face3(166, 176, 161), new Face3(101, 166, 161), new Face3(173, 170, 107), new Face3(159, 173, 107), new Face3(169, 183, 145), new Face3(104, 169, 145), new Face3(178, 179, 162), new Face3(120, 178, 162), new Face3(165, 166, 101), new Face3(88, 165, 101), new Face3(175, 174, 160), new Face3(110, 175, 160), new Face3(168, 164, 156), new Face3(103, 168, 156), new Face3(181, 180, 137), new Face3(138, 181, 137), new Face3(179, 181, 138), new Face3(162, 179, 138), new Face3(177, 168, 103), new Face3(117, 177, 103), new Face3(183, 177, 117), new Face3(145, 183, 117), new Face3(182, 167, 102), new Face3(163, 182, 102)]; + + let normal_ids = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333]; + let glass_ids = []; + let i = 0; + for (i = 0; i < normal_ids.length; i++) { myfaces[normal_ids[i]].materialIndex = this.__doorMaterialId; } + for (i = 0; i < glass_ids.length; i++) { myfaces[glass_ids[i]].materialIndex = this.__glassMaterialId; } + + + return { vertices: myvertex, faces: myfaces, widthFactor: wf, depth: deep, side: side }; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/parametrics/doors/ParametricDoorType4.js b/src/blueprint/scripts/parametrics/doors/ParametricDoorType4.js new file mode 100644 index 0000000..99d6c2d --- /dev/null +++ b/src/blueprint/scripts/parametrics/doors/ParametricDoorType4.js @@ -0,0 +1,55 @@ +import { ParametricBaseDoor, DOOR_OPEN_DIRECTIONS } from "./ParametricBaseDoor"; +import { Vector3, Face3 } from "three"; + +export class ParametricDoorType4 extends ParametricBaseDoor { + constructor(parameters) { + super(parameters); + this.__doorType = 4; + } + + /** + * Based on the DoorType the below method will change + * This can be replaced by the appropriate door model class + * This method will change with logic based on the door model type + */ + __createForDoorModel(frameWidth, openingDirection) { + + let gap = 0.25; //0.002; + let sf = this.__frameSize; + let wf = frameWidth - (sf * 2) - (gap * 2); + let hf = (this.__frameHeight / 2) - (gap * 2); + let deep = (this.__frameThickness * 0.5); + + let side = 0, + minx = 0, + maxx = 0; + // # Open to right or left + if (openingDirection === DOOR_OPEN_DIRECTIONS.RIGHT) { + side = 1; + minx = wf * -1; + maxx = 0.0; + } else { + side = -1; + minx = 0.0; + maxx = wf; + } + let miny = 0.0; //# locked + let maxy = deep; + let minz = -hf; + let maxz = hf - sf - gap; + + let myvertex = [new Vector3(minx, (-1.57160684466362e-08 * 100), minz + (2.384185791015625e-06 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz), new Vector3(minx, (-1.5599653124809265e-08 * 100), maxz), new Vector3(minx, (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx, (-1.57160684466362e-08 * 100), minz + (0.2500007152557373 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz + (0.25000011920928955 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), maxz), new Vector3(maxx, (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11968576163053513 * 100), (-1.5599653124809265e-08 * 100), maxz), new Vector3(maxx - (0.11968576163053513 * 100), (-1.5599653124809265e-08 * 100), minz), new Vector3(maxx - (0.11968576163053513 * 100), (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11968576163053513 * 100), (-1.5599653124809265e-08 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx + (0.12030857801437378 * 100), (-1.5832483768463135e-08 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx + (0.12030857801437378 * 100), (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx + (0.12030857801437378 * 100), (-1.5832483768463135e-08 * 100), minz), new Vector3(minx + (0.12030857801437378 * 100), (-1.5599653124809265e-08 * 100), maxz), new Vector3(minx + (0.12030857801437378 * 100), (-0.010000014677643776 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx + (0.12030857801437378 * 100), (-0.010000014677643776 * 100), minz + (0.25000011920928955 * 100)), new Vector3(maxx - (0.11968576163053513 * 100), (-0.010000014677643776 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11968576163053513 * 100), (-0.010000014677643776 * 100), minz + (0.25000011920928955 * 100)), new Vector3(maxx - (0.1353275030851364 * 100), (-0.009388341568410397 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275030851364 * 100), (-0.009388341568410397 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx + (0.13506758213043213 * 100), (-0.009388341568410397 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275030851364 * 100), (-0.008776669390499592 * 100), minz + (0.26250016689300537 * 100)), new Vector3(minx + (0.13506758213043213 * 100), (-0.009388341568410397 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(maxx - (0.1353275030851364 * 100), (-0.0003883419558405876 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275030851364 * 100), (-0.0003883419558405876 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx + (0.13506758213043213 * 100), (-0.0003883419558405876 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275030851364 * 100), miny + (0.010223344899713993 * 100), minz + (0.26250016689300537 * 100)), new Vector3(minx + (0.13506758213043213 * 100), (-0.0003883419558405876 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx, maxy - (0.009999999776482582 * 100), minz + (2.384185791015625e-06 * 100)), new Vector3(maxx, maxy - (0.009999999776482582 * 100), minz), new Vector3(minx, maxy - (0.009999999776482582 * 100), maxz), new Vector3(minx, maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx, maxy - (0.009999999776482582 * 100), minz + (0.2500007152557373 * 100)), new Vector3(maxx, maxy - (0.009999999776482582 * 100), minz + (0.25000011920928955 * 100)), new Vector3(maxx, maxy - (0.009999999776482582 * 100), maxz), new Vector3(maxx, maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11968576908111572 * 100), maxy - (0.009999999776482582 * 100), maxz), new Vector3(maxx - (0.11968576908111572 * 100), maxy - (0.009999999776482582 * 100), minz), new Vector3(maxx - (0.11968576908111572 * 100), maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11968576908111572 * 100), maxy - (0.009999999776482582 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx + (0.12030857801437378 * 100), maxy - (0.009999999776482582 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx + (0.12030857801437378 * 100), maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx + (0.12030857801437378 * 100), maxy - (0.009999999776482582 * 100), minz), new Vector3(minx + (0.12030857801437378 * 100), maxy - (0.009999999776482582 * 100), maxz), new Vector3(minx + (0.12030857801437378 * 100), maxy, maxz - (0.12999999523162842 * 100)), new Vector3(minx + (0.12030857801437378 * 100), maxy, minz + (0.25000011920928955 * 100)), new Vector3(maxx - (0.11968576908111572 * 100), maxy, maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11968576908111572 * 100), maxy, minz + (0.25000011920928955 * 100)), new Vector3(maxx - (0.1353275179862976 * 100), maxy - (0.0006116721779108047 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275179862976 * 100), maxy - (0.0006116721779108047 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx + (0.13506758213043213 * 100), maxy - (0.0006116721779108047 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275179862976 * 100), maxy - (0.0012233462184667587 * 100), minz + (0.26250016689300537 * 100)), new Vector3(minx + (0.13506758213043213 * 100), maxy - (0.0006116721779108047 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(maxx - (0.1353275179862976 * 100), maxy - (0.009611671790480614 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275179862976 * 100), maxy - (0.009611671790480614 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx + (0.13506758213043213 * 100), maxy - (0.009611671790480614 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275179862976 * 100), maxy - (0.010223345831036568 * 100), minz + (0.26250016689300537 * 100)), new Vector3(minx + (0.13506758213043213 * 100), maxy - (0.009611671790480614 * 100), maxz - (0.14747536182403564 * 100))]; + + let myfaces = [new Face3(0, 4, 12), new Face3(14, 0, 12), new Face3(3, 2, 15), new Face3(13, 3, 15), new Face3(10, 8, 6), new Face3(7, 10, 6), new Face3(13, 15, 8), new Face3(10, 13, 8), new Face3(14, 12, 11), new Face3(9, 14, 11), new Face3(9, 11, 5), new Face3(1, 9, 5), new Face3(16, 13, 10), new Face3(18, 16, 10), new Face3(19, 11, 12), new Face3(17, 19, 12), new Face3(12, 4, 3), new Face3(13, 12, 3), new Face3(10, 7, 5), new Face3(11, 10, 5), new Face3(17, 19, 23), new Face3(22, 17, 23), new Face3(20, 19, 18), new Face3(21, 20, 18), new Face3(24, 16, 17), new Face3(22, 24, 17), new Face3(13, 16, 17), new Face3(12, 13, 17), new Face3(18, 10, 11), new Face3(19, 18, 11), new Face3(16, 18, 21), new Face3(24, 16, 21), new Face3(29, 24, 22), new Face3(27, 29, 22), new Face3(29, 24, 21), new Face3(26, 29, 21), new Face3(25, 20, 21), new Face3(26, 25, 21), new Face3(27, 22, 23), new Face3(28, 27, 23), new Face3(27, 28, 25), new Face3(26, 29, 27), new Face3(27, 25, 26), new Face3(30, 34, 42), new Face3(44, 30, 42), new Face3(33, 32, 45), new Face3(43, 33, 45), new Face3(40, 38, 36), new Face3(37, 40, 36), new Face3(43, 45, 38), new Face3(40, 43, 38), new Face3(44, 42, 41), new Face3(39, 44, 41), new Face3(39, 41, 35), new Face3(31, 39, 35), new Face3(46, 43, 40), new Face3(48, 46, 40), new Face3(49, 41, 42), new Face3(47, 49, 42), new Face3(42, 34, 33), new Face3(43, 42, 33), new Face3(40, 37, 35), new Face3(41, 40, 35), new Face3(47, 49, 53), new Face3(52, 47, 53), new Face3(50, 49, 48), new Face3(51, 50, 48), new Face3(54, 46, 47), new Face3(52, 54, 47), new Face3(43, 46, 47), new Face3(42, 43, 47), new Face3(48, 40, 41), new Face3(49, 48, 41), new Face3(46, 48, 51), new Face3(54, 46, 51), new Face3(59, 54, 52), new Face3(57, 59, 52), new Face3(59, 54, 51), new Face3(56, 59, 51), new Face3(55, 50, 51), new Face3(56, 55, 51), new Face3(57, 52, 53), new Face3(58, 57, 53), new Face3(57, 58, 55), new Face3(56, 59, 57), new Face3(57, 55, 56), new Face3(8, 6, 36), new Face3(38, 8, 36), new Face3(15, 8, 38), new Face3(45, 15, 38), new Face3(45, 32, 2), new Face3(15, 45, 2), new Face3(37, 36, 6), new Face3(7, 37, 6), new Face3(35, 37, 7), new Face3(5, 35, 7), new Face3(5, 1, 31), new Face3(35, 5, 31), new Face3(39, 31, 1), new Face3(9, 39, 1), new Face3(44, 39, 9), new Face3(14, 44, 9), new Face3(14, 0, 30), new Face3(44, 14, 30), new Face3(3, 4, 34), new Face3(33, 3, 34), new Face3(3, 2, 32), new Face3(33, 3, 32), new Face3(0, 4, 34), new Face3(30, 0, 34)]; + + let normal_ids = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109]; + let glass_ids = []; + let i = 0; + for (i = 0; i < normal_ids.length; i++) { myfaces[normal_ids[i]].materialIndex = this.__doorMaterialId; } + for (i = 0; i < glass_ids.length; i++) { myfaces[glass_ids[i]].materialIndex = this.__glassMaterialId; } + + + + return { vertices: myvertex, faces: myfaces, widthFactor: wf, depth: deep, side: side }; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/parametrics/doors/ParametricDoorType5.js b/src/blueprint/scripts/parametrics/doors/ParametricDoorType5.js new file mode 100644 index 0000000..f01913a --- /dev/null +++ b/src/blueprint/scripts/parametrics/doors/ParametricDoorType5.js @@ -0,0 +1,53 @@ +import { ParametricBaseDoor, DOOR_OPEN_DIRECTIONS } from "./ParametricBaseDoor"; +import { Vector3, Face3 } from "three"; + +export class ParametricDoorType5 extends ParametricBaseDoor { + constructor(parameters) { + super(parameters); + this.__doorType = 5; + } + + /** + * Based on the DoorType the below method will change + * This can be replaced by the appropriate door model class + * This method will change with logic based on the door model type + */ + __createForDoorModel(frameWidth, openingDirection) { + + let gap = 0.25; //0.002; + let sf = this.__frameSize; + let wf = frameWidth - (sf * 2) - (gap * 2); + let hf = (this.__frameHeight / 2) - (gap * 2); + let deep = (this.__frameThickness * 0.5); + + let side = 0, + minx = 0, + maxx = 0; + // # Open to right or left + if (openingDirection === DOOR_OPEN_DIRECTIONS.RIGHT) { + side = 1; + minx = wf * -1; + maxx = 0.0; + } else { + side = -1; + minx = 0.0; + maxx = wf; + } + let miny = 0.0; //# locked + let maxy = deep; + let minz = -hf; + let maxz = hf - sf - gap; + + let myvertex = [new Vector3(minx, (-1.57160684466362e-08 * 100), minz + (2.384185791015625e-06 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz), new Vector3(minx, (-1.5599653124809265e-08 * 100), maxz), new Vector3(minx, (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx, (-1.57160684466362e-08 * 100), minz + (0.2500007152557373 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz + (0.25000011920928955 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), maxz), new Vector3(maxx, (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11968576163053513 * 100), (-1.5599653124809265e-08 * 100), maxz), new Vector3(maxx - (0.11968576163053513 * 100), (-1.5599653124809265e-08 * 100), minz), new Vector3(maxx - (0.11968576163053513 * 100), (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11968576163053513 * 100), (-1.5599653124809265e-08 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx + (0.12030857801437378 * 100), (-1.5832483768463135e-08 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx + (0.12030857801437378 * 100), (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx + (0.12030857801437378 * 100), (-1.5832483768463135e-08 * 100), minz), new Vector3(minx + (0.12030857801437378 * 100), (-1.5599653124809265e-08 * 100), maxz), new Vector3(minx + (0.12030857801437378 * 100), (-0.010000014677643776 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx + (0.12030857801437378 * 100), (-0.010000014677643776 * 100), minz + (0.25000011920928955 * 100)), new Vector3(maxx - (0.11968576163053513 * 100), (-0.010000014677643776 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11968576163053513 * 100), (-0.010000014677643776 * 100), minz + (0.25000011920928955 * 100)), new Vector3(maxx - (0.1353275030851364 * 100), (-0.009388341568410397 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275030851364 * 100), (-0.009388341568410397 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx + (0.13506758213043213 * 100), (-0.009388341568410397 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275030851364 * 100), (-0.008776669390499592 * 100), minz + (0.26250016689300537 * 100)), new Vector3(minx + (0.13506758213043213 * 100), (-0.009388341568410397 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(maxx - (0.1353275030851364 * 100), (-0.0003883419558405876 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275030851364 * 100), (-0.0003883419558405876 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx + (0.13506758213043213 * 100), (-0.0003883419558405876 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275030851364 * 100), miny + (0.010223344899713993 * 100), minz + (0.26250016689300537 * 100)), new Vector3(minx + (0.13506758213043213 * 100), (-0.0003883419558405876 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx, maxy - (0.009999999776482582 * 100), minz + (2.384185791015625e-06 * 100)), new Vector3(maxx, maxy - (0.009999999776482582 * 100), minz), new Vector3(minx, maxy - (0.009999999776482582 * 100), maxz), new Vector3(minx, maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx, maxy - (0.009999999776482582 * 100), minz + (0.2500007152557373 * 100)), new Vector3(maxx, maxy - (0.009999999776482582 * 100), minz + (0.25000011920928955 * 100)), new Vector3(maxx, maxy - (0.009999999776482582 * 100), maxz), new Vector3(maxx, maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11968576908111572 * 100), maxy - (0.009999999776482582 * 100), maxz), new Vector3(maxx - (0.11968576908111572 * 100), maxy - (0.009999999776482582 * 100), minz), new Vector3(maxx - (0.11968576908111572 * 100), maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11968576908111572 * 100), maxy - (0.009999999776482582 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx + (0.12030857801437378 * 100), maxy - (0.009999999776482582 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx + (0.12030857801437378 * 100), maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx + (0.12030857801437378 * 100), maxy - (0.009999999776482582 * 100), minz), new Vector3(minx + (0.12030857801437378 * 100), maxy - (0.009999999776482582 * 100), maxz), new Vector3(minx + (0.12030857801437378 * 100), maxy, maxz - (0.12999999523162842 * 100)), new Vector3(minx + (0.12030857801437378 * 100), maxy, minz + (0.25000011920928955 * 100)), new Vector3(maxx - (0.11968576908111572 * 100), maxy, maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11968576908111572 * 100), maxy, minz + (0.25000011920928955 * 100)), new Vector3(maxx - (0.1353275179862976 * 100), maxy - (0.0006116721779108047 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275179862976 * 100), maxy - (0.0006116721779108047 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx + (0.13506758213043213 * 100), maxy - (0.0006116721779108047 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275179862976 * 100), maxy - (0.0012233462184667587 * 100), minz + (0.26250016689300537 * 100)), new Vector3(minx + (0.13506758213043213 * 100), maxy - (0.0006116721779108047 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(maxx - (0.1353275179862976 * 100), maxy - (0.009611671790480614 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275179862976 * 100), maxy - (0.009611671790480614 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx + (0.13506758213043213 * 100), maxy - (0.009611671790480614 * 100), minz + (0.26250016689300537 * 100)), new Vector3(maxx - (0.1353275179862976 * 100), maxy - (0.010223345831036568 * 100), minz + (0.26250016689300537 * 100)), new Vector3(minx + (0.13506758213043213 * 100), maxy - (0.009611671790480614 * 100), maxz - (0.14747536182403564 * 100))]; + + let myfaces = [new Face3(0, 4, 12), new Face3(14, 0, 12), new Face3(3, 2, 15), new Face3(13, 3, 15), new Face3(10, 8, 6), new Face3(7, 10, 6), new Face3(13, 15, 8), new Face3(10, 13, 8), new Face3(14, 12, 11), new Face3(9, 14, 11), new Face3(9, 11, 5), new Face3(1, 9, 5), new Face3(16, 13, 10), new Face3(18, 16, 10), new Face3(19, 11, 12), new Face3(17, 19, 12), new Face3(12, 4, 3), new Face3(13, 12, 3), new Face3(10, 7, 5), new Face3(11, 10, 5), new Face3(17, 19, 23), new Face3(22, 17, 23), new Face3(20, 19, 18), new Face3(21, 20, 18), new Face3(24, 16, 17), new Face3(22, 24, 17), new Face3(13, 16, 17), new Face3(12, 13, 17), new Face3(18, 10, 11), new Face3(19, 18, 11), new Face3(16, 18, 21), new Face3(24, 16, 21), new Face3(29, 24, 22), new Face3(27, 29, 22), new Face3(29, 24, 21), new Face3(26, 29, 21), new Face3(25, 20, 21), new Face3(26, 25, 21), new Face3(27, 22, 23), new Face3(28, 27, 23), new Face3(27, 28, 25), new Face3(26, 29, 27), new Face3(27, 25, 26), new Face3(30, 34, 42), new Face3(44, 30, 42), new Face3(33, 32, 45), new Face3(43, 33, 45), new Face3(40, 38, 36), new Face3(37, 40, 36), new Face3(43, 45, 38), new Face3(40, 43, 38), new Face3(44, 42, 41), new Face3(39, 44, 41), new Face3(39, 41, 35), new Face3(31, 39, 35), new Face3(46, 43, 40), new Face3(48, 46, 40), new Face3(49, 41, 42), new Face3(47, 49, 42), new Face3(42, 34, 33), new Face3(43, 42, 33), new Face3(40, 37, 35), new Face3(41, 40, 35), new Face3(47, 49, 53), new Face3(52, 47, 53), new Face3(50, 49, 48), new Face3(51, 50, 48), new Face3(54, 46, 47), new Face3(52, 54, 47), new Face3(43, 46, 47), new Face3(42, 43, 47), new Face3(48, 40, 41), new Face3(49, 48, 41), new Face3(46, 48, 51), new Face3(54, 46, 51), new Face3(59, 54, 52), new Face3(57, 59, 52), new Face3(59, 54, 51), new Face3(56, 59, 51), new Face3(55, 50, 51), new Face3(56, 55, 51), new Face3(57, 52, 53), new Face3(58, 57, 53), new Face3(57, 58, 55), new Face3(56, 59, 57), new Face3(57, 55, 56), new Face3(8, 6, 36), new Face3(38, 8, 36), new Face3(15, 8, 38), new Face3(45, 15, 38), new Face3(45, 32, 2), new Face3(15, 45, 2), new Face3(37, 36, 6), new Face3(7, 37, 6), new Face3(35, 37, 7), new Face3(5, 35, 7), new Face3(5, 1, 31), new Face3(35, 5, 31), new Face3(39, 31, 1), new Face3(9, 39, 1), new Face3(44, 39, 9), new Face3(14, 44, 9), new Face3(14, 0, 30), new Face3(44, 14, 30), new Face3(3, 4, 34), new Face3(33, 3, 34), new Face3(3, 2, 32), new Face3(33, 3, 32), new Face3(0, 4, 34), new Face3(30, 0, 34)]; + + let normal_ids = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109]; + let glass_ids = [40, 41, 42, 83, 84, 85]; + let i = 0; + for (i = 0; i < normal_ids.length; i++) { myfaces[normal_ids[i]].materialIndex = this.__doorMaterialId; } + for (i = 0; i < glass_ids.length; i++) { myfaces[glass_ids[i]].materialIndex = this.__glassMaterialId; } + + return { vertices: myvertex, faces: myfaces, widthFactor: wf, depth: deep, side: side }; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/parametrics/doors/ParametricDoorType6.js b/src/blueprint/scripts/parametrics/doors/ParametricDoorType6.js new file mode 100644 index 0000000..1abd9ac --- /dev/null +++ b/src/blueprint/scripts/parametrics/doors/ParametricDoorType6.js @@ -0,0 +1,52 @@ +import { ParametricBaseDoor, DOOR_OPEN_DIRECTIONS } from "./ParametricBaseDoor"; +import { Vector3, Face3 } from "three"; + +export class ParametricDoorType6 extends ParametricBaseDoor { + constructor(parameters) { + super(parameters); + this.__doorType = 6; + } + + /** + * Based on the DoorType the below method will change + * This can be replaced by the appropriate door model class + * This method will change with logic based on the door model type + */ + __createForDoorModel(frameWidth, openingDirection) { + + let gap = 0.25; //0.002; + let sf = this.__frameSize; + let wf = frameWidth - (sf * 2) - (gap * 2); + let hf = (this.__frameHeight / 2) - (gap * 2); + let deep = (this.__frameThickness * 0.5); + + let side = 0, + minx = 0, + maxx = 0; + // # Open to right or left + if (openingDirection === DOOR_OPEN_DIRECTIONS.RIGHT) { + side = 1; + minx = wf * -1; + maxx = 0.0; + } else { + side = -1; + minx = 0.0; + maxx = wf; + } + let miny = 0.0; //# locked + let maxy = deep; + let minz = -hf; + let maxz = hf - sf - gap; + + let myvertex = [new Vector3(minx, (-1.57160684466362e-08 * 100), minz + (2.384185791015625e-06 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz), new Vector3(minx, (-1.5599653124809265e-08 * 100), maxz), new Vector3(minx, (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx, (-1.57160684466362e-08 * 100), minz + (0.2500007152557373 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz + (0.25000011920928955 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), maxz), new Vector3(maxx, (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11609852313995361 * 100), (-1.5599653124809265e-08 * 100), maxz), new Vector3(maxx - (0.12357193231582642 * 100), (-1.5599653124809265e-08 * 100), minz), new Vector3(maxx - (0.11658430099487305 * 100), (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.12263774871826172 * 100), (-1.5599653124809265e-08 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx, (-1.57160684466362e-08 * 100), minz + (0.8700000941753387 * 100)), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz + (0.8700000941753387 * 100)), new Vector3(maxx - (0.12076938152313232 * 100), (-1.5599653124809265e-08 * 100), minz + (0.7500001192092896 * 100)), new Vector3(minx + (0.11735659837722778 * 100), (-1.57160684466362e-08 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx + (0.12341010570526123 * 100), (-1.5599653124809265e-08 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx + (0.11642247438430786 * 100), (-1.57160684466362e-08 * 100), minz), new Vector3(minx + (0.11967337131500244 * 100), (-1.57160684466362e-08 * 100), minz + (0.8700000941753387 * 100)), new Vector3(minx, (-1.57160684466362e-08 * 100), minz + (0.7500001192092896 * 100)), new Vector3(maxx - (0.12032097578048706 * 100), (-1.5599653124809265e-08 * 100), minz + (0.8700000941753387 * 100)), new Vector3(minx + (0.12389582395553589 * 100), (-1.5599653124809265e-08 * 100), maxz), new Vector3(maxx, (-1.5599653124809265e-08 * 100), minz + (0.7500001192092896 * 100)), new Vector3(minx + (0.11922496557235718 * 100), (-1.57160684466362e-08 * 100), minz + (0.7500001192092896 * 100)), new Vector3(minx + (0.11922496557235718 * 100), (-0.010000014677643776 * 100), minz + (0.7500001192092896 * 100)), new Vector3(minx + (0.12341010570526123 * 100), (-0.010000014677643776 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.12032097578048706 * 100), (-0.010000014677643776 * 100), minz + (0.8700000941753387 * 100)), new Vector3(minx + (0.11735659837722778 * 100), (-0.010000014677643776 * 100), minz + (0.25000011920928955 * 100)), new Vector3(maxx - (0.11658430099487305 * 100), (-0.010000014677643776 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.12263774871826172 * 100), (-0.010000014677643776 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx + (0.11967337131500244 * 100), (-0.010000014677643776 * 100), minz + (0.8700000941753387 * 100)), new Vector3(maxx - (0.12076938152313232 * 100), (-0.010000014677643776 * 100), minz + (0.7500001192092896 * 100)), new Vector3(minx + (0.13388586044311523 * 100), (-0.010000014677643776 * 100), minz + (0.7375001013278961 * 100)), new Vector3(minx + (0.1321108341217041 * 100), (-0.010000014677643776 * 100), minz + (0.2625001072883606 * 100)), new Vector3(maxx - (0.1372986137866974 * 100), (-0.010000014677643776 * 100), minz + (0.2625001072883606 * 100)), new Vector3(maxx - (0.13552364706993103 * 100), (-0.010000014677643776 * 100), minz + (0.7375001013278961 * 100)), new Vector3(minx + (0.13802427053451538 * 100), (-0.010000014677643776 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(maxx - (0.13493508100509644 * 100), (-0.010000014677643776 * 100), minz + (0.8866067305207253 * 100)), new Vector3(maxx - (0.13138526678085327 * 100), (-0.010000014677643776 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx + (0.13447439670562744 * 100), (-0.010000014677643776 * 100), minz + (0.8866067305207253 * 100)), new Vector3(minx + (0.13388586044311523 * 100), (-0.008776669390499592 * 100), minz + (0.7375001013278961 * 100)), new Vector3(minx + (0.1321108341217041 * 100), (-0.008776669390499592 * 100), minz + (0.2625001072883606 * 100)), new Vector3(maxx - (0.1372986137866974 * 100), (-0.008776669390499592 * 100), minz + (0.2625001072883606 * 100)), new Vector3(maxx - (0.13552364706993103 * 100), (-0.008776669390499592 * 100), minz + (0.7375001013278961 * 100)), new Vector3(minx + (0.13802427053451538 * 100), (-0.008776669390499592 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(maxx - (0.13493508100509644 * 100), (-0.008776669390499592 * 100), minz + (0.8866067305207253 * 100)), new Vector3(maxx - (0.13138526678085327 * 100), (-0.008776669390499592 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx + (0.13447439670562744 * 100), (-0.008776669390499592 * 100), minz + (0.8866067305207253 * 100)), new Vector3(minx, maxy - (0.009999999776482582 * 100), minz + (2.384185791015625e-06 * 100)), new Vector3(maxx, maxy - (0.009999999776482582 * 100), minz), new Vector3(minx, maxy - (0.009999999776482582 * 100), maxz), new Vector3(minx, maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx, maxy - (0.009999999776482582 * 100), minz + (0.2500007152557373 * 100)), new Vector3(maxx, maxy - (0.009999999776482582 * 100), minz + (0.25000011920928955 * 100)), new Vector3(maxx, maxy - (0.009999999776482582 * 100), maxz), new Vector3(maxx, maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.11609852313995361 * 100), maxy - (0.009999999776482582 * 100), maxz), new Vector3(maxx - (0.12357193231582642 * 100), maxy - (0.009999999776482582 * 100), minz), new Vector3(maxx - (0.11658430099487305 * 100), maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.12263774871826172 * 100), maxy - (0.009999999776482582 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx, maxy - (0.009999999776482582 * 100), minz + (0.8700000941753387 * 100)), new Vector3(maxx, maxy - (0.009999999776482582 * 100), minz + (0.8700000941753387 * 100)), new Vector3(maxx - (0.12076938152313232 * 100), maxy - (0.009999999776482582 * 100), minz + (0.7500001192092896 * 100)), new Vector3(minx + (0.11735659837722778 * 100), maxy - (0.009999999776482582 * 100), minz + (0.25000011920928955 * 100)), new Vector3(minx + (0.12341010570526123 * 100), maxy - (0.009999999776482582 * 100), maxz - (0.12999999523162842 * 100)), new Vector3(minx + (0.11642247438430786 * 100), maxy - (0.009999999776482582 * 100), minz), new Vector3(minx + (0.11967337131500244 * 100), maxy - (0.009999999776482582 * 100), minz + (0.8700000941753387 * 100)), new Vector3(minx, maxy - (0.009999999776482582 * 100), minz + (0.7500001192092896 * 100)), new Vector3(maxx - (0.12032097578048706 * 100), maxy - (0.009999999776482582 * 100), minz + (0.8700000941753387 * 100)), new Vector3(minx + (0.12389582395553589 * 100), maxy - (0.009999999776482582 * 100), maxz), new Vector3(maxx, maxy - (0.009999999776482582 * 100), minz + (0.7500001192092896 * 100)), new Vector3(minx + (0.11922496557235718 * 100), maxy - (0.009999999776482582 * 100), minz + (0.7500001192092896 * 100)), new Vector3(minx + (0.11922496557235718 * 100), maxy, minz + (0.7500001192092896 * 100)), new Vector3(minx + (0.12341010570526123 * 100), maxy, maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.12032097578048706 * 100), maxy, minz + (0.8700000941753387 * 100)), new Vector3(minx + (0.11735659837722778 * 100), maxy, minz + (0.25000011920928955 * 100)), new Vector3(maxx - (0.11658430099487305 * 100), maxy, maxz - (0.12999999523162842 * 100)), new Vector3(maxx - (0.12263774871826172 * 100), maxy, minz + (0.25000011920928955 * 100)), new Vector3(minx + (0.11967337131500244 * 100), maxy, minz + (0.8700000941753387 * 100)), new Vector3(maxx - (0.12076938152313232 * 100), maxy, minz + (0.7500001192092896 * 100)), new Vector3(minx + (0.13388586044311523 * 100), maxy, minz + (0.7375001013278961 * 100)), new Vector3(minx + (0.1321108341217041 * 100), maxy, minz + (0.2625001072883606 * 100)), new Vector3(maxx - (0.1372986137866974 * 100), maxy, minz + (0.2625001072883606 * 100)), new Vector3(maxx - (0.13552364706993103 * 100), maxy, minz + (0.7375001013278961 * 100)), new Vector3(minx + (0.13802427053451538 * 100), maxy, maxz - (0.14747536182403564 * 100)), new Vector3(maxx - (0.13493508100509644 * 100), maxy, minz + (0.8866067305207253 * 100)), new Vector3(maxx - (0.13138526678085327 * 100), maxy, maxz - (0.14747536182403564 * 100)), new Vector3(minx + (0.13447439670562744 * 100), maxy, minz + (0.8866067305207253 * 100)), new Vector3(minx + (0.13388586044311523 * 100), maxy - (0.0012233443558216095 * 100), minz + (0.7375001013278961 * 100)), new Vector3(minx + (0.1321108341217041 * 100), maxy - (0.0012233443558216095 * 100), minz + (0.2625001072883606 * 100)), new Vector3(maxx - (0.1372986137866974 * 100), maxy - (0.0012233443558216095 * 100), minz + (0.2625001072883606 * 100)), new Vector3(maxx - (0.13552364706993103 * 100), maxy - (0.0012233443558216095 * 100), minz + (0.7375001013278961 * 100)), new Vector3(minx + (0.13802427053451538 * 100), maxy - (0.0012233443558216095 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(maxx - (0.13493508100509644 * 100), maxy - (0.0012233443558216095 * 100), minz + (0.8866067305207253 * 100)), new Vector3(maxx - (0.13138526678085327 * 100), maxy - (0.0012233443558216095 * 100), maxz - (0.14747536182403564 * 100)), new Vector3(minx + (0.13447439670562744 * 100), maxy - (0.0012233443558216095 * 100), minz + (0.8866067305207253 * 100))]; + + let myfaces = [new Face3(0, 4, 15), new Face3(17, 0, 15), new Face3(3, 2, 21), new Face3(16, 3, 21), new Face3(4, 19, 23), new Face3(15, 4, 23), new Face3(10, 8, 6), new Face3(7, 10, 6), new Face3(16, 21, 8), new Face3(10, 16, 8), new Face3(12, 3, 16), new Face3(18, 12, 16), new Face3(17, 15, 11), new Face3(9, 17, 11), new Face3(23, 18, 20), new Face3(14, 23, 20), new Face3(19, 12, 18), new Face3(23, 19, 18), new Face3(9, 11, 5), new Face3(1, 9, 5), new Face3(11, 14, 22), new Face3(5, 11, 22), new Face3(20, 10, 7), new Face3(13, 20, 7), new Face3(14, 20, 13), new Face3(22, 14, 13), new Face3(28, 10, 20), new Face3(26, 28, 20), new Face3(25, 16, 10), new Face3(28, 25, 10), new Face3(30, 18, 16), new Face3(25, 30, 16), new Face3(26, 20, 18), new Face3(30, 26, 18), new Face3(29, 11, 15), new Face3(27, 29, 15), new Face3(24, 23, 14), new Face3(31, 24, 14), new Face3(27, 15, 23), new Face3(24, 27, 23), new Face3(31, 14, 11), new Face3(29, 31, 11), new Face3(32, 24, 31), new Face3(35, 32, 31), new Face3(33, 27, 24), new Face3(32, 33, 24), new Face3(34, 29, 27), new Face3(33, 34, 27), new Face3(35, 31, 29), new Face3(34, 35, 29), new Face3(38, 28, 26), new Face3(37, 38, 26), new Face3(37, 26, 30), new Face3(39, 37, 30), new Face3(36, 25, 28), new Face3(38, 36, 28), new Face3(39, 30, 25), new Face3(36, 39, 25), new Face3(42, 34, 33), new Face3(41, 42, 33), new Face3(47, 39, 36), new Face3(44, 47, 36), new Face3(43, 35, 34), new Face3(42, 43, 34), new Face3(46, 38, 37), new Face3(45, 46, 37), new Face3(41, 33, 32), new Face3(40, 41, 32), new Face3(44, 36, 38), new Face3(46, 44, 38), new Face3(40, 32, 35), new Face3(43, 40, 35), new Face3(45, 37, 39), new Face3(47, 45, 39), new Face3(10, 20, 18), new Face3(16, 10, 18), new Face3(15, 23, 14), new Face3(11, 15, 14), new Face3(48, 52, 63), new Face3(65, 48, 63), new Face3(51, 50, 69), new Face3(64, 51, 69), new Face3(52, 67, 71), new Face3(63, 52, 71), new Face3(58, 56, 54), new Face3(55, 58, 54), new Face3(64, 69, 56), new Face3(58, 64, 56), new Face3(60, 51, 64), new Face3(66, 60, 64), new Face3(65, 63, 59), new Face3(57, 65, 59), new Face3(71, 66, 68), new Face3(62, 71, 68), new Face3(67, 60, 66), new Face3(71, 67, 66), new Face3(57, 59, 53), new Face3(49, 57, 53), new Face3(59, 62, 70), new Face3(53, 59, 70), new Face3(68, 58, 55), new Face3(61, 68, 55), new Face3(62, 68, 61), new Face3(70, 62, 61), new Face3(76, 58, 68), new Face3(74, 76, 68), new Face3(73, 64, 58), new Face3(76, 73, 58), new Face3(78, 66, 64), new Face3(73, 78, 64), new Face3(74, 68, 66), new Face3(78, 74, 66), new Face3(77, 59, 63), new Face3(75, 77, 63), new Face3(72, 71, 62), new Face3(79, 72, 62), new Face3(75, 63, 71), new Face3(72, 75, 71), new Face3(79, 62, 59), new Face3(77, 79, 59), new Face3(80, 72, 79), new Face3(83, 80, 79), new Face3(81, 75, 72), new Face3(80, 81, 72), new Face3(82, 77, 75), new Face3(81, 82, 75), new Face3(83, 79, 77), new Face3(82, 83, 77), new Face3(86, 76, 74), new Face3(85, 86, 74), new Face3(85, 74, 78), new Face3(87, 85, 78), new Face3(84, 73, 76), new Face3(86, 84, 76), new Face3(87, 78, 73), new Face3(84, 87, 73), new Face3(90, 82, 81), new Face3(89, 90, 81), new Face3(95, 87, 84), new Face3(92, 95, 84), new Face3(91, 83, 82), new Face3(90, 91, 82), new Face3(94, 86, 85), new Face3(93, 94, 85), new Face3(89, 81, 80), new Face3(88, 89, 80), new Face3(92, 84, 86), new Face3(94, 92, 86), new Face3(88, 80, 83), new Face3(91, 88, 83), new Face3(93, 85, 87), new Face3(95, 93, 87), new Face3(58, 68, 66), new Face3(64, 58, 66), new Face3(63, 71, 62), new Face3(59, 63, 62), new Face3(21, 2, 50), new Face3(69, 21, 50), new Face3(69, 56, 8), new Face3(21, 69, 8), new Face3(56, 54, 6), new Face3(8, 56, 6), new Face3(7, 6, 54), new Face3(55, 7, 54), new Face3(13, 7, 55), new Face3(61, 13, 55), new Face3(22, 13, 61), new Face3(70, 22, 61), new Face3(70, 53, 5), new Face3(22, 70, 5), new Face3(53, 49, 1), new Face3(5, 53, 1), new Face3(9, 1, 49), new Face3(57, 9, 49), new Face3(17, 9, 57), new Face3(65, 17, 57), new Face3(65, 48, 0), new Face3(17, 65, 0), new Face3(4, 0, 48), new Face3(52, 4, 48), new Face3(19, 4, 52), new Face3(67, 19, 52), new Face3(67, 60, 12), new Face3(19, 67, 12), new Face3(60, 51, 3), new Face3(12, 60, 3), new Face3(51, 50, 2), new Face3(3, 51, 2)]; + + let normal_ids = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187]; + let glass_ids = [74, 75, 152, 153]; + let i = 0; + for (i = 0; i < normal_ids.length; i++) { myfaces[normal_ids[i]].materialIndex = this.__doorMaterialId; } + for (i = 0; i < glass_ids.length; i++) { myfaces[glass_ids[i]].materialIndex = this.__glassMaterialId; } + return { vertices: myvertex, faces: myfaces, widthFactor: wf, depth: deep, side: side }; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/parametrics/doors/doorhandles/DoorHandleGenerator.js b/src/blueprint/scripts/parametrics/doors/doorhandles/DoorHandleGenerator.js new file mode 100644 index 0000000..9c46326 --- /dev/null +++ b/src/blueprint/scripts/parametrics/doors/doorhandles/DoorHandleGenerator.js @@ -0,0 +1,149 @@ +import { Handle_01_vertices, Handle_01_faces } from './Handle_01'; +import { Handle_02_vertices, Handle_02_faces } from './Handle_02'; +import { Handle_03_vertices, Handle_03_faces } from './Handle_03'; +import { Handle_04_vertices, Handle_04_faces } from './Handle_04'; +import { Geometry, Matrix4, Vector3 } from 'three/build/three.module'; + + +export class DoorHandleGenerator { + + static generate_handle(handleType, frontOrBack, doorSide, doorRatio, frame_width, frame_size, frame_thickness, doorOpenDirection, materialId) { + let handle = null; + switch (handleType) { + case 'HANDLE_01': + handle = DoorHandleGenerator.handle_model_01(materialId); + break; + case 'HANDLE_02': + handle = DoorHandleGenerator.handle_model_02(materialId); + break; + case 'HANDLE_03': + handle = DoorHandleGenerator.handle_model_03(materialId); + break; + case 'HANDLE_04': + handle = DoorHandleGenerator.handle_model_04(materialId); + break; + } + + if (handle) { + let side = 1; + let sf = frame_size; + let gap = 0.25; //0.002 + let wf = frame_width - (sf * 2) - (gap * 2); + let deep = (frame_thickness * 0.5) - (gap * 3); + + let offset = 10; + if (frontOrBack === 'Front') { + handle.applyMatrix4(new Matrix4().makeRotationAxis(new Vector3(1, 0, 0), -Math.PI * 0.5)); + handle.applyMatrix4(new Matrix4().makeTranslation(0, 0, deep)); + } else { + handle.applyMatrix4(new Matrix4().makeRotationAxis(new Vector3(1, 0, 0), Math.PI * 0.5)); + handle.applyMatrix4(new Matrix4().makeTranslation(0, 0, -deep)); + } + if (doorSide === 'Right' && doorOpenDirection !== 'BOTH_SIDES') { + handle.applyMatrix4(new Matrix4().makeRotationAxis(new Vector3(0, 0, 1), Math.PI)); + handle.applyMatrix4(new Matrix4().makeTranslation(-offset, 0, 0)); + } else if (doorSide === 'Left' && doorOpenDirection !== 'BOTH_SIDES') { + handle.applyMatrix4(new Matrix4().makeTranslation(offset, 0, 0)); + } else if (doorSide !== 'Right' && doorOpenDirection === 'BOTH_SIDES') { + handle.applyMatrix4(new Matrix4().makeRotationAxis(new Vector3(0, 0, 1), -Math.PI)); + } + + if (doorOpenDirection === 'BOTH_SIDES' && doorSide === 'Left') { + handle.applyMatrix4(new Matrix4().makeTranslation((wf * doorRatio) - offset, 0, 0)); + } + if (doorOpenDirection === 'BOTH_SIDES' && doorSide === 'Right') { + handle.applyMatrix4(new Matrix4().makeTranslation((-wf * doorRatio) + offset, 0, 0)); + } + + } + + return handle; + } + + // ---------------------------------------------- + // Handle model 01 + // ---------------------------------------------- + static handle_model_01(materialId = 4) { + let geometry = new Geometry(); + let vertices = []; + let faces = []; + Handle_01_vertices.forEach((vertex) => { + vertices.push(vertex.clone()); + }); + Handle_01_faces.forEach((face) => { + let face2 = face.clone(); + face2.materialIndex = materialId; + faces.push(face2); + }); + geometry.vertices = vertices; + geometry.faces = faces; + geometry.computeVertexNormals(); + geometry.computeFaceNormals(); + geometry.computeBoundingBox(); + return geometry; + } + + static handle_model_02(materialId = 4) { + let geometry = new Geometry(); + let vertices = []; + let faces = []; + Handle_02_vertices.forEach((vertex) => { + vertices.push(vertex.clone()); + }); + Handle_02_faces.forEach((face) => { + let face2 = face.clone(); + face2.materialIndex = materialId; + faces.push(face2); + }); + geometry.vertices = vertices; + geometry.faces = faces; + geometry.elementsNeedUpdate = true; + geometry.computeVertexNormals(); + geometry.computeFaceNormals(); + geometry.computeBoundingBox(); + return geometry; + } + + + static handle_model_03(materialId = 4) { + let geometry = new Geometry(); + + let vertices = []; + let faces = []; + Handle_03_vertices.forEach((vertex) => { + vertices.push(vertex.clone()); + }); + Handle_03_faces.forEach((face) => { + let face2 = face.clone(); + face2.materialIndex = materialId; + faces.push(face2); + }); + geometry.vertices = vertices; + geometry.faces = faces; + geometry.computeVertexNormals(); + geometry.computeFaceNormals(); + geometry.computeBoundingBox(); + return geometry; + } + + static handle_model_04(materialId = 4) { + let geometry = new Geometry(); + + let vertices = []; + let faces = []; + Handle_04_vertices.forEach((vertex) => { + vertices.push(vertex.clone()); + }); + Handle_04_faces.forEach((face) => { + let face2 = face.clone(); + face2.materialIndex = materialId; + faces.push(face2); + }); + geometry.vertices = vertices; + geometry.faces = faces; + geometry.computeVertexNormals(); + geometry.computeFaceNormals(); + geometry.computeBoundingBox(); + return geometry; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/parametrics/doors/doorhandles/Handle_01.js b/src/blueprint/scripts/parametrics/doors/doorhandles/Handle_01.js new file mode 100644 index 0000000..5804870 --- /dev/null +++ b/src/blueprint/scripts/parametrics/doors/doorhandles/Handle_01.js @@ -0,0 +1,5 @@ +import {Vector3, Face3} from 'three'; + + +export const Handle_01_vertices = [new Vector3(-3.019268035888672, -0.2780601382255554, -3.2815840244293213), new Vector3(-4.254585266113281, -0.29421406984329224, -1.3319121599197388), new Vector3(-4.349547386169434, -0.30718207359313965, 0.9742341041564941), new Vector3(-3.278707265853882, -0.31348931789398193, 3.018923282623291), new Vector3(-1.3289966583251953, -0.31144583225250244, 4.254283905029297), new Vector3(0.9771613478660583, -0.3015991449356079, 4.349301815032959), new Vector3(3.021834135055542, -0.286587655544281, 3.278517007827759), new Vector3(4.257152080535889, -0.2704337537288666, 1.3288456201553345), new Vector3(4.352114677429199, -0.2574657201766968, -0.9772998094558716), new Vector3(3.2812767028808594, -0.2511584162712097, -3.0219900608062744), new Vector3(1.331566333770752, -0.2532019019126892, -4.257351398468018), new Vector3(-0.974591851234436, -0.26304861903190613, -4.3523712158203125), new Vector3(-2.9022715091705322, -1.9589225053787231, -3.1718835830688477), new Vector3(-4.092833042144775, -1.974491000175476, -1.2928534746170044), new Vector3(-4.184355735778809, -1.986989140510559, 0.9297359585762024), new Vector3(-3.152317523956299, -1.993067741394043, 2.900343418121338), new Vector3(-1.2732502222061157, -1.9910985231399536, 4.090946197509766), new Vector3(0.9493513703346252, -1.9816086292266846, 4.18252420425415), new Vector3(2.919942855834961, -1.967141032218933, 3.150538682937622), new Vector3(4.1105055809021, -1.951572299003601, 1.271509051322937), new Vector3(4.202029228210449, -1.9390742778778076, -0.9510802030563354), new Vector3(3.169992446899414, -1.9329954385757446, -2.9216883182525635), new Vector3(1.2909256219863892, -1.9349647760391235, -4.112292766571045), new Vector3(-0.9316755533218384, -1.9444547891616821, -4.2038726806640625), new Vector3(0.0012834301451221108, -0.2823238968849182, -0.0015340081881731749), new Vector3(-1.446112036705017, -1.9612153768539429, -1.5906234979629517), new Vector3(-2.0411462783813477, -1.9689966440200806, -0.6514983773231506), new Vector3(-2.086888313293457, -1.9752429723739624, 0.4593351483345032), new Vector3(-1.5710833072662354, -1.9782811403274536, 1.4442298412322998), new Vector3(-0.6319396495819092, -1.9772969484329224, 2.0392844676971436), new Vector3(0.4788999557495117, -1.9725537300109863, 2.085054397583008), new Vector3(1.4637869596481323, -1.9653233289718628, 1.569275975227356), new Vector3(2.058821439743042, -1.957542061805725, 0.6301507949829102), new Vector3(2.104564666748047, -1.9512957334518433, -0.4806825816631317), new Vector3(1.5887597799301147, -1.948257327079773, -1.4655778408050537), new Vector3(0.6496162414550781, -1.9492419958114624, -2.0606329441070557), new Vector3(-0.4612230658531189, -1.9539846181869507, -2.1064038276672363), new Vector3(-1.4407693147659302, -3.1500906944274902, -1.5970885753631592), new Vector3(-2.0358033180236816, -3.1578714847564697, -0.6579633355140686), new Vector3(-2.081545829772949, -3.1641180515289307, 0.45287013053894043), new Vector3(-1.5657404661178589, -3.167156457901001, 1.4377648830413818), new Vector3(-0.6265968084335327, -3.1661722660064697, 2.0328197479248047), new Vector3(0.4842427968978882, -3.1614291667938232, 2.07858943939209), new Vector3(1.4691299200057983, -3.154198169708252, 1.5628106594085693), new Vector3(2.064164400100708, -3.1464171409606934, 0.6236858367919922), new Vector3(2.109907627105713, -3.1401708126068115, -0.4871475398540497), new Vector3(1.5941027402877808, -3.137132167816162, -1.4720429182052612), new Vector3(0.6549590229988098, -3.1381168365478516, -2.0670981407165527), new Vector3(-0.4558802545070648, -3.142859697341919, -2.1128687858581543), new Vector3(-1.4456579685211182, -2.062270164489746, -1.5911731719970703), new Vector3(-2.04069185256958, -2.0700509548187256, -0.652047872543335), new Vector3(-2.0864343643188477, -2.0762977600097656, 0.4587855637073517), new Vector3(-1.5706290006637573, -2.0793356895446777, 1.4436802864074707), new Vector3(-0.6314853429794312, -2.0783514976501465, 2.0387349128723145), new Vector3(0.47935420274734497, -2.0736083984375, 2.0845048427581787), new Vector3(1.4642411470413208, -2.066377639770508, 1.5687263011932373), new Vector3(2.0592758655548096, -2.058596611022949, 0.629601240158081), new Vector3(2.1050186157226562, -2.0523500442504883, -0.48123201727867126), new Vector3(1.5892138481140137, -2.049312114715576, -1.4661273956298828), new Vector3(0.6500704288482666, -2.0502963066101074, -2.061182737350464), new Vector3(-0.4607689082622528, -2.055039167404175, -2.1069533824920654), new Vector3(-1.2161787748336792, -3.150407552719116, -1.3532028198242188), new Vector3(-1.7193611860275269, -3.1569876670837402, -0.5590437650680542), new Vector3(-1.758042573928833, -3.1622700691223145, 0.3803180158138275), new Vector3(-1.3218590021133423, -3.164839029312134, 1.2131813764572144), new Vector3(-0.5276843905448914, -3.1640067100524902, 1.716381549835205), new Vector3(0.4116826355457306, -3.1599960327148438, 1.7550861835479736), new Vector3(1.2445393800735474, -3.153881072998047, 1.3189250230789185), new Vector3(1.7477223873138428, -3.147301435470581, 0.5247660875320435), new Vector3(1.7864046096801758, -3.142019271850586, -0.41459566354751587), new Vector3(1.350221037864685, -3.1394500732421875, -1.2474594116210938), new Vector3(0.5560466051101685, -3.140282154083252, -1.7506601810455322), new Vector3(-0.3833201825618744, -3.1442928314208984, -1.789365530014038), new Vector3(-1.8521819114685059, -0.9611732363700867, -0.5855358242988586), new Vector3(-1.3133114576339722, -0.9541265964508057, -1.4360202550888062), new Vector3(-1.8936067819595337, -0.9668300151824951, 0.42045003175735474), new Vector3(-1.4264869689941406, -0.9695814251899719, 1.3123842477798462), new Vector3(-0.5759854912757874, -0.968690037727356, 1.8512736558914185), new Vector3(0.43000587821006775, -0.9643946886062622, 1.892723560333252), new Vector3(1.3219326734542847, -0.957846462726593, 1.42562735080719), new Vector3(1.8608040809631348, -0.9507997632026672, 0.5751430988311768), new Vector3(1.902229905128479, -0.945142924785614, -0.43084266781806946), new Vector3(1.4351099729537964, -0.9423915147781372, -1.3227771520614624), new Vector3(0.5846087336540222, -0.9432829022407532, -1.8616670370101929), new Vector3(-0.42138242721557617, -0.9475781321525574, -1.9031176567077637), new Vector3(-1.2051070928573608, -2.431209087371826, -1.3337433338165283), new Vector3(-1.7024338245391846, -2.4377129077911377, -0.5488271713256836), new Vector3(-1.7406648397445679, -2.4429333209991455, 0.3796020746231079), new Vector3(-1.3095574378967285, -2.445472478866577, 1.2027722597122192), new Vector3(-0.5246255993843079, -2.4446499347686768, 1.7001159191131592), new Vector3(0.40380871295928955, -2.440685749053955, 1.7383700609207153), new Vector3(1.2269724607467651, -2.4346423149108887, 1.3072850704193115), new Vector3(1.724299430847168, -2.4281392097473145, 0.5223689079284668), new Vector3(1.7625315189361572, -2.4229183197021484, -0.40606021881103516), new Vector3(1.3314241170883179, -2.4203789234161377, -1.2292308807373047), new Vector3(0.5464925169944763, -2.421201705932617, -1.7265751361846924), new Vector3(-0.38194164633750916, -2.4251656532287598, -1.7648299932479858), new Vector3(-1.18931245803833, -5.945982456207275, -1.3528573513031006), new Vector3(-1.6866391897201538, -5.952486038208008, -0.5679412484169006), new Vector3(-1.7248703241348267, -5.957706451416016, 0.36048808693885803), new Vector3(-1.2937626838684082, -5.960245609283447, 1.1836583614349365), new Vector3(-0.5088310241699219, -5.959423065185547, 1.6810020208358765), new Vector3(0.4196033775806427, -5.955458641052246, 1.7192561626434326), new Vector3(1.242767095565796, -5.949415683746338, 1.2881710529327393), new Vector3(1.7400939464569092, -5.9429121017456055, 0.5032548904418945), new Vector3(1.778326153755188, -5.9376912117004395, -0.4251742362976074), new Vector3(1.3472188711166382, -5.935152053833008, -1.2483447790145874), new Vector3(0.5622872114181519, -5.935974597930908, -1.7456891536712646), new Vector3(-0.3661470115184784, -5.939938545227051, -1.7839438915252686), new Vector3(-1.1835092306137085, -7.237382411956787, -1.3598802089691162), new Vector3(-1.6808357238769531, -7.243884563446045, -0.5749640464782715), new Vector3(-1.7190667390823364, -7.249105930328369, 0.35346516966819763), new Vector3(-1.2879595756530762, -7.251645088195801, 1.1766353845596313), new Vector3(-0.5030277371406555, -7.250823020935059, 1.6739791631698608), new Vector3(0.42540663480758667, -7.246857643127441, 1.7122331857681274), new Vector3(1.2485703229904175, -7.240814685821533, 1.281148076057434), new Vector3(1.7458972930908203, -7.234311103820801, 0.4962320327758789), new Vector3(1.7841293811798096, -7.229091167449951, -0.43219709396362305), new Vector3(1.3530220985412598, -7.226551532745361, -1.2553677558898926), new Vector3(0.5680904984474182, -7.227374076843262, -1.7527120113372803), new Vector3(-0.3603437542915344, -7.2313385009765625, -1.7909668684005737), new Vector3(12.573517799377441, -6.936495780944824, -0.6631232500076294), new Vector3(12.688243865966797, -6.874354839324951, -0.35207703709602356), new Vector3(12.73995590209961, -6.840461730957031, 0.18020184338092804), new Vector3(12.714801788330078, -6.843896389007568, 0.7910898923873901), new Vector3(12.61951732635498, -6.883739471435547, 1.3169001340866089), new Vector3(12.47963809967041, -6.949316024780273, 1.6167418956756592), new Vector3(12.418614387512207, -6.165295600891113, -0.6511046886444092), new Vector3(12.533339500427246, -6.103155612945557, -0.34005850553512573), new Vector3(12.585052490234375, -6.069262504577637, 0.1922205090522766), new Vector3(12.559896469116211, -6.07269811630249, 0.8031083941459656), new Vector3(12.464613914489746, -6.1125407218933105, 1.3289188146591187), new Vector3(12.324734687805176, -6.178117275238037, 1.628760576248169), new Vector3(13.694042205810547, -1.9821431636810303, -0.6400278210639954), new Vector3(13.45047378540039, -1.8987802267074585, -0.6495885848999023), new Vector3(13.766084671020508, -1.8310067653656006, -0.3302387297153473), new Vector3(13.793155670166016, -1.7457325458526611, 0.2013142704963684), new Vector3(13.767997741699219, -1.7491679191589355, 0.8122023344039917), new Vector3(13.697357177734375, -1.840392827987671, 1.3387384414672852), new Vector3(13.600160598754883, -1.9949644804000854, 1.639837384223938), new Vector3(13.356593132019043, -1.9116017818450928, 1.6302766799926758), new Vector3(13.522516250610352, -1.7476449012756348, -0.33979952335357666), new Vector3(13.549588203430176, -1.662369966506958, 0.1917535960674286), new Vector3(13.524431228637695, -1.665805697441101, 0.8026416301727295), new Vector3(13.453790664672852, -1.757030725479126, 1.3291776180267334), new Vector3(0.03253093361854553, -7.239100933074951, -0.039367612451314926)]; +export let Handle_01_faces = [new Face3(24, 0, 1, null, 0x0000FF, 3), new Face3(24, 1, 2, null, 0x0000FF, 3), new Face3(24, 2, 3, null, 0x0000FF, 3), new Face3(24, 3, 4, null, 0x0000FF, 3), new Face3(24, 4, 5, null, 0x0000FF, 3), new Face3(24, 5, 6, null, 0x0000FF, 3), new Face3(24, 6, 7, null, 0x0000FF, 3), new Face3(24, 7, 8, null, 0x0000FF, 3), new Face3(24, 8, 9, null, 0x0000FF, 3), new Face3(24, 9, 10, null, 0x0000FF, 3), new Face3(24, 10, 11, null, 0x0000FF, 3), new Face3(11, 0, 24, null, 0x0000FF, 3), new Face3(0, 12, 13), new Face3(0, 13, 1), new Face3(1, 13, 14), new Face3(1, 14, 2), new Face3(2, 14, 15), new Face3(2, 15, 3), new Face3(3, 15, 16), new Face3(3, 16, 4), new Face3(4, 16, 17), new Face3(4, 17, 5), new Face3(5, 17, 18), new Face3(5, 18, 6), new Face3(6, 18, 19), new Face3(6, 19, 7), new Face3(7, 19, 20), new Face3(7, 20, 8), new Face3(8, 20, 21), new Face3(8, 21, 9), new Face3(9, 21, 22), new Face3(9, 22, 10), new Face3(10, 22, 23), new Face3(10, 23, 11), new Face3(12, 0, 11), new Face3(12, 11, 23), new Face3(13, 12, 25), new Face3(13, 25, 26), new Face3(14, 13, 26), new Face3(14, 26, 27), new Face3(15, 14, 27), new Face3(15, 27, 28), new Face3(16, 15, 28), new Face3(16, 28, 29), new Face3(17, 16, 29), new Face3(17, 29, 30), new Face3(18, 17, 30), new Face3(18, 30, 31), new Face3(19, 18, 31), new Face3(19, 31, 32), new Face3(20, 19, 32), new Face3(20, 32, 33), new Face3(21, 20, 33), new Face3(21, 33, 34), new Face3(22, 21, 34), new Face3(22, 34, 35), new Face3(23, 22, 35), new Face3(23, 35, 36), new Face3(12, 23, 36), new Face3(12, 36, 25), new Face3(25, 49, 50), new Face3(25, 50, 26), new Face3(49, 37, 38), new Face3(49, 38, 50), new Face3(26, 50, 51), new Face3(26, 51, 27), new Face3(50, 38, 39), new Face3(50, 39, 51), new Face3(27, 51, 52), new Face3(27, 52, 28), new Face3(51, 39, 40), new Face3(51, 40, 52), new Face3(28, 52, 53), new Face3(28, 53, 29), new Face3(52, 40, 41), new Face3(52, 41, 53), new Face3(29, 53, 54), new Face3(29, 54, 30), new Face3(53, 41, 42), new Face3(53, 42, 54), new Face3(30, 54, 55), new Face3(30, 55, 31), new Face3(54, 42, 43), new Face3(54, 43, 55), new Face3(31, 55, 56), new Face3(31, 56, 32), new Face3(55, 43, 44), new Face3(55, 44, 56), new Face3(32, 56, 57), new Face3(32, 57, 33), new Face3(56, 44, 45), new Face3(56, 45, 57), new Face3(33, 57, 58), new Face3(33, 58, 34), new Face3(57, 45, 46), new Face3(57, 46, 58), new Face3(34, 58, 59), new Face3(34, 59, 35), new Face3(58, 46, 47), new Face3(58, 47, 59), new Face3(35, 59, 60), new Face3(35, 60, 36), new Face3(59, 47, 48), new Face3(59, 48, 60), new Face3(36, 60, 49), new Face3(36, 49, 25), new Face3(60, 48, 37), new Face3(60, 37, 49), new Face3(38, 37, 61), new Face3(38, 61, 62), new Face3(39, 38, 62), new Face3(39, 62, 63), new Face3(40, 39, 63), new Face3(40, 63, 64), new Face3(41, 40, 64), new Face3(41, 64, 65), new Face3(42, 41, 65), new Face3(42, 65, 66), new Face3(43, 42, 66), new Face3(43, 66, 67), new Face3(44, 43, 67), new Face3(44, 67, 68), new Face3(45, 44, 68), new Face3(45, 68, 69), new Face3(46, 45, 69), new Face3(46, 69, 70), new Face3(47, 46, 70), new Face3(47, 70, 71), new Face3(48, 47, 71), new Face3(48, 71, 72), new Face3(37, 48, 72), new Face3(37, 72, 61), new Face3(62, 61, 74), new Face3(62, 74, 73), new Face3(63, 62, 73), new Face3(63, 73, 75), new Face3(64, 63, 75), new Face3(64, 75, 76), new Face3(65, 64, 76), new Face3(65, 76, 77), new Face3(66, 65, 77), new Face3(66, 77, 78), new Face3(67, 66, 78), new Face3(67, 78, 79), new Face3(68, 67, 79), new Face3(68, 79, 80), new Face3(69, 68, 80), new Face3(69, 80, 81), new Face3(70, 69, 81), new Face3(70, 81, 82), new Face3(71, 70, 82), new Face3(71, 82, 83), new Face3(72, 71, 83), new Face3(72, 83, 84), new Face3(61, 72, 84), new Face3(61, 84, 74), new Face3(86, 85, 97), new Face3(86, 97, 98), new Face3(87, 86, 98), new Face3(87, 98, 99), new Face3(88, 87, 99), new Face3(88, 99, 100), new Face3(89, 88, 100), new Face3(89, 100, 101), new Face3(90, 89, 101), new Face3(90, 101, 102), new Face3(91, 90, 102), new Face3(91, 102, 103), new Face3(92, 91, 103), new Face3(92, 103, 104), new Face3(93, 92, 104), new Face3(93, 104, 105), new Face3(94, 93, 105), new Face3(94, 105, 106), new Face3(95, 94, 106), new Face3(95, 106, 107), new Face3(96, 95, 107), new Face3(96, 107, 108), new Face3(97, 85, 96), new Face3(97, 96, 108), new Face3(98, 97, 109), new Face3(98, 109, 110), new Face3(99, 98, 110), new Face3(99, 110, 111), new Face3(100, 99, 111), new Face3(100, 111, 112), new Face3(101, 100, 112), new Face3(101, 112, 113), new Face3(102, 101, 113), new Face3(102, 113, 114), new Face3(108, 107, 119), new Face3(108, 119, 120), new Face3(108, 120, 109), new Face3(108, 109, 97), new Face3(119, 107, 127), new Face3(119, 127, 121), new Face3(118, 119, 121), new Face3(118, 121, 122), new Face3(117, 118, 122), new Face3(117, 122, 123), new Face3(116, 117, 123), new Face3(116, 123, 124), new Face3(115, 116, 124), new Face3(115, 124, 125), new Face3(114, 115, 125), new Face3(114, 125, 126), new Face3(102, 114, 126), new Face3(102, 126, 132), new Face3(107, 106, 128), new Face3(107, 128, 127), new Face3(106, 105, 129), new Face3(106, 129, 128), new Face3(105, 104, 130), new Face3(105, 130, 129), new Face3(104, 103, 131), new Face3(104, 131, 130), new Face3(103, 102, 132), new Face3(103, 132, 131), new Face3(121, 127, 134), new Face3(121, 134, 133), new Face3(122, 121, 133), new Face3(122, 133, 135), new Face3(123, 122, 135), new Face3(123, 135, 136), new Face3(124, 123, 136), new Face3(124, 136, 137), new Face3(125, 124, 137), new Face3(125, 137, 138), new Face3(126, 125, 138), new Face3(126, 138, 139), new Face3(132, 126, 139), new Face3(132, 139, 140), new Face3(127, 128, 141), new Face3(127, 141, 134), new Face3(128, 129, 142), new Face3(128, 142, 141), new Face3(129, 130, 143), new Face3(129, 143, 142), new Face3(130, 131, 144), new Face3(130, 144, 143), new Face3(131, 132, 140), new Face3(131, 140, 144), new Face3(138, 144, 140), new Face3(138, 140, 139), new Face3(137, 143, 144), new Face3(137, 144, 138), new Face3(136, 142, 143), new Face3(136, 143, 137), new Face3(135, 141, 142), new Face3(135, 142, 136), new Face3(133, 134, 141), new Face3(133, 141, 135), new Face3(110, 109, 145, null, 0x0000FF, 3), new Face3(111, 110, 145, null, 0x0000FF, 3), new Face3(112, 111, 145, null, 0x0000FF, 3), new Face3(113, 112, 145, null, 0x0000FF, 3), new Face3(114, 113, 145, null, 0x0000FF, 3), new Face3(115, 114, 145, null, 0x0000FF, 3), new Face3(116, 115, 145, null, 0x0000FF, 3), new Face3(117, 116, 145, null, 0x0000FF, 3), new Face3(118, 117, 145, null, 0x0000FF, 3), new Face3(119, 118, 145, null, 0x0000FF, 3), new Face3(120, 119, 145, null, 0x0000FF, 3), new Face3(109, 120, 145, null, 0x0000FF, 3)]; diff --git a/src/blueprint/scripts/parametrics/doors/doorhandles/Handle_02.js b/src/blueprint/scripts/parametrics/doors/doorhandles/Handle_02.js new file mode 100644 index 0000000..0d08543 --- /dev/null +++ b/src/blueprint/scripts/parametrics/doors/doorhandles/Handle_02.js @@ -0,0 +1,5 @@ +import {Vector3, Face3} from 'three'; + + +export const Handle_02_vertices = [new Vector3(-3.019268035888672, -0.2780601382255554, -3.2815840244293213), new Vector3(-4.254585266113281, -0.29421406984329224, -1.3319121599197388), new Vector3(-4.349547386169434, -0.30718207359313965, 0.9742341041564941), new Vector3(-3.278707265853882, -0.31348931789398193, 3.018923282623291), new Vector3(-1.3289966583251953, -0.31144583225250244, 4.254283905029297), new Vector3(0.9771613478660583, -0.3015991449356079, 4.349301815032959), new Vector3(3.021834135055542, -0.286587655544281, 3.278517007827759), new Vector3(4.257152080535889, -0.2704337537288666, 1.3288456201553345), new Vector3(4.352114677429199, -0.2574657201766968, -0.9772998094558716), new Vector3(3.2812767028808594, -0.2511584162712097, -3.0219900608062744), new Vector3(1.331566333770752, -0.2532019019126892, -4.257351398468018), new Vector3(-0.974591851234436, -0.26304861903190613, -4.3523712158203125), new Vector3(-2.9022715091705322, -1.9589225053787231, -3.1718835830688477), new Vector3(-4.092833042144775, -1.974491000175476, -1.2928534746170044), new Vector3(-4.184355735778809, -1.986989140510559, 0.9297359585762024), new Vector3(-3.152317523956299, -1.993067741394043, 2.900343418121338), new Vector3(-1.2732502222061157, -1.9910985231399536, 4.090946197509766), new Vector3(0.9493513703346252, -1.9816086292266846, 4.18252420425415), new Vector3(2.919942855834961, -1.967141032218933, 3.150538682937622), new Vector3(4.1105055809021, -1.951572299003601, 1.271509051322937), new Vector3(4.202029228210449, -1.9390742778778076, -0.9510802030563354), new Vector3(3.169992446899414, -1.9329954385757446, -2.9216883182525635), new Vector3(1.2909256219863892, -1.9349647760391235, -4.112292766571045), new Vector3(-0.9316755533218384, -1.9444547891616821, -4.2038726806640625), new Vector3(0.0012834301451221108, -0.5668943524360657, -0.0015340081881731749), new Vector3(-1.446112036705017, -1.9612153768539429, -1.5906234979629517), new Vector3(-2.0411462783813477, -1.9689966440200806, -0.6514983773231506), new Vector3(-2.086888313293457, -1.9752429723739624, 0.4593351483345032), new Vector3(-1.5710833072662354, -1.9782811403274536, 1.4442298412322998), new Vector3(-0.6319396495819092, -1.9772969484329224, 2.0392844676971436), new Vector3(0.4788999557495117, -1.9725537300109863, 2.085054397583008), new Vector3(1.4637869596481323, -1.9653233289718628, 1.569275975227356), new Vector3(2.058821439743042, -1.957542061805725, 0.6301507949829102), new Vector3(2.104564666748047, -1.9512957334518433, -0.4806825816631317), new Vector3(1.5887597799301147, -1.948257327079773, -1.4655778408050537), new Vector3(0.6496162414550781, -1.9492419958114624, -2.0606329441070557), new Vector3(-0.4612230658531189, -1.9539846181869507, -2.1064038276672363), new Vector3(-1.4407693147659302, -3.1500906944274902, -1.5970885753631592), new Vector3(-2.0358033180236816, -3.1578714847564697, -0.6579633355140686), new Vector3(-2.081545829772949, -3.1641180515289307, 0.45287013053894043), new Vector3(-1.5657404661178589, -3.167156457901001, 1.4377648830413818), new Vector3(-0.6265968084335327, -3.1661722660064697, 2.0328197479248047), new Vector3(0.4842427968978882, -3.1614291667938232, 2.07858943939209), new Vector3(1.4691299200057983, -3.154198169708252, 1.5628106594085693), new Vector3(2.064164400100708, -3.1464171409606934, 0.6236858367919922), new Vector3(2.109907627105713, -3.1401708126068115, -0.4871475398540497), new Vector3(1.5941027402877808, -3.137132167816162, -1.4720429182052612), new Vector3(0.6549590229988098, -3.1381168365478516, -2.0670981407165527), new Vector3(-0.4558802545070648, -3.142859697341919, -2.1128687858581543), new Vector3(-1.4456579685211182, -2.062270164489746, -1.5911731719970703), new Vector3(-2.04069185256958, -2.0700509548187256, -0.652047872543335), new Vector3(-2.0864343643188477, -2.0762977600097656, 0.4587855637073517), new Vector3(-1.5706290006637573, -2.0793356895446777, 1.4436802864074707), new Vector3(-0.6314853429794312, -2.0783514976501465, 2.0387349128723145), new Vector3(0.47935420274734497, -2.0736083984375, 2.0845048427581787), new Vector3(1.4642411470413208, -2.066377639770508, 1.5687263011932373), new Vector3(2.0592758655548096, -2.058596611022949, 0.629601240158081), new Vector3(2.1050186157226562, -2.0523500442504883, -0.48123201727867126), new Vector3(1.5892138481140137, -2.049312114715576, -1.4661273956298828), new Vector3(0.6500704288482666, -2.0502963066101074, -2.061182737350464), new Vector3(-0.4607689082622528, -2.055039167404175, -2.1069533824920654), new Vector3(-0.846520721912384, -3.267390727996826, -0.9529860615730286), new Vector3(-1.1987367868423462, -3.27199649810791, -0.397093266248703), new Vector3(-1.2258127927780151, -3.275693893432617, 0.26043808460235596), new Vector3(-0.9204944372177124, -3.277492046356201, 0.8434229493141174), new Vector3(-0.36459070444107056, -3.276909589767456, 1.1956512928009033), new Vector3(0.2929442524909973, -3.274102210998535, 1.2227436304092407), new Vector3(0.8759246468544006, -3.269821882247925, 0.9174410104751587), new Vector3(1.2281408309936523, -3.265216112136841, 0.3615483343601227), new Vector3(1.2552175521850586, -3.261518955230713, -0.2959829568862915), new Vector3(0.9498993158340454, -3.2597203254699707, -0.8789681792259216), new Vector3(0.3939957320690155, -3.260303020477295, -1.2311969995498657), new Vector3(-0.2635391354560852, -3.263110399246216, -1.2582899332046509), new Vector3(-1.6618385314941406, -4.475956916809082, -1.847565770149231), new Vector3(-2.3491361141204834, -4.4849443435668945, -0.7628244161605835), new Vector3(-2.4019711017608643, -4.492159366607666, 0.5202495455741882), new Vector3(-1.8061872720718384, -4.495668411254883, 1.6578571796417236), new Vector3(-0.7214244604110718, -4.494532108306885, 2.3451778888702393), new Vector3(0.5616565346717834, -4.489053726196289, 2.3980443477630615), new Vector3(1.6992552280426025, -4.480700969696045, 1.8022922277450562), new Vector3(2.386552572250366, -4.471714973449707, 0.7175509333610535), new Vector3(2.4393889904022217, -4.464499473571777, -0.5655227899551392), new Vector3(1.8436059951782227, -4.460989475250244, -1.7031309604644775), new Vector3(0.7588432431221008, -4.462126731872559, -2.3904528617858887), new Vector3(-0.5242375135421753, -4.467605113983154, -2.4433200359344482), new Vector3(-2.6277291774749756, -8.928065299987793, -2.9148523807525635), new Vector3(-3.7133281230926514, -8.94226360321045, -1.2014834880828857), new Vector3(-3.7967820167541504, -8.953658103942871, 0.8251562714576721), new Vector3(-2.8557300567626953, -8.959199905395508, 2.6220293045043945), new Vector3(-1.142327070236206, -8.957405090332031, 3.7076659202575684), new Vector3(0.8843236565589905, -8.948752403259277, 3.7911691665649414), new Vector3(2.681182384490967, -8.935558319091797, 2.8501667976379395), new Vector3(3.766781806945801, -8.921364784240723, 1.1367974281311035), new Vector3(3.850238084793091, -8.909966468811035, -0.8898418545722961), new Vector3(2.909186840057373, -8.904423713684082, -2.6867153644561768), new Vector3(1.1957839727401733, -8.906219482421875, -3.772353410720825), new Vector3(-0.8308665752410889, -8.914871215820312, -3.855858325958252), new Vector3(-1.406922698020935, -8.832839012145996, -1.589163064956665), new Vector3(-1.9932459592819214, -8.840507507324219, -0.6637864112854004), new Vector3(-2.038318634033203, -8.846661567687988, 0.43078529834747314), new Vector3(-1.5300642251968384, -8.849654197692871, 1.401261806488037), new Vector3(-0.6046692132949829, -8.848684310913086, 1.987605333328247), new Vector3(0.4899083971977234, -8.844012260437012, 2.0327045917510986), new Vector3(1.4603770971298218, -8.836885452270508, 1.5244770050048828), new Vector3(2.0467004776000977, -8.829219818115234, 0.5991001129150391), new Vector3(2.0917744636535645, -8.823062896728516, -0.49547120928764343), new Vector3(1.583520531654358, -8.820070266723633, -1.4659479856491089), new Vector3(0.6581255197525024, -8.821039199829102, -2.0522921085357666), new Vector3(-0.4364519417285919, -8.825712203979492, -2.0973925590515137), new Vector3(-0.6114304065704346, -8.5830659866333, -0.7253276109695435), new Vector3(-0.8724194765090942, -8.586480140686035, -0.31341639161109924), new Vector3(-0.892482578754425, -8.589219093322754, 0.17380833625793457), new Vector3(-0.6662442088127136, -8.590551376342773, 0.6057948470115662), new Vector3(-0.2543247640132904, -8.590120315551758, 0.8667927384376526), new Vector3(0.2329026162624359, -8.58803939819336, 0.8868677616119385), new Vector3(0.6648856401443481, -8.584868431091309, 0.6606413722038269), new Vector3(0.9258745908737183, -8.581456184387207, 0.24873000383377075), new Vector3(0.9459383487701416, -8.578715324401855, -0.23849454522132874), new Vector3(0.7197002172470093, -8.577383041381836, -0.6704810857772827), new Vector3(0.30778077244758606, -8.577814102172852, -0.9314795136451721), new Vector3(-0.1794464886188507, -8.579894065856934, -0.9515548944473267), new Vector3(0.026727881282567978, -8.479126930236816, -0.03234325721859932), new Vector3(-0.3782625198364258, -4.132713794708252, 1.244664192199707), new Vector3(0.9928271174430847, -4.1147847175598145, -0.9192845821380615), new Vector3(-1.2765675783157349, -4.13144588470459, 0.2691824436187744), new Vector3(-1.2483258247375488, -4.127589225769043, -0.4166610538959503), new Vector3(-0.2728599011898041, -4.118320941925049, -1.3149391412734985), new Vector3(-0.9044193029403687, -3.338594436645508, -1.0158588886260986), new Vector3(-1.2803142070770264, -3.3435099124908447, -0.4225943684577942), new Vector3(-1.3092105388641357, -3.3474557399749756, 0.27914169430732727), new Vector3(-0.9833661913871765, -3.349375009536743, 0.9013196229934692), new Vector3(-0.39008989930152893, -3.348752975463867, 1.2772276401519775), new Vector3(0.31164997816085815, -3.345757007598877, 1.3061413764953613), new Vector3(0.9338231682777405, -3.341188669204712, 0.9803138971328735), new Vector3(1.3097182512283325, -3.336273431777954, 0.38704946637153625), new Vector3(1.3386154174804688, -3.3323276042938232, -0.3146865665912628), new Vector3(1.0127710103988647, -3.3304080963134766, -0.9368648529052734), new Vector3(0.41949498653411865, -3.3310301303863525, -1.3127734661102295), new Vector3(-0.28224486112594604, -3.3340260982513428, -1.3416876792907715), new Vector3(-1.3213201761245728, -0.5427400469779968, 4.231791973114014), new Vector3(-3.003157377243042, -0.509520947933197, -3.2664780616760254), new Vector3(-3.261303186416626, -0.5447733998298645, 3.002594470977783), new Vector3(-4.232311725616455, -0.5255942940711975, -1.3265336751937866), new Vector3(-4.326800346374512, -0.5384976267814636, 0.9681065678596497), new Vector3(3.007803201675415, -0.5180059671401978, 3.2608938217163086), new Vector3(0.9733318090438843, -0.5329424738883972, 4.326335906982422), new Vector3(1.325969934463501, -0.48478683829307556, -4.237376689910889), new Vector3(4.331447601318359, -0.4890293478965759, -0.9736892580986023), new Vector3(4.236958026885986, -0.501932680606842, 1.3209501504898071), new Vector3(-0.9686821103096008, -0.4945843815803528, -4.3319220542907715), new Vector3(3.2659523487091064, -0.4827534854412079, -3.0081779956817627), new Vector3(-0.8809435367584229, -4.122784614562988, -0.9964894652366638), new Vector3(-0.9581024646759033, -4.133321285247803, 0.8772696256637573), new Vector3(0.3075847029685974, -4.129785537719727, 1.2729228734970093), new Vector3(0.9156670570373535, -4.125320911407471, 0.9544746279716492), new Vector3(1.28304922580719, -4.120517730712891, 0.37464621663093567), new Vector3(1.3112918138504028, -4.1166605949401855, -0.31119707226753235), new Vector3(0.41298723220825195, -4.115392208099365, -1.286679744720459), new Vector3(-1.20172917842865, -3.323627233505249, -0.39827409386634827), new Vector3(-1.2288755178451538, -3.327333927154541, 0.2609657645225525), new Vector3(-0.9227638840675354, -3.329136848449707, 0.8454654216766357), new Vector3(-0.3654157221317291, -3.328552722930908, 1.1986089944839478), new Vector3(0.29382774233818054, -3.325737953186035, 1.2257717847824097), new Vector3(0.8783228397369385, -3.3214468955993652, 0.9196758270263672), new Vector3(1.2314543724060059, -3.3168294429779053, 0.36233872175216675), new Vector3(1.2586013078689575, -3.313122272491455, -0.29690104722976685), new Vector3(0.9524897933006287, -3.311318874359131, -0.8814010620117188), new Vector3(0.3951417803764343, -3.3119029998779297, -1.234545111656189), new Vector3(-0.2641015946865082, -3.3147177696228027, -1.261708378791809), new Vector3(-0.8485979437828064, -3.319009304046631, -0.9556112885475159)]; +export let Handle_02_faces = [new Face3(24, 0, 1, null, 0x0000FF, 3), new Face3(24, 1, 2, null, 0x0000FF, 3), new Face3(24, 2, 3, null, 0x0000FF, 3), new Face3(24, 3, 4, null, 0x0000FF, 3), new Face3(24, 4, 5, null, 0x0000FF, 3), new Face3(24, 5, 6, null, 0x0000FF, 3), new Face3(24, 6, 7, null, 0x0000FF, 3), new Face3(24, 7, 8, null, 0x0000FF, 3), new Face3(24, 8, 9, null, 0x0000FF, 3), new Face3(24, 9, 10, null, 0x0000FF, 3), new Face3(24, 10, 11, null, 0x0000FF, 3), new Face3(11, 0, 24, null, 0x0000FF, 3), new Face3(140, 12, 13), new Face3(140, 13, 142), new Face3(142, 13, 14), new Face3(142, 14, 143), new Face3(143, 14, 15), new Face3(143, 15, 141), new Face3(141, 15, 16), new Face3(141, 16, 139), new Face3(139, 16, 17), new Face3(139, 17, 145), new Face3(145, 17, 18), new Face3(145, 18, 144), new Face3(144, 18, 19), new Face3(144, 19, 148), new Face3(148, 19, 20), new Face3(148, 20, 147), new Face3(147, 20, 21), new Face3(147, 21, 150), new Face3(150, 21, 22), new Face3(150, 22, 146), new Face3(146, 22, 23), new Face3(146, 23, 149), new Face3(140, 0, 11), new Face3(140, 11, 149), new Face3(13, 12, 25), new Face3(13, 25, 26), new Face3(14, 13, 26), new Face3(14, 26, 27), new Face3(15, 14, 27), new Face3(15, 27, 28), new Face3(16, 15, 28), new Face3(16, 28, 29), new Face3(17, 16, 29), new Face3(17, 29, 30), new Face3(18, 17, 30), new Face3(18, 30, 31), new Face3(19, 18, 31), new Face3(19, 31, 32), new Face3(20, 19, 32), new Face3(20, 32, 33), new Face3(21, 20, 33), new Face3(21, 33, 34), new Face3(22, 21, 34), new Face3(22, 34, 35), new Face3(23, 22, 35), new Face3(23, 35, 36), new Face3(12, 23, 36), new Face3(12, 36, 25), new Face3(25, 49, 50), new Face3(25, 50, 26), new Face3(49, 37, 38), new Face3(49, 38, 50), new Face3(26, 50, 51), new Face3(26, 51, 27), new Face3(50, 38, 39), new Face3(50, 39, 51), new Face3(27, 51, 52), new Face3(27, 52, 28), new Face3(51, 39, 40), new Face3(51, 40, 52), new Face3(28, 52, 53), new Face3(28, 53, 29), new Face3(52, 40, 41), new Face3(52, 41, 53), new Face3(29, 53, 54), new Face3(29, 54, 30), new Face3(53, 41, 42), new Face3(53, 42, 54), new Face3(30, 54, 55), new Face3(30, 55, 31), new Face3(54, 42, 43), new Face3(54, 43, 55), new Face3(31, 55, 56), new Face3(31, 56, 32), new Face3(55, 43, 44), new Face3(55, 44, 56), new Face3(32, 56, 57), new Face3(32, 57, 33), new Face3(56, 44, 45), new Face3(56, 45, 57), new Face3(33, 57, 58), new Face3(33, 58, 34), new Face3(57, 45, 46), new Face3(57, 46, 58), new Face3(34, 58, 59), new Face3(34, 59, 35), new Face3(58, 46, 47), new Face3(58, 47, 59), new Face3(35, 59, 60), new Face3(35, 60, 36), new Face3(59, 47, 48), new Face3(59, 48, 60), new Face3(36, 60, 49), new Face3(36, 49, 25), new Face3(60, 48, 37), new Face3(60, 37, 49), new Face3(38, 37, 61), new Face3(38, 61, 62), new Face3(39, 38, 62), new Face3(39, 62, 63), new Face3(40, 39, 63), new Face3(40, 63, 64), new Face3(41, 40, 64), new Face3(41, 64, 65), new Face3(42, 41, 65), new Face3(42, 65, 66), new Face3(43, 42, 66), new Face3(43, 66, 67), new Face3(44, 43, 67), new Face3(44, 67, 68), new Face3(45, 44, 68), new Face3(45, 68, 69), new Face3(46, 45, 69), new Face3(46, 69, 70), new Face3(47, 46, 70), new Face3(47, 70, 71), new Face3(48, 47, 71), new Face3(48, 71, 72), new Face3(37, 48, 72), new Face3(37, 72, 61), new Face3(124, 125, 74), new Face3(124, 74, 75), new Face3(74, 73, 85), new Face3(74, 85, 86), new Face3(79, 78, 90), new Face3(79, 90, 91), new Face3(80, 79, 91), new Face3(80, 91, 92), new Face3(77, 76, 88), new Face3(77, 88, 89), new Face3(82, 81, 93), new Face3(82, 93, 94), new Face3(76, 75, 87), new Face3(76, 87, 88), new Face3(81, 80, 92), new Face3(81, 92, 93), new Face3(73, 84, 96), new Face3(73, 96, 85), new Face3(84, 83, 95), new Face3(84, 95, 96), new Face3(83, 82, 94), new Face3(83, 94, 95), new Face3(78, 77, 89), new Face3(78, 89, 90), new Face3(75, 74, 86), new Face3(75, 86, 87), new Face3(90, 89, 101), new Face3(90, 101, 102), new Face3(86, 85, 97), new Face3(86, 97, 98), new Face3(93, 92, 104), new Face3(93, 104, 105), new Face3(96, 95, 107), new Face3(96, 107, 108), new Face3(85, 96, 108), new Face3(85, 108, 97), new Face3(89, 88, 100), new Face3(89, 100, 101), new Face3(91, 90, 102), new Face3(91, 102, 103), new Face3(88, 87, 99), new Face3(88, 99, 100), new Face3(92, 91, 103), new Face3(92, 103, 104), new Face3(95, 94, 106), new Face3(95, 106, 107), new Face3(94, 93, 105), new Face3(94, 105, 106), new Face3(87, 86, 98), new Face3(87, 98, 99), new Face3(105, 104, 116), new Face3(105, 116, 117), new Face3(108, 107, 119), new Face3(108, 119, 120), new Face3(97, 108, 120), new Face3(97, 120, 109), new Face3(101, 100, 112), new Face3(101, 112, 113), new Face3(103, 102, 114), new Face3(103, 114, 115), new Face3(100, 99, 111), new Face3(100, 111, 112), new Face3(104, 103, 115), new Face3(104, 115, 116), new Face3(107, 106, 118), new Face3(107, 118, 119), new Face3(106, 105, 117), new Face3(106, 117, 118), new Face3(99, 98, 110), new Face3(99, 110, 111), new Face3(102, 101, 113), new Face3(102, 113, 114), new Face3(98, 97, 109), new Face3(98, 109, 110), new Face3(120, 119, 121, null, 0x0000FF, 3), new Face3(109, 120, 121, null, 0x0000FF, 3), new Face3(113, 112, 121, null, 0x0000FF, 3), new Face3(115, 114, 121, null, 0x0000FF, 3), new Face3(112, 111, 121, null, 0x0000FF, 3), new Face3(116, 115, 121, null, 0x0000FF, 3), new Face3(119, 118, 121, null, 0x0000FF, 3), new Face3(118, 117, 121, null, 0x0000FF, 3), new Face3(111, 110, 121, null, 0x0000FF, 3), new Face3(114, 113, 121, null, 0x0000FF, 3), new Face3(110, 109, 121, null, 0x0000FF, 3), new Face3(117, 116, 121, null, 0x0000FF, 3), new Face3(169, 158, 62), new Face3(169, 62, 61), new Face3(158, 159, 63), new Face3(158, 63, 62), new Face3(159, 160, 64), new Face3(159, 64, 63), new Face3(160, 161, 65), new Face3(160, 65, 64), new Face3(161, 162, 66), new Face3(161, 66, 65), new Face3(162, 163, 67), new Face3(162, 67, 66), new Face3(163, 164, 68), new Face3(163, 68, 67), new Face3(164, 165, 69), new Face3(164, 69, 68), new Face3(165, 166, 70), new Face3(165, 70, 69), new Face3(166, 167, 71), new Face3(166, 71, 70), new Face3(167, 168, 72), new Face3(167, 72, 71), new Face3(168, 169, 61), new Face3(168, 61, 72), new Face3(72, 138, 127), new Face3(72, 127, 61), new Face3(63, 129, 130), new Face3(63, 130, 64), new Face3(67, 133, 134), new Face3(67, 134, 68), new Face3(64, 130, 131), new Face3(64, 131, 65), new Face3(61, 127, 128), new Face3(61, 128, 62), new Face3(69, 135, 136), new Face3(69, 136, 70), new Face3(66, 132, 133), new Face3(66, 133, 67), new Face3(65, 131, 132), new Face3(65, 132, 66), new Face3(71, 137, 138), new Face3(71, 138, 72), new Face3(70, 136, 137), new Face3(70, 137, 71), new Face3(62, 128, 129), new Face3(62, 129, 63), new Face3(68, 134, 135), new Face3(68, 135, 69), new Face3(0, 140, 142), new Face3(0, 142, 1), new Face3(1, 142, 143), new Face3(1, 143, 2), new Face3(2, 143, 141), new Face3(2, 141, 3), new Face3(3, 141, 139), new Face3(3, 139, 4), new Face3(4, 139, 145), new Face3(4, 145, 5), new Face3(5, 145, 144), new Face3(5, 144, 6), new Face3(6, 144, 148), new Face3(6, 148, 7), new Face3(7, 148, 147), new Face3(7, 147, 8), new Face3(8, 147, 150), new Face3(8, 150, 9), new Face3(9, 150, 146), new Face3(9, 146, 10), new Face3(10, 146, 149), new Face3(10, 149, 11), new Face3(12, 140, 149), new Face3(12, 149, 23), new Face3(153, 154, 163), new Face3(153, 163, 162), new Face3(154, 155, 164), new Face3(154, 164, 163), new Face3(155, 156, 165), new Face3(155, 165, 164), new Face3(125, 151, 73), new Face3(125, 73, 74), new Face3(152, 124, 75), new Face3(152, 75, 76), new Face3(122, 152, 76), new Face3(122, 76, 77), new Face3(153, 122, 77), new Face3(153, 77, 78), new Face3(154, 153, 78), new Face3(154, 78, 79), new Face3(155, 154, 79), new Face3(155, 79, 80), new Face3(156, 155, 80), new Face3(156, 80, 81), new Face3(123, 156, 81), new Face3(123, 81, 82), new Face3(157, 123, 82), new Face3(157, 82, 83), new Face3(126, 157, 83), new Face3(126, 83, 84), new Face3(73, 151, 126), new Face3(73, 126, 84), new Face3(151, 125, 158), new Face3(151, 158, 169), new Face3(125, 124, 159), new Face3(125, 159, 158), new Face3(124, 152, 160), new Face3(124, 160, 159), new Face3(152, 122, 161), new Face3(152, 161, 160), new Face3(122, 153, 162), new Face3(122, 162, 161), new Face3(156, 123, 166), new Face3(156, 166, 165), new Face3(123, 157, 167), new Face3(123, 167, 166), new Face3(157, 126, 168), new Face3(157, 168, 167), new Face3(126, 151, 169), new Face3(126, 169, 168)]; diff --git a/src/blueprint/scripts/parametrics/doors/doorhandles/Handle_03.js b/src/blueprint/scripts/parametrics/doors/doorhandles/Handle_03.js new file mode 100644 index 0000000..7b83af7 --- /dev/null +++ b/src/blueprint/scripts/parametrics/doors/doorhandles/Handle_03.js @@ -0,0 +1,5 @@ +import {Vector3, Face3} from 'three'; + + +export const Handle_03_vertices = [new Vector3(-3.019268035888672, -0.2780601382255554, -3.2815840244293213), new Vector3(-4.254585266113281, -0.29421406984329224, -1.3319121599197388), new Vector3(-4.349547386169434, -0.30718207359313965, 0.9742341041564941), new Vector3(-3.278707265853882, -0.31348931789398193, 3.018923282623291), new Vector3(-1.3289966583251953, -0.31144583225250244, 4.254283905029297), new Vector3(0.9771613478660583, -0.3015991449356079, 4.349301815032959), new Vector3(3.021834135055542, -0.286587655544281, 3.278517007827759), new Vector3(4.257152080535889, -0.2704337537288666, 1.3288456201553345), new Vector3(4.352114677429199, -0.2574657201766968, -0.9772998094558716), new Vector3(3.2812767028808594, -0.2511584162712097, -3.0219900608062744), new Vector3(1.331566333770752, -0.2532019019126892, -4.257351398468018), new Vector3(-0.974591851234436, -0.26304861903190613, -4.3523712158203125), new Vector3(-2.9022715091705322, -1.9589225053787231, -3.1718835830688477), new Vector3(-4.092833042144775, -1.974491000175476, -1.2928534746170044), new Vector3(-4.184355735778809, -1.986989140510559, 0.9297359585762024), new Vector3(-3.152317523956299, -1.993067741394043, 2.900343418121338), new Vector3(-1.2732502222061157, -1.9910985231399536, 4.090946197509766), new Vector3(0.9493513703346252, -1.9816086292266846, 4.18252420425415), new Vector3(2.919942855834961, -1.967141032218933, 3.150538682937622), new Vector3(4.1105055809021, -1.951572299003601, 1.271509051322937), new Vector3(4.202029228210449, -1.9390742778778076, -0.9510802030563354), new Vector3(3.169992446899414, -1.9329954385757446, -2.9216883182525635), new Vector3(1.2909256219863892, -1.9349647760391235, -4.112292766571045), new Vector3(-0.9316755533218384, -1.9444547891616821, -4.2038726806640625), new Vector3(0.0012834301451221108, -0.5668943524360657, -0.0015340081881731749), new Vector3(-1.446112036705017, -1.9612153768539429, -1.5906234979629517), new Vector3(-2.0411462783813477, -1.9689966440200806, -0.6514983773231506), new Vector3(-2.086888313293457, -1.9752429723739624, 0.4593351483345032), new Vector3(-1.5710833072662354, -1.9782811403274536, 1.4442298412322998), new Vector3(-0.6319396495819092, -1.9772969484329224, 2.0392844676971436), new Vector3(0.4788999557495117, -1.9725537300109863, 2.085054397583008), new Vector3(1.4637869596481323, -1.9653233289718628, 1.569275975227356), new Vector3(2.058821439743042, -1.957542061805725, 0.6301507949829102), new Vector3(2.104564666748047, -1.9512957334518433, -0.4806825816631317), new Vector3(1.5887597799301147, -1.948257327079773, -1.4655778408050537), new Vector3(0.6496162414550781, -1.9492419958114624, -2.0606329441070557), new Vector3(-0.4612230658531189, -1.9539846181869507, -2.1064038276672363), new Vector3(-1.4407693147659302, -3.1500906944274902, -1.5970885753631592), new Vector3(-2.0358033180236816, -3.1578714847564697, -0.6579633355140686), new Vector3(-2.081545829772949, -3.1641180515289307, 0.45287013053894043), new Vector3(-1.5657404661178589, -3.167156457901001, 1.4377648830413818), new Vector3(-0.6265968084335327, -3.1661722660064697, 2.0328197479248047), new Vector3(0.4842427968978882, -3.1614291667938232, 2.07858943939209), new Vector3(1.4691299200057983, -3.154198169708252, 1.5628106594085693), new Vector3(2.064164400100708, -3.1464171409606934, 0.6236858367919922), new Vector3(2.109907627105713, -3.1401708126068115, -0.4871475398540497), new Vector3(1.5941027402877808, -3.137132167816162, -1.4720429182052612), new Vector3(0.6549590229988098, -3.1381168365478516, -2.0670981407165527), new Vector3(-0.4558802545070648, -3.142859697341919, -2.1128687858581543), new Vector3(-1.4456579685211182, -2.062270164489746, -1.5911731719970703), new Vector3(-2.04069185256958, -2.0700509548187256, -0.652047872543335), new Vector3(-2.0864343643188477, -2.0762977600097656, 0.4587855637073517), new Vector3(-1.5706290006637573, -2.0793356895446777, 1.4436802864074707), new Vector3(-0.6314853429794312, -2.0783514976501465, 2.0387349128723145), new Vector3(0.47935420274734497, -2.0736083984375, 2.0845048427581787), new Vector3(1.4642411470413208, -2.066377639770508, 1.5687263011932373), new Vector3(2.0592758655548096, -2.058596611022949, 0.629601240158081), new Vector3(2.1050186157226562, -2.0523500442504883, -0.48123201727867126), new Vector3(1.5892138481140137, -2.049312114715576, -1.4661273956298828), new Vector3(0.6500704288482666, -2.0502963066101074, -2.061182737350464), new Vector3(-0.4607689082622528, -2.055039167404175, -2.1069533824920654), new Vector3(-0.846520721912384, -3.267390727996826, -0.9529860615730286), new Vector3(-1.1987367868423462, -3.27199649810791, -0.397093266248703), new Vector3(-1.2258127927780151, -3.275693893432617, 0.26043808460235596), new Vector3(-0.9204944372177124, -3.277492046356201, 0.8434229493141174), new Vector3(-0.36459070444107056, -3.276909589767456, 1.1956512928009033), new Vector3(0.2929442524909973, -3.274102210998535, 1.2227436304092407), new Vector3(0.8759246468544006, -3.269821882247925, 0.9174410104751587), new Vector3(1.2281408309936523, -3.265216112136841, 0.3615483343601227), new Vector3(1.2552175521850586, -3.261518955230713, -0.2959829568862915), new Vector3(0.9498993158340454, -3.2597203254699707, -0.8789681792259216), new Vector3(0.3939957320690155, -3.260303020477295, -1.2311969995498657), new Vector3(-0.2635391354560852, -3.263110399246216, -1.2582899332046509), new Vector3(-1.6618385314941406, -4.475956916809082, -1.847565770149231), new Vector3(-2.3491361141204834, -4.4849443435668945, -0.7628244161605835), new Vector3(-2.4019711017608643, -4.492159366607666, 0.5202495455741882), new Vector3(-1.8061872720718384, -4.495668411254883, 1.6578571796417236), new Vector3(-0.7214244604110718, -4.494532108306885, 2.3451778888702393), new Vector3(0.5616565346717834, -4.489053726196289, 2.3980443477630615), new Vector3(1.6992552280426025, -4.480700969696045, 1.8022922277450562), new Vector3(2.386552572250366, -4.471714973449707, 0.7175509333610535), new Vector3(2.4393889904022217, -4.464499473571777, -0.5655227899551392), new Vector3(1.8436059951782227, -4.460989475250244, -1.7031309604644775), new Vector3(0.7588432431221008, -4.462126731872559, -2.3904528617858887), new Vector3(-0.5242375135421753, -4.467605113983154, -2.4433200359344482), new Vector3(-2.1944406032562256, -8.92867660522461, -2.4443392753601074), new Vector3(-3.102836847305298, -8.940557479858398, -1.0106441974639893), new Vector3(-3.17266845703125, -8.950092315673828, 0.6851861476898193), new Vector3(-2.3852250576019287, -8.954730033874512, 2.1887545585632324), new Vector3(-0.9515015482902527, -8.953227043151855, 3.097182035446167), new Vector3(0.744337797164917, -8.945987701416016, 3.167055130004883), new Vector3(2.247894287109375, -8.93494701385498, 2.379653215408325), new Vector3(3.1562910079956055, -8.923069953918457, 0.9459580183029175), new Vector3(3.2261245250701904, -8.913532257080078, -0.7498718500137329), new Vector3(2.4386816024780273, -8.908894538879395, -2.2534408569335938), new Vector3(1.0049583911895752, -8.910396575927734, -3.161869525909424), new Vector3(-0.6908810138702393, -8.91763687133789, -3.2317440509796143), new Vector3(-1.406922698020935, -9.728320121765137, -1.589163064956665), new Vector3(-1.9932459592819214, -9.735987663269043, -0.6637864112854004), new Vector3(-2.038318634033203, -9.742142677307129, 0.43078529834747314), new Vector3(-1.5300642251968384, -9.745135307312012, 1.401261806488037), new Vector3(-0.6046692132949829, -9.744165420532227, 1.987605333328247), new Vector3(0.4899083971977234, -9.739492416381836, 2.0327045917510986), new Vector3(1.4603770971298218, -9.732366561889648, 1.5244770050048828), new Vector3(2.0467004776000977, -9.724700927734375, 0.5991001129150391), new Vector3(2.0917744636535645, -9.718544006347656, -0.49547120928764343), new Vector3(1.583520531654358, -9.715551376342773, -1.4659479856491089), new Vector3(0.6581255197525024, -9.716520309448242, -2.0522921085357666), new Vector3(-0.4364519417285919, -9.721193313598633, -2.0973925590515137), new Vector3(-0.6114304065704346, -9.771082878112793, -0.7253276109695435), new Vector3(-0.8724194765090942, -9.774497032165527, -0.31341639161109924), new Vector3(-0.892482578754425, -9.777236938476562, 0.17380833625793457), new Vector3(-0.6662442088127136, -9.778569221496582, 0.6057948470115662), new Vector3(-0.2543247640132904, -9.77813720703125, 0.8667927384376526), new Vector3(0.2329026162624359, -9.776057243347168, 0.8868677616119385), new Vector3(0.6648856401443481, -9.7728853225708, 0.6606413722038269), new Vector3(0.9258745908737183, -9.7694730758667, 0.24873000383377075), new Vector3(0.9459383487701416, -9.766733169555664, -0.23849454522132874), new Vector3(0.7197002172470093, -9.765399932861328, -0.6704810857772827), new Vector3(0.30778077244758606, -9.765830993652344, -0.9314795136451721), new Vector3(-0.1794464886188507, -9.767911911010742, -0.9515548944473267), new Vector3(0.026727881282567978, -9.871400833129883, -0.03234325721859932), new Vector3(-0.3782625198364258, -4.132713794708252, 1.244664192199707), new Vector3(0.9928271174430847, -4.1147847175598145, -0.9192845821380615), new Vector3(-1.2765675783157349, -4.13144588470459, 0.2691824436187744), new Vector3(-1.2483258247375488, -4.127589225769043, -0.4166610538959503), new Vector3(-0.2728599011898041, -4.118320941925049, -1.3149391412734985), new Vector3(-0.9044193029403687, -3.338594436645508, -1.0158588886260986), new Vector3(-1.2803142070770264, -3.3435099124908447, -0.4225943684577942), new Vector3(-1.3092105388641357, -3.3474557399749756, 0.27914169430732727), new Vector3(-0.9833661913871765, -3.349375009536743, 0.9013196229934692), new Vector3(-0.39008989930152893, -3.348752975463867, 1.2772276401519775), new Vector3(0.31164997816085815, -3.345757007598877, 1.3061413764953613), new Vector3(0.9338231682777405, -3.341188669204712, 0.9803138971328735), new Vector3(1.3097182512283325, -3.336273431777954, 0.38704946637153625), new Vector3(1.3386154174804688, -3.3323276042938232, -0.3146865665912628), new Vector3(1.0127710103988647, -3.3304080963134766, -0.9368648529052734), new Vector3(0.41949498653411865, -3.3310301303863525, -1.3127734661102295), new Vector3(-0.28224486112594604, -3.3340260982513428, -1.3416876792907715), new Vector3(-1.3213201761245728, -0.5427400469779968, 4.231791973114014), new Vector3(-3.003157377243042, -0.509520947933197, -3.2664780616760254), new Vector3(-3.261303186416626, -0.5447733998298645, 3.002594470977783), new Vector3(-4.232311725616455, -0.5255942940711975, -1.3265336751937866), new Vector3(-4.326800346374512, -0.5384976267814636, 0.9681065678596497), new Vector3(3.007803201675415, -0.5180059671401978, 3.2608938217163086), new Vector3(0.9733318090438843, -0.5329424738883972, 4.326335906982422), new Vector3(1.325969934463501, -0.48478683829307556, -4.237376689910889), new Vector3(4.331447601318359, -0.4890293478965759, -0.9736892580986023), new Vector3(4.236958026885986, -0.501932680606842, 1.3209501504898071), new Vector3(-0.9686821103096008, -0.4945843815803528, -4.3319220542907715), new Vector3(3.2659523487091064, -0.4827534854412079, -3.0081779956817627), new Vector3(-0.8809435367584229, -4.122784614562988, -0.9964894652366638), new Vector3(-0.9581024646759033, -4.133321285247803, 0.8772696256637573), new Vector3(0.3075847029685974, -4.129785537719727, 1.2729228734970093), new Vector3(0.9156670570373535, -4.125320911407471, 0.9544746279716492), new Vector3(1.28304922580719, -4.120517730712891, 0.37464621663093567), new Vector3(1.3112918138504028, -4.1166605949401855, -0.31119707226753235), new Vector3(0.41298723220825195, -4.115392208099365, -1.286679744720459), new Vector3(-1.20172917842865, -3.323627233505249, -0.39827409386634827), new Vector3(-1.2288755178451538, -3.327333927154541, 0.2609657645225525), new Vector3(-0.9227638840675354, -3.329136848449707, 0.8454654216766357), new Vector3(-0.3654157221317291, -3.328552722930908, 1.1986089944839478), new Vector3(0.29382774233818054, -3.325737953186035, 1.2257717847824097), new Vector3(0.8783228397369385, -3.3214468955993652, 0.9196758270263672), new Vector3(1.2314543724060059, -3.3168294429779053, 0.36233872175216675), new Vector3(1.2586013078689575, -3.313122272491455, -0.29690104722976685), new Vector3(0.9524897933006287, -3.311318874359131, -0.8814010620117188), new Vector3(0.3951417803764343, -3.3119029998779297, -1.234545111656189), new Vector3(-0.2641015946865082, -3.3147177696228027, -1.261708378791809), new Vector3(-0.8485979437828064, -3.319009304046631, -0.9556112885475159), new Vector3(-2.4085001945495605, -7.821017265319824, -2.672210454940796), new Vector3(-3.403625249862671, -7.834033489227295, -1.1016337871551514), new Vector3(0.8108576536178589, -7.839981555938721, 3.474930763244629), new Vector3(2.457965850830078, -7.827888488769531, 2.612351894378662), new Vector3(3.453091621398926, -7.814876556396484, 1.0417746305465698), new Vector3(-2.617499828338623, -7.849558353424072, 2.4032270908355713), new Vector3(-1.046891689300537, -7.8479132652282715, 3.3983864784240723), new Vector3(3.529592514038086, -7.804428577423096, -0.8159644603729248), new Vector3(2.666968584060669, -7.7993483543396, -2.4630863666534424), new Vector3(-3.4801244735717773, -7.844477653503418, 0.7561056017875671), new Vector3(-0.7613884806632996, -7.808925151824951, -3.534792423248291), new Vector3(1.0963609218597412, -7.8009934425354, -3.4582467079162598), new Vector3(-3.5280909538269043, -7.544366836547852, -1.1391332149505615), new Vector3(2.54472279548645, -7.53800106048584, 2.7086853981018066), new Vector3(3.575707197189331, -7.524519920349121, 1.081512689590454), new Vector3(-1.0864323377609253, -7.558748245239258, 3.523045063018799), new Vector3(2.761256694793701, -7.508431434631348, -2.5496456623077393), new Vector3(-2.4971063137054443, -7.530882835388184, -2.766305685043335), new Vector3(0.8382608890533447, -7.550529956817627, 3.6023471355438232), new Vector3(-2.713637351989746, -7.560452938079834, 2.4920248985290527), new Vector3(3.6549649238586426, -7.51369571685791, -0.8431698083877563), new Vector3(-3.6073460578918457, -7.555188179016113, 0.7855496406555176), new Vector3(-0.7906410098075867, -7.5183539390563965, -3.659970760345459), new Vector3(1.1340521574020386, -7.510136127471924, -3.580667018890381), new Vector3(-2.173365354537964, -7.79854679107666, -2.4167799949645996), new Vector3(-3.072309970855713, -7.810303688049316, -0.9980021119117737), new Vector3(0.7348364591598511, -7.815676689147949, 3.136229991912842), new Vector3(2.2227489948272705, -7.804752349853516, 2.357020616531372), new Vector3(3.1216936111450195, -7.792998790740967, 0.9382423162460327), new Vector3(-2.3621644973754883, -7.824328422546387, 2.1681082248687744), new Vector3(-0.9433584213256836, -7.822842121124268, 3.0670838356018066), new Vector3(3.190800905227661, -7.783559799194336, -0.7399431467056274), new Vector3(2.4115512371063232, -7.778970241546631, -2.227867841720581), new Vector3(-3.1414151191711426, -7.819738864898682, 0.6801837086677551), new Vector3(-0.685449481010437, -7.787621974945068, -3.1959919929504395), new Vector3(0.9927452802658081, -7.78045654296875, -3.126845121383667), new Vector3(-2.9289710521698, -7.565496921539307, -0.9519111514091492), new Vector3(2.1195757389068604, -7.560204029083252, 2.246917724609375), new Vector3(2.9766697883605957, -7.5489983558654785, 0.8941910266876221), new Vector3(-0.8991332054138184, -7.577452182769775, 2.923924207687378), new Vector3(2.2995879650115967, -7.535623073577881, -2.1245203018188477), new Vector3(-2.0718765258789062, -7.554286956787109, -2.3046376705169678), new Vector3(0.700933039188385, -7.570621490478516, 2.9898507595062256), new Vector3(-2.2518866062164307, -7.578869342803955, 2.066800355911255), new Vector3(3.0425596237182617, -7.5399980545043945, -0.7058661580085754), new Vector3(-2.994858980178833, -7.574492454528809, 0.6481464505195618), new Vector3(-0.6532312631607056, -7.543872356414795, -3.0475733280181885), new Vector3(0.9468348622322083, -7.5370402336120605, -2.981645345687866)]; +export let Handle_03_faces = [new Face3(24, 0, 1, null, 0x0000FF, 3), new Face3(24, 1, 2, null, 0x0000FF, 3), new Face3(24, 2, 3, null, 0x0000FF, 3), new Face3(24, 3, 4, null, 0x0000FF, 3), new Face3(24, 4, 5, null, 0x0000FF, 3), new Face3(24, 5, 6, null, 0x0000FF, 3), new Face3(24, 6, 7, null, 0x0000FF, 3), new Face3(24, 7, 8, null, 0x0000FF, 3), new Face3(24, 8, 9, null, 0x0000FF, 3), new Face3(24, 9, 10, null, 0x0000FF, 3), new Face3(24, 10, 11, null, 0x0000FF, 3), new Face3(11, 0, 24, null, 0x0000FF, 3), new Face3(140, 12, 13), new Face3(140, 13, 142), new Face3(142, 13, 14), new Face3(142, 14, 143), new Face3(143, 14, 15), new Face3(143, 15, 141), new Face3(141, 15, 16), new Face3(141, 16, 139), new Face3(139, 16, 17), new Face3(139, 17, 145), new Face3(145, 17, 18), new Face3(145, 18, 144), new Face3(144, 18, 19), new Face3(144, 19, 148), new Face3(148, 19, 20), new Face3(148, 20, 147), new Face3(147, 20, 21), new Face3(147, 21, 150), new Face3(150, 21, 22), new Face3(150, 22, 146), new Face3(146, 22, 23), new Face3(146, 23, 149), new Face3(140, 0, 11), new Face3(140, 11, 149), new Face3(13, 12, 25), new Face3(13, 25, 26), new Face3(14, 13, 26), new Face3(14, 26, 27), new Face3(15, 14, 27), new Face3(15, 27, 28), new Face3(16, 15, 28), new Face3(16, 28, 29), new Face3(17, 16, 29), new Face3(17, 29, 30), new Face3(18, 17, 30), new Face3(18, 30, 31), new Face3(19, 18, 31), new Face3(19, 31, 32), new Face3(20, 19, 32), new Face3(20, 32, 33), new Face3(21, 20, 33), new Face3(21, 33, 34), new Face3(22, 21, 34), new Face3(22, 34, 35), new Face3(23, 22, 35), new Face3(23, 35, 36), new Face3(12, 23, 36), new Face3(12, 36, 25), new Face3(25, 49, 50), new Face3(25, 50, 26), new Face3(49, 37, 38), new Face3(49, 38, 50), new Face3(26, 50, 51), new Face3(26, 51, 27), new Face3(50, 38, 39), new Face3(50, 39, 51), new Face3(27, 51, 52), new Face3(27, 52, 28), new Face3(51, 39, 40), new Face3(51, 40, 52), new Face3(28, 52, 53), new Face3(28, 53, 29), new Face3(52, 40, 41), new Face3(52, 41, 53), new Face3(29, 53, 54), new Face3(29, 54, 30), new Face3(53, 41, 42), new Face3(53, 42, 54), new Face3(30, 54, 55), new Face3(30, 55, 31), new Face3(54, 42, 43), new Face3(54, 43, 55), new Face3(31, 55, 56), new Face3(31, 56, 32), new Face3(55, 43, 44), new Face3(55, 44, 56), new Face3(32, 56, 57), new Face3(32, 57, 33), new Face3(56, 44, 45), new Face3(56, 45, 57), new Face3(33, 57, 58), new Face3(33, 58, 34), new Face3(57, 45, 46), new Face3(57, 46, 58), new Face3(34, 58, 59), new Face3(34, 59, 35), new Face3(58, 46, 47), new Face3(58, 47, 59), new Face3(35, 59, 60), new Face3(35, 60, 36), new Face3(59, 47, 48), new Face3(59, 48, 60), new Face3(36, 60, 49), new Face3(36, 49, 25), new Face3(60, 48, 37), new Face3(60, 37, 49), new Face3(38, 37, 61), new Face3(38, 61, 62), new Face3(39, 38, 62), new Face3(39, 62, 63), new Face3(40, 39, 63), new Face3(40, 63, 64), new Face3(41, 40, 64), new Face3(41, 64, 65), new Face3(42, 41, 65), new Face3(42, 65, 66), new Face3(43, 42, 66), new Face3(43, 66, 67), new Face3(44, 43, 67), new Face3(44, 67, 68), new Face3(45, 44, 68), new Face3(45, 68, 69), new Face3(46, 45, 69), new Face3(46, 69, 70), new Face3(47, 46, 70), new Face3(47, 70, 71), new Face3(48, 47, 71), new Face3(48, 71, 72), new Face3(37, 48, 72), new Face3(37, 72, 61), new Face3(124, 125, 74), new Face3(124, 74, 75), new Face3(171, 170, 85), new Face3(171, 85, 86), new Face3(173, 172, 90), new Face3(173, 90, 91), new Face3(174, 173, 91), new Face3(174, 91, 92), new Face3(176, 175, 88), new Face3(176, 88, 89), new Face3(178, 177, 93), new Face3(178, 93, 94), new Face3(175, 179, 87), new Face3(175, 87, 88), new Face3(177, 174, 92), new Face3(177, 92, 93), new Face3(170, 180, 96), new Face3(170, 96, 85), new Face3(180, 181, 95), new Face3(180, 95, 96), new Face3(181, 178, 94), new Face3(181, 94, 95), new Face3(172, 176, 89), new Face3(172, 89, 90), new Face3(179, 171, 86), new Face3(179, 86, 87), new Face3(90, 89, 101), new Face3(90, 101, 102), new Face3(86, 85, 97), new Face3(86, 97, 98), new Face3(93, 92, 104), new Face3(93, 104, 105), new Face3(96, 95, 107), new Face3(96, 107, 108), new Face3(85, 96, 108), new Face3(85, 108, 97), new Face3(89, 88, 100), new Face3(89, 100, 101), new Face3(91, 90, 102), new Face3(91, 102, 103), new Face3(88, 87, 99), new Face3(88, 99, 100), new Face3(92, 91, 103), new Face3(92, 103, 104), new Face3(95, 94, 106), new Face3(95, 106, 107), new Face3(94, 93, 105), new Face3(94, 105, 106), new Face3(87, 86, 98), new Face3(87, 98, 99), new Face3(105, 104, 116), new Face3(105, 116, 117), new Face3(108, 107, 119), new Face3(108, 119, 120), new Face3(97, 108, 120), new Face3(97, 120, 109), new Face3(101, 100, 112), new Face3(101, 112, 113), new Face3(103, 102, 114), new Face3(103, 114, 115), new Face3(100, 99, 111), new Face3(100, 111, 112), new Face3(104, 103, 115), new Face3(104, 115, 116), new Face3(107, 106, 118), new Face3(107, 118, 119), new Face3(106, 105, 117), new Face3(106, 117, 118), new Face3(99, 98, 110), new Face3(99, 110, 111), new Face3(102, 101, 113), new Face3(102, 113, 114), new Face3(98, 97, 109), new Face3(98, 109, 110), new Face3(120, 119, 121, null, 0x0000FF, 3), new Face3(109, 120, 121, null, 0x0000FF, 3), new Face3(113, 112, 121, null, 0x0000FF, 3), new Face3(115, 114, 121, null, 0x0000FF, 3), new Face3(112, 111, 121, null, 0x0000FF, 3), new Face3(116, 115, 121, null, 0x0000FF, 3), new Face3(119, 118, 121, null, 0x0000FF, 3), new Face3(118, 117, 121, null, 0x0000FF, 3), new Face3(111, 110, 121, null, 0x0000FF, 3), new Face3(114, 113, 121, null, 0x0000FF, 3), new Face3(110, 109, 121, null, 0x0000FF, 3), new Face3(117, 116, 121, null, 0x0000FF, 3), new Face3(169, 158, 62), new Face3(169, 62, 61), new Face3(158, 159, 63), new Face3(158, 63, 62), new Face3(159, 160, 64), new Face3(159, 64, 63), new Face3(160, 161, 65), new Face3(160, 65, 64), new Face3(161, 162, 66), new Face3(161, 66, 65), new Face3(162, 163, 67), new Face3(162, 67, 66), new Face3(163, 164, 68), new Face3(163, 68, 67), new Face3(164, 165, 69), new Face3(164, 69, 68), new Face3(165, 166, 70), new Face3(165, 70, 69), new Face3(166, 167, 71), new Face3(166, 71, 70), new Face3(167, 168, 72), new Face3(167, 72, 71), new Face3(168, 169, 61), new Face3(168, 61, 72), new Face3(72, 138, 127), new Face3(72, 127, 61), new Face3(63, 129, 130), new Face3(63, 130, 64), new Face3(67, 133, 134), new Face3(67, 134, 68), new Face3(64, 130, 131), new Face3(64, 131, 65), new Face3(61, 127, 128), new Face3(61, 128, 62), new Face3(69, 135, 136), new Face3(69, 136, 70), new Face3(66, 132, 133), new Face3(66, 133, 67), new Face3(65, 131, 132), new Face3(65, 132, 66), new Face3(71, 137, 138), new Face3(71, 138, 72), new Face3(70, 136, 137), new Face3(70, 137, 71), new Face3(62, 128, 129), new Face3(62, 129, 63), new Face3(68, 134, 135), new Face3(68, 135, 69), new Face3(0, 140, 142), new Face3(0, 142, 1), new Face3(1, 142, 143), new Face3(1, 143, 2), new Face3(2, 143, 141), new Face3(2, 141, 3), new Face3(3, 141, 139), new Face3(3, 139, 4), new Face3(4, 139, 145), new Face3(4, 145, 5), new Face3(5, 145, 144), new Face3(5, 144, 6), new Face3(6, 144, 148), new Face3(6, 148, 7), new Face3(7, 148, 147), new Face3(7, 147, 8), new Face3(8, 147, 150), new Face3(8, 150, 9), new Face3(9, 150, 146), new Face3(9, 146, 10), new Face3(10, 146, 149), new Face3(10, 149, 11), new Face3(12, 140, 149), new Face3(12, 149, 23), new Face3(153, 154, 163), new Face3(153, 163, 162), new Face3(154, 155, 164), new Face3(154, 164, 163), new Face3(155, 156, 165), new Face3(155, 165, 164), new Face3(125, 151, 73), new Face3(125, 73, 74), new Face3(152, 124, 75), new Face3(152, 75, 76), new Face3(122, 152, 76), new Face3(122, 76, 77), new Face3(153, 122, 77), new Face3(153, 77, 78), new Face3(154, 153, 78), new Face3(154, 78, 79), new Face3(155, 154, 79), new Face3(155, 79, 80), new Face3(156, 155, 80), new Face3(156, 80, 81), new Face3(123, 156, 81), new Face3(123, 81, 82), new Face3(157, 123, 82), new Face3(157, 82, 83), new Face3(126, 157, 83), new Face3(126, 83, 84), new Face3(73, 151, 126), new Face3(73, 126, 84), new Face3(151, 125, 158), new Face3(151, 158, 169), new Face3(125, 124, 159), new Face3(125, 159, 158), new Face3(124, 152, 160), new Face3(124, 160, 159), new Face3(152, 122, 161), new Face3(152, 161, 160), new Face3(122, 153, 162), new Face3(122, 162, 161), new Face3(156, 123, 166), new Face3(156, 166, 165), new Face3(123, 157, 167), new Face3(123, 167, 166), new Face3(157, 126, 168), new Face3(157, 168, 167), new Face3(126, 151, 169), new Face3(126, 169, 168), new Face3(185, 189, 213), new Face3(185, 213, 209), new Face3(192, 193, 217), new Face3(192, 217, 216), new Face3(172, 173, 197), new Face3(172, 197, 196), new Face3(174, 177, 201), new Face3(174, 201, 198), new Face3(171, 179, 203), new Face3(171, 203, 195), new Face3(184, 183, 207), new Face3(184, 207, 208), new Face3(187, 192, 216), new Face3(187, 216, 211), new Face3(170, 171, 195), new Face3(170, 195, 194), new Face3(179, 175, 199), new Face3(179, 199, 203), new Face3(176, 172, 196), new Face3(176, 196, 200), new Face3(183, 188, 212), new Face3(183, 212, 207), new Face3(190, 184, 208), new Face3(190, 208, 214), new Face3(74, 73, 187), new Face3(74, 187, 182), new Face3(79, 78, 188), new Face3(79, 188, 183), new Face3(80, 79, 183), new Face3(80, 183, 184), new Face3(77, 76, 189), new Face3(77, 189, 185), new Face3(82, 81, 190), new Face3(82, 190, 186), new Face3(76, 75, 191), new Face3(76, 191, 189), new Face3(81, 80, 184), new Face3(81, 184, 190), new Face3(73, 84, 192), new Face3(73, 192, 187), new Face3(84, 83, 193), new Face3(84, 193, 192), new Face3(83, 82, 186), new Face3(83, 186, 193), new Face3(78, 77, 185), new Face3(78, 185, 188), new Face3(75, 74, 182), new Face3(75, 182, 191), new Face3(206, 211, 194), new Face3(206, 194, 195), new Face3(207, 212, 196), new Face3(207, 196, 197), new Face3(208, 207, 197), new Face3(208, 197, 198), new Face3(209, 213, 199), new Face3(209, 199, 200), new Face3(210, 214, 201), new Face3(210, 201, 202), new Face3(213, 215, 203), new Face3(213, 203, 199), new Face3(214, 208, 198), new Face3(214, 198, 201), new Face3(211, 216, 204), new Face3(211, 204, 194), new Face3(216, 217, 205), new Face3(216, 205, 204), new Face3(217, 210, 202), new Face3(217, 202, 205), new Face3(212, 209, 200), new Face3(212, 200, 196), new Face3(215, 206, 195), new Face3(215, 195, 203), new Face3(180, 170, 194), new Face3(180, 194, 204), new Face3(173, 174, 198), new Face3(173, 198, 197), new Face3(193, 186, 210), new Face3(193, 210, 217), new Face3(186, 190, 214), new Face3(186, 214, 210), new Face3(181, 180, 204), new Face3(181, 204, 205), new Face3(175, 176, 200), new Face3(175, 200, 199), new Face3(188, 185, 209), new Face3(188, 209, 212), new Face3(189, 191, 215), new Face3(189, 215, 213), new Face3(182, 187, 211), new Face3(182, 211, 206), new Face3(178, 181, 205), new Face3(178, 205, 202), new Face3(177, 178, 202), new Face3(177, 202, 201), new Face3(191, 182, 206), new Face3(191, 206, 215)]; diff --git a/src/blueprint/scripts/parametrics/doors/doorhandles/Handle_04.js b/src/blueprint/scripts/parametrics/doors/doorhandles/Handle_04.js new file mode 100644 index 0000000..25b2fbe --- /dev/null +++ b/src/blueprint/scripts/parametrics/doors/doorhandles/Handle_04.js @@ -0,0 +1,5 @@ +import {Vector3, Face3} from 'three'; + + +export const Handle_04_vertices = [new Vector3(-3.019268035888672, -0.2780601382255554, -11.443300247192383), new Vector3(-4.254585266113281, -0.29421406984329224, -9.49362850189209), new Vector3(-4.349547386169434, -0.30718207359313965, -7.187482833862305), new Vector3(-3.278707265853882, -0.31348931789398193, -5.14279317855835), new Vector3(-1.3289966583251953, -0.31144583225250244, -3.9074323177337646), new Vector3(0.9771613478660583, -0.3015991449356079, -3.8124148845672607), new Vector3(3.021834135055542, -0.286587655544281, -4.883199691772461), new Vector3(4.257152080535889, -0.2704337537288666, -6.832870960235596), new Vector3(4.352114677429199, -0.2574657201766968, -9.139016151428223), new Vector3(3.2812767028808594, -0.2511584162712097, -11.183706283569336), new Vector3(1.331566333770752, -0.2532019019126892, -12.419068336486816), new Vector3(-0.974591851234436, -0.26304861903190613, -12.514087677001953), new Vector3(-2.9022715091705322, -1.9589225053787231, -11.333600044250488), new Vector3(-4.092833042144775, -1.974491000175476, -9.454569816589355), new Vector3(-4.184355735778809, -1.986989140510559, -7.231980323791504), new Vector3(-3.152317523956299, -1.993067741394043, -5.261373043060303), new Vector3(-1.2732502222061157, -1.9910985231399536, -4.070770263671875), new Vector3(0.9493513703346252, -1.9816086292266846, -3.9791922569274902), new Vector3(2.919942855834961, -1.967141032218933, -5.011178016662598), new Vector3(4.1105055809021, -1.951572299003601, -6.890207290649414), new Vector3(4.202029228210449, -1.9390742778778076, -9.112796783447266), new Vector3(3.169992446899414, -1.9329954385757446, -11.083404541015625), new Vector3(1.2909256219863892, -1.9349647760391235, -12.274008750915527), new Vector3(-0.9316755533218384, -1.9444547891616821, -12.365589141845703), new Vector3(0.0012834301451221108, -0.5668943524360657, -8.163250923156738), new Vector3(-1.446112036705017, -1.9612153768539429, -9.752340316772461), new Vector3(-2.0411462783813477, -1.9689966440200806, -8.813215255737305), new Vector3(-2.086888313293457, -1.9752429723739624, -7.7023820877075195), new Vector3(-1.5710833072662354, -1.9782811403274536, -6.71748685836792), new Vector3(-0.6319396495819092, -1.9772969484329224, -6.122431755065918), new Vector3(0.4788999557495117, -1.9725537300109863, -6.076662063598633), new Vector3(1.4637869596481323, -1.9653233289718628, -6.592440605163574), new Vector3(2.058821439743042, -1.957542061805725, -7.5315656661987305), new Vector3(2.104564666748047, -1.9512957334518433, -8.642398834228516), new Vector3(1.5887597799301147, -1.948257327079773, -9.627294540405273), new Vector3(0.6496162414550781, -1.9492419958114624, -10.222349166870117), new Vector3(-0.4612230658531189, -1.9539846181869507, -10.268120765686035), new Vector3(-1.4407693147659302, -3.1500906944274902, -9.758804321289062), new Vector3(-2.0358033180236816, -3.1578714847564697, -8.819680213928223), new Vector3(-2.081545829772949, -3.1641180515289307, -7.708846092224121), new Vector3(-1.5657404661178589, -3.167156457901001, -6.72395133972168), new Vector3(-0.6265968084335327, -3.1661722660064697, -6.128896713256836), new Vector3(0.4842427968978882, -3.1614291667938232, -6.083127021789551), new Vector3(1.4691299200057983, -3.154198169708252, -6.59890604019165), new Vector3(2.064164400100708, -3.1464171409606934, -7.538031101226807), new Vector3(2.109907627105713, -3.1401708126068115, -8.648863792419434), new Vector3(1.5941027402877808, -3.137132167816162, -9.633759498596191), new Vector3(0.6549590229988098, -3.1381168365478516, -10.228814125061035), new Vector3(-0.4558802545070648, -3.142859697341919, -10.274585723876953), new Vector3(-1.4456579685211182, -2.062270164489746, -9.752889633178711), new Vector3(-2.04069185256958, -2.0700509548187256, -8.813764572143555), new Vector3(-2.0864343643188477, -2.0762977600097656, -7.702930927276611), new Vector3(-1.5706290006637573, -2.0793356895446777, -6.718036651611328), new Vector3(-0.6314853429794312, -2.0783514976501465, -6.122981548309326), new Vector3(0.47935420274734497, -2.0736083984375, -6.077211856842041), new Vector3(1.4642411470413208, -2.066377639770508, -6.592990398406982), new Vector3(2.0592758655548096, -2.058596611022949, -7.532115459442139), new Vector3(2.1050186157226562, -2.0523500442504883, -8.642948150634766), new Vector3(1.5892138481140137, -2.049312114715576, -9.627843856811523), new Vector3(0.6500704288482666, -2.0502963066101074, -10.222899436950684), new Vector3(-0.4607689082622528, -2.055039167404175, -10.268670082092285), new Vector3(-0.846520721912384, -3.267390727996826, -9.114703178405762), new Vector3(-1.1987367868423462, -3.27199649810791, -8.558809280395508), new Vector3(-1.2258127927780151, -3.275693893432617, -7.901278018951416), new Vector3(-0.9204944372177124, -3.277492046356201, -7.318294048309326), new Vector3(-0.36459070444107056, -3.276909589767456, -6.966064929962158), new Vector3(0.2929442524909973, -3.274102210998535, -6.9389729499816895), new Vector3(0.8759246468544006, -3.269821882247925, -7.2442755699157715), new Vector3(1.2281408309936523, -3.265216112136841, -7.800168037414551), new Vector3(1.2552175521850586, -3.261518955230713, -8.4576997756958), new Vector3(0.9498993158340454, -3.2597203254699707, -9.040684700012207), new Vector3(0.3939957320690155, -3.260303020477295, -9.392913818359375), new Vector3(-0.2635391354560852, -3.263110399246216, -9.42000675201416), new Vector3(-0.3782625198364258, -4.132713794708252, -6.917051792144775), new Vector3(0.9928271174430847, -4.1147847175598145, -9.081001281738281), new Vector3(-1.2765675783157349, -4.13144588470459, -7.892534255981445), new Vector3(-1.2483258247375488, -4.127589225769043, -8.578377723693848), new Vector3(-0.2728599011898041, -4.118320941925049, -9.476655960083008), new Vector3(-0.9044193029403687, -3.338594436645508, -9.17757511138916), new Vector3(-1.2803142070770264, -3.3435099124908447, -8.584310531616211), new Vector3(-1.3092105388641357, -3.3474557399749756, -7.882575035095215), new Vector3(-0.9833661913871765, -3.349375009536743, -7.260396957397461), new Vector3(-0.39008989930152893, -3.348752975463867, -6.884488582611084), new Vector3(0.31164997816085815, -3.345757007598877, -6.855575084686279), new Vector3(0.9338231682777405, -3.341188669204712, -7.181403160095215), new Vector3(1.3097182512283325, -3.336273431777954, -7.774667263031006), new Vector3(1.3386154174804688, -3.3323276042938232, -8.47640323638916), new Vector3(1.0127710103988647, -3.3304080963134766, -9.098581314086914), new Vector3(0.41949498653411865, -3.3310301303863525, -9.47449016571045), new Vector3(-0.28224486112594604, -3.3340260982513428, -9.503403663635254), new Vector3(-1.3213201761245728, -0.5427400469779968, -3.929924488067627), new Vector3(-3.003157377243042, -0.509520947933197, -11.428194046020508), new Vector3(-3.261303186416626, -0.5447733998298645, -5.159121990203857), new Vector3(-4.232311725616455, -0.5255942940711975, -9.488250732421875), new Vector3(-4.326800346374512, -0.5384976267814636, -7.193610191345215), new Vector3(3.007803201675415, -0.5180059671401978, -4.900822639465332), new Vector3(0.9733318090438843, -0.5329424738883972, -3.835380792617798), new Vector3(1.325969934463501, -0.48478683829307556, -12.399092674255371), new Vector3(4.331447601318359, -0.4890293478965759, -9.135405540466309), new Vector3(4.236958026885986, -0.501932680606842, -6.840766429901123), new Vector3(-0.9686821103096008, -0.4945843815803528, -12.49363899230957), new Vector3(3.2659523487091064, -0.4827534854412079, -11.16989517211914), new Vector3(-0.8809435367584229, -4.122784614562988, -9.15820598602295), new Vector3(-0.9581024646759033, -4.133321285247803, -7.284446716308594), new Vector3(0.3075847029685974, -4.129785537719727, -6.888793468475342), new Vector3(0.9156670570373535, -4.125320911407471, -7.207241535186768), new Vector3(1.28304922580719, -4.120517730712891, -7.787070274353027), new Vector3(1.3112918138504028, -4.1166605949401855, -8.47291374206543), new Vector3(0.41298723220825195, -4.115392208099365, -9.448396682739258), new Vector3(-1.20172917842865, -3.323627233505249, -8.559990882873535), new Vector3(-1.2288755178451538, -3.327333927154541, -7.900750637054443), new Vector3(-0.9227638840675354, -3.329136848449707, -7.316251277923584), new Vector3(-0.3654157221317291, -3.328552722930908, -6.963107585906982), new Vector3(0.29382774233818054, -3.325737953186035, -6.9359450340271), new Vector3(0.8783228397369385, -3.3214468955993652, -7.242040157318115), new Vector3(1.2314543724060059, -3.3168294429779053, -7.799377918243408), new Vector3(1.2586013078689575, -3.313122272491455, -8.458617210388184), new Vector3(0.9524897933006287, -3.311318874359131, -9.04311752319336), new Vector3(0.3951417803764343, -3.3119029998779297, -9.396262168884277), new Vector3(-0.2641015946865082, -3.3147177696228027, -9.42342472076416), new Vector3(-0.8485979437828064, -3.319009304046631, -9.117327690124512), new Vector3(0.41298723220825195, -7.012894153594971, -9.08381462097168), new Vector3(1.3112918138504028, -6.324020862579346, -8.393146514892578), new Vector3(1.28304922580719, -5.84178352355957, -7.905455112457275), new Vector3(0.9156670570373535, -5.435179233551025, -7.492057800292969), new Vector3(0.3075847029685974, -5.213159561157227, -7.263724327087402), new Vector3(-0.9581024646759033, -5.495428085327148, -7.5409932136535645), new Vector3(-0.8809435367584229, -6.812925815582275, -8.873391151428223), new Vector3(-0.2728599011898041, -7.034946918487549, -9.101726531982422), new Vector3(-1.2483258247375488, -6.406322956085205, -8.459993362426758), new Vector3(-1.2765675783157349, -5.924084663391113, -7.972301483154297), new Vector3(0.9928271174430847, -6.7526774406433105, -8.824455261230469), new Vector3(-0.3782625198364258, -5.235211372375488, -7.281635761260986), new Vector3(-0.9195230007171631, -5.464406967163086, 1.7809234857559204), new Vector3(-1.262446641921997, -5.885434150695801, 1.768570065498352), new Vector3(-1.262446641921997, -6.370398998260498, 1.7658435106277466), new Vector3(-0.9195230007171631, -6.7893548011779785, 1.7734720706939697), new Vector3(-0.3255612254142761, -7.0300445556640625, 1.7894134521484375), new Vector3(0.3602859675884247, -7.027973175048828, 1.8093950748443604), new Vector3(0.9542470574378967, -6.783698558807373, 1.8280647993087769), new Vector3(1.2971705198287964, -6.362671375274658, 1.8404178619384766), new Vector3(1.2971705198287964, -5.877706527709961, 1.843144416809082), new Vector3(0.9542470574378967, -5.458749771118164, 1.8355145454406738), new Vector3(0.3602859675884247, -5.2180609703063965, 1.8195737600326538), new Vector3(-0.3255612254142761, -5.2201313972473145, 1.799590826034546), new Vector3(-3.019268035888672, -0.2780601382255554, 11.443300247192383), new Vector3(-4.254585266113281, -0.29421406984329224, 9.49362850189209), new Vector3(-4.349547386169434, -0.30718207359313965, 7.187482833862305), new Vector3(-3.278707265853882, -0.31348931789398193, 5.14279317855835), new Vector3(-1.3289966583251953, -0.31144583225250244, 3.9074323177337646), new Vector3(0.9771613478660583, -0.3015991449356079, 3.8124148845672607), new Vector3(3.021834135055542, -0.286587655544281, 4.883199691772461), new Vector3(4.257152080535889, -0.2704337537288666, 6.832870960235596), new Vector3(4.352114677429199, -0.2574657201766968, 9.139016151428223), new Vector3(3.2812767028808594, -0.2511584162712097, 11.183706283569336), new Vector3(1.331566333770752, -0.2532019019126892, 12.419068336486816), new Vector3(-0.974591851234436, -0.26304861903190613, 12.514087677001953), new Vector3(-2.9022715091705322, -1.9589225053787231, 11.333600044250488), new Vector3(-4.092833042144775, -1.974491000175476, 9.454569816589355), new Vector3(-4.184355735778809, -1.986989140510559, 7.231980323791504), new Vector3(-3.152317523956299, -1.993067741394043, 5.261373043060303), new Vector3(-1.2732502222061157, -1.9910985231399536, 4.070770263671875), new Vector3(0.9493513703346252, -1.9816086292266846, 3.9791922569274902), new Vector3(2.919942855834961, -1.967141032218933, 5.011178016662598), new Vector3(4.1105055809021, -1.951572299003601, 6.890207290649414), new Vector3(4.202029228210449, -1.9390742778778076, 9.112796783447266), new Vector3(3.169992446899414, -1.9329954385757446, 11.083404541015625), new Vector3(1.2909256219863892, -1.9349647760391235, 12.274008750915527), new Vector3(-0.9316755533218384, -1.9444547891616821, 12.365589141845703), new Vector3(0.0012834301451221108, -0.5668943524360657, 8.163250923156738), new Vector3(-1.446112036705017, -1.9612153768539429, 9.752340316772461), new Vector3(-2.0411462783813477, -1.9689966440200806, 8.813215255737305), new Vector3(-2.086888313293457, -1.9752429723739624, 7.7023820877075195), new Vector3(-1.5710833072662354, -1.9782811403274536, 6.71748685836792), new Vector3(-0.6319396495819092, -1.9772969484329224, 6.122431755065918), new Vector3(0.4788999557495117, -1.9725537300109863, 6.076662063598633), new Vector3(1.4637869596481323, -1.9653233289718628, 6.592440605163574), new Vector3(2.058821439743042, -1.957542061805725, 7.5315656661987305), new Vector3(2.104564666748047, -1.9512957334518433, 8.642398834228516), new Vector3(1.5887597799301147, -1.948257327079773, 9.627294540405273), new Vector3(0.6496162414550781, -1.9492419958114624, 10.222349166870117), new Vector3(-0.4612230658531189, -1.9539846181869507, 10.268120765686035), new Vector3(-1.4407693147659302, -3.1500906944274902, 9.758804321289062), new Vector3(-2.0358033180236816, -3.1578714847564697, 8.819680213928223), new Vector3(-2.081545829772949, -3.1641180515289307, 7.708846092224121), new Vector3(-1.5657404661178589, -3.167156457901001, 6.72395133972168), new Vector3(-0.6265968084335327, -3.1661722660064697, 6.128896713256836), new Vector3(0.4842427968978882, -3.1614291667938232, 6.083127021789551), new Vector3(1.4691299200057983, -3.154198169708252, 6.59890604019165), new Vector3(2.064164400100708, -3.1464171409606934, 7.538031101226807), new Vector3(2.109907627105713, -3.1401708126068115, 8.648863792419434), new Vector3(1.5941027402877808, -3.137132167816162, 9.633759498596191), new Vector3(0.6549590229988098, -3.1381168365478516, 10.228814125061035), new Vector3(-0.4558802545070648, -3.142859697341919, 10.274585723876953), new Vector3(-1.4456579685211182, -2.062270164489746, 9.752889633178711), new Vector3(-2.04069185256958, -2.0700509548187256, 8.813764572143555), new Vector3(-2.0864343643188477, -2.0762977600097656, 7.702930927276611), new Vector3(-1.5706290006637573, -2.0793356895446777, 6.718036651611328), new Vector3(-0.6314853429794312, -2.0783514976501465, 6.122981548309326), new Vector3(0.47935420274734497, -2.0736083984375, 6.077211856842041), new Vector3(1.4642411470413208, -2.066377639770508, 6.592990398406982), new Vector3(2.0592758655548096, -2.058596611022949, 7.532115459442139), new Vector3(2.1050186157226562, -2.0523500442504883, 8.642948150634766), new Vector3(1.5892138481140137, -2.049312114715576, 9.627843856811523), new Vector3(0.6500704288482666, -2.0502963066101074, 10.222899436950684), new Vector3(-0.4607689082622528, -2.055039167404175, 10.268670082092285), new Vector3(-0.846520721912384, -3.267390727996826, 9.114703178405762), new Vector3(-1.1987367868423462, -3.27199649810791, 8.558809280395508), new Vector3(-1.2258127927780151, -3.275693893432617, 7.901278018951416), new Vector3(-0.9204944372177124, -3.277492046356201, 7.318294048309326), new Vector3(-0.36459070444107056, -3.276909589767456, 6.966064929962158), new Vector3(0.2929442524909973, -3.274102210998535, 6.9389729499816895), new Vector3(0.8759246468544006, -3.269821882247925, 7.2442755699157715), new Vector3(1.2281408309936523, -3.265216112136841, 7.800168037414551), new Vector3(1.2552175521850586, -3.261518955230713, 8.4576997756958), new Vector3(0.9498993158340454, -3.2597203254699707, 9.040684700012207), new Vector3(0.3939957320690155, -3.260303020477295, 9.392913818359375), new Vector3(-0.2635391354560852, -3.263110399246216, 9.42000675201416), new Vector3(-0.3782625198364258, -4.132713794708252, 6.917051792144775), new Vector3(0.9928271174430847, -4.1147847175598145, 9.081001281738281), new Vector3(-1.2765675783157349, -4.13144588470459, 7.892534255981445), new Vector3(-1.2483258247375488, -4.127589225769043, 8.578377723693848), new Vector3(-0.2728599011898041, -4.118320941925049, 9.476655960083008), new Vector3(-0.9044193029403687, -3.338594436645508, 9.17757511138916), new Vector3(-1.2803142070770264, -3.3435099124908447, 8.584310531616211), new Vector3(-1.3092105388641357, -3.3474557399749756, 7.882575035095215), new Vector3(-0.9833661913871765, -3.349375009536743, 7.260396957397461), new Vector3(-0.39008989930152893, -3.348752975463867, 6.884488582611084), new Vector3(0.31164997816085815, -3.345757007598877, 6.855575084686279), new Vector3(0.9338231682777405, -3.341188669204712, 7.181403160095215), new Vector3(1.3097182512283325, -3.336273431777954, 7.774667263031006), new Vector3(1.3386154174804688, -3.3323276042938232, 8.47640323638916), new Vector3(1.0127710103988647, -3.3304080963134766, 9.098581314086914), new Vector3(0.41949498653411865, -3.3310301303863525, 9.47449016571045), new Vector3(-0.28224486112594604, -3.3340260982513428, 9.503403663635254), new Vector3(-1.3213201761245728, -0.5427400469779968, 3.929924488067627), new Vector3(-3.003157377243042, -0.509520947933197, 11.428194046020508), new Vector3(-3.261303186416626, -0.5447733998298645, 5.159121990203857), new Vector3(-4.232311725616455, -0.5255942940711975, 9.488250732421875), new Vector3(-4.326800346374512, -0.5384976267814636, 7.193610191345215), new Vector3(3.007803201675415, -0.5180059671401978, 4.900822639465332), new Vector3(0.9733318090438843, -0.5329424738883972, 3.835380792617798), new Vector3(1.325969934463501, -0.48478683829307556, 12.399092674255371), new Vector3(4.331447601318359, -0.4890293478965759, 9.135405540466309), new Vector3(4.236958026885986, -0.501932680606842, 6.840766429901123), new Vector3(-0.9686821103096008, -0.4945843815803528, 12.49363899230957), new Vector3(3.2659523487091064, -0.4827534854412079, 11.16989517211914), new Vector3(-0.8809435367584229, -4.122784614562988, 9.15820598602295), new Vector3(-0.9581024646759033, -4.133321285247803, 7.284446716308594), new Vector3(0.3075847029685974, -4.129785537719727, 6.888793468475342), new Vector3(0.9156670570373535, -4.125320911407471, 7.207241535186768), new Vector3(1.28304922580719, -4.120517730712891, 7.787070274353027), new Vector3(1.3112918138504028, -4.1166605949401855, 8.47291374206543), new Vector3(0.41298723220825195, -4.115392208099365, 9.448396682739258), new Vector3(-1.20172917842865, -3.323627233505249, 8.559990882873535), new Vector3(-1.2288755178451538, -3.327333927154541, 7.900750637054443), new Vector3(-0.9227638840675354, -3.329136848449707, 7.316251277923584), new Vector3(-0.3654157221317291, -3.328552722930908, 6.963107585906982), new Vector3(0.29382774233818054, -3.325737953186035, 6.9359450340271), new Vector3(0.8783228397369385, -3.3214468955993652, 7.242040157318115), new Vector3(1.2314543724060059, -3.3168294429779053, 7.799377918243408), new Vector3(1.2586013078689575, -3.313122272491455, 8.458617210388184), new Vector3(0.9524897933006287, -3.311318874359131, 9.04311752319336), new Vector3(0.3951417803764343, -3.3119029998779297, 9.396262168884277), new Vector3(-0.2641015946865082, -3.3147177696228027, 9.42342472076416), new Vector3(-0.8485979437828064, -3.319009304046631, 9.117327690124512), new Vector3(0.41298723220825195, -7.012894153594971, 9.08381462097168), new Vector3(1.3112918138504028, -6.324020862579346, 8.393146514892578), new Vector3(1.28304922580719, -5.84178352355957, 7.905455112457275), new Vector3(0.9156670570373535, -5.435179233551025, 7.492057800292969), new Vector3(0.3075847029685974, -5.213159561157227, 7.263724327087402), new Vector3(-0.9581024646759033, -5.495428085327148, 7.5409932136535645), new Vector3(-0.8809435367584229, -6.812925815582275, 8.873391151428223), new Vector3(-0.2728599011898041, -7.034946918487549, 9.101726531982422), new Vector3(-1.2483258247375488, -6.406322956085205, 8.459993362426758), new Vector3(-1.2765675783157349, -5.924084663391113, 7.972301483154297), new Vector3(0.9928271174430847, -6.7526774406433105, 8.824455261230469), new Vector3(-0.3782625198364258, -5.235211372375488, 7.281635761260986), new Vector3(-0.9195230007171631, -5.464406967163086, -1.7809234857559204), new Vector3(-1.262446641921997, -5.885434150695801, -1.768570065498352), new Vector3(-1.262446641921997, -6.370398998260498, -1.7658435106277466), new Vector3(-0.9195230007171631, -6.7893548011779785, -1.7734720706939697), new Vector3(-0.3255612254142761, -7.0300445556640625, -1.7894134521484375), new Vector3(0.3602859675884247, -7.027973175048828, -1.8093950748443604), new Vector3(0.9542470574378967, -6.783698558807373, -1.8280647993087769), new Vector3(1.2971705198287964, -6.362671375274658, -1.8404178619384766), new Vector3(1.2971705198287964, -5.877706527709961, -1.843144416809082), new Vector3(0.9542470574378967, -5.458749771118164, -1.8355145454406738), new Vector3(0.3602859675884247, -5.2180609703063965, -1.8195737600326538), new Vector3(-0.3255612254142761, -5.2201313972473145, -1.799590826034546)]; +export let Handle_04_faces = [new Face3(24, 0, 1, null, 0x0000FF, 3), new Face3(24, 1, 2, null, 0x0000FF, 3), new Face3(24, 2, 3, null, 0x0000FF, 3), new Face3(24, 3, 4, null, 0x0000FF, 3), new Face3(24, 4, 5, null, 0x0000FF, 3), new Face3(24, 5, 6, null, 0x0000FF, 3), new Face3(24, 6, 7, null, 0x0000FF, 3), new Face3(24, 7, 8, null, 0x0000FF, 3), new Face3(24, 8, 9, null, 0x0000FF, 3), new Face3(24, 9, 10, null, 0x0000FF, 3), new Face3(24, 10, 11, null, 0x0000FF, 3), new Face3(11, 0, 24, null, 0x0000FF, 3), new Face3(91, 12, 13), new Face3(91, 13, 93), new Face3(93, 13, 14), new Face3(93, 14, 94), new Face3(94, 14, 15), new Face3(94, 15, 92), new Face3(92, 15, 16), new Face3(92, 16, 90), new Face3(90, 16, 17), new Face3(90, 17, 96), new Face3(96, 17, 18), new Face3(96, 18, 95), new Face3(95, 18, 19), new Face3(95, 19, 99), new Face3(99, 19, 20), new Face3(99, 20, 98), new Face3(98, 20, 21), new Face3(98, 21, 101), new Face3(101, 21, 22), new Face3(101, 22, 97), new Face3(97, 22, 23), new Face3(97, 23, 100), new Face3(91, 0, 11), new Face3(91, 11, 100), new Face3(13, 12, 25), new Face3(13, 25, 26), new Face3(14, 13, 26), new Face3(14, 26, 27), new Face3(15, 14, 27), new Face3(15, 27, 28), new Face3(16, 15, 28), new Face3(16, 28, 29), new Face3(17, 16, 29), new Face3(17, 29, 30), new Face3(18, 17, 30), new Face3(18, 30, 31), new Face3(19, 18, 31), new Face3(19, 31, 32), new Face3(20, 19, 32), new Face3(20, 32, 33), new Face3(21, 20, 33), new Face3(21, 33, 34), new Face3(22, 21, 34), new Face3(22, 34, 35), new Face3(23, 22, 35), new Face3(23, 35, 36), new Face3(12, 23, 36), new Face3(12, 36, 25), new Face3(25, 49, 50), new Face3(25, 50, 26), new Face3(49, 37, 38), new Face3(49, 38, 50), new Face3(26, 50, 51), new Face3(26, 51, 27), new Face3(50, 38, 39), new Face3(50, 39, 51), new Face3(27, 51, 52), new Face3(27, 52, 28), new Face3(51, 39, 40), new Face3(51, 40, 52), new Face3(28, 52, 53), new Face3(28, 53, 29), new Face3(52, 40, 41), new Face3(52, 41, 53), new Face3(29, 53, 54), new Face3(29, 54, 30), new Face3(53, 41, 42), new Face3(53, 42, 54), new Face3(30, 54, 55), new Face3(30, 55, 31), new Face3(54, 42, 43), new Face3(54, 43, 55), new Face3(31, 55, 56), new Face3(31, 56, 32), new Face3(55, 43, 44), new Face3(55, 44, 56), new Face3(32, 56, 57), new Face3(32, 57, 33), new Face3(56, 44, 45), new Face3(56, 45, 57), new Face3(33, 57, 58), new Face3(33, 58, 34), new Face3(57, 45, 46), new Face3(57, 46, 58), new Face3(34, 58, 59), new Face3(34, 59, 35), new Face3(58, 46, 47), new Face3(58, 47, 59), new Face3(35, 59, 60), new Face3(35, 60, 36), new Face3(59, 47, 48), new Face3(59, 48, 60), new Face3(36, 60, 49), new Face3(36, 49, 25), new Face3(60, 48, 37), new Face3(60, 37, 49), new Face3(38, 37, 61), new Face3(38, 61, 62), new Face3(39, 38, 62), new Face3(39, 62, 63), new Face3(40, 39, 63), new Face3(40, 63, 64), new Face3(41, 40, 64), new Face3(41, 64, 65), new Face3(42, 41, 65), new Face3(42, 65, 66), new Face3(43, 42, 66), new Face3(43, 66, 67), new Face3(44, 43, 67), new Face3(44, 67, 68), new Face3(45, 44, 68), new Face3(45, 68, 69), new Face3(46, 45, 69), new Face3(46, 69, 70), new Face3(47, 46, 70), new Face3(47, 70, 71), new Face3(48, 47, 71), new Face3(48, 71, 72), new Face3(37, 48, 72), new Face3(37, 72, 61), new Face3(120, 109, 62), new Face3(120, 62, 61), new Face3(109, 110, 63), new Face3(109, 63, 62), new Face3(110, 111, 64), new Face3(110, 64, 63), new Face3(111, 112, 65), new Face3(111, 65, 64), new Face3(112, 113, 66), new Face3(112, 66, 65), new Face3(113, 114, 67), new Face3(113, 67, 66), new Face3(114, 115, 68), new Face3(114, 68, 67), new Face3(115, 116, 69), new Face3(115, 69, 68), new Face3(116, 117, 70), new Face3(116, 70, 69), new Face3(117, 118, 71), new Face3(117, 71, 70), new Face3(118, 119, 72), new Face3(118, 72, 71), new Face3(119, 120, 61), new Face3(119, 61, 72), new Face3(72, 89, 78), new Face3(72, 78, 61), new Face3(63, 80, 81), new Face3(63, 81, 64), new Face3(67, 84, 85), new Face3(67, 85, 68), new Face3(64, 81, 82), new Face3(64, 82, 65), new Face3(61, 78, 79), new Face3(61, 79, 62), new Face3(69, 86, 87), new Face3(69, 87, 70), new Face3(66, 83, 84), new Face3(66, 84, 67), new Face3(65, 82, 83), new Face3(65, 83, 66), new Face3(71, 88, 89), new Face3(71, 89, 72), new Face3(70, 87, 88), new Face3(70, 88, 71), new Face3(62, 79, 80), new Face3(62, 80, 63), new Face3(68, 85, 86), new Face3(68, 86, 69), new Face3(0, 91, 93), new Face3(0, 93, 1), new Face3(1, 93, 94), new Face3(1, 94, 2), new Face3(2, 94, 92), new Face3(2, 92, 3), new Face3(3, 92, 90), new Face3(3, 90, 4), new Face3(4, 90, 96), new Face3(4, 96, 5), new Face3(5, 96, 95), new Face3(5, 95, 6), new Face3(6, 95, 99), new Face3(6, 99, 7), new Face3(7, 99, 98), new Face3(7, 98, 8), new Face3(8, 98, 101), new Face3(8, 101, 9), new Face3(9, 101, 97), new Face3(9, 97, 10), new Face3(10, 97, 100), new Face3(10, 100, 11), new Face3(12, 91, 100), new Face3(12, 100, 23), new Face3(104, 105, 114), new Face3(104, 114, 113), new Face3(105, 106, 115), new Face3(105, 115, 114), new Face3(106, 107, 116), new Face3(106, 116, 115), new Face3(102, 76, 109), new Face3(102, 109, 120), new Face3(76, 75, 110), new Face3(76, 110, 109), new Face3(75, 103, 111), new Face3(75, 111, 110), new Face3(103, 73, 112), new Face3(103, 112, 111), new Face3(73, 104, 113), new Face3(73, 113, 112), new Face3(107, 74, 117), new Face3(107, 117, 116), new Face3(74, 108, 118), new Face3(74, 118, 117), new Face3(108, 77, 119), new Face3(108, 119, 118), new Face3(77, 102, 120), new Face3(77, 120, 119), new Face3(74, 107, 122), new Face3(74, 122, 131), new Face3(107, 106, 123), new Face3(107, 123, 122), new Face3(104, 73, 132), new Face3(104, 132, 125), new Face3(106, 105, 124), new Face3(106, 124, 123), new Face3(75, 76, 129), new Face3(75, 129, 130), new Face3(73, 103, 126), new Face3(73, 126, 132), new Face3(105, 104, 125), new Face3(105, 125, 124), new Face3(102, 77, 128), new Face3(102, 128, 127), new Face3(103, 75, 130), new Face3(103, 130, 126), new Face3(77, 108, 121), new Face3(77, 121, 128), new Face3(76, 102, 127), new Face3(76, 127, 129), new Face3(108, 74, 131), new Face3(108, 131, 121), new Face3(126, 130, 134), new Face3(126, 134, 133), new Face3(130, 129, 135), new Face3(130, 135, 134), new Face3(129, 127, 136), new Face3(129, 136, 135), new Face3(127, 128, 137), new Face3(127, 137, 136), new Face3(128, 121, 138), new Face3(128, 138, 137), new Face3(121, 131, 139), new Face3(121, 139, 138), new Face3(131, 122, 140), new Face3(131, 140, 139), new Face3(122, 123, 141), new Face3(122, 141, 140), new Face3(123, 124, 142), new Face3(123, 142, 141), new Face3(124, 125, 143), new Face3(124, 143, 142), new Face3(125, 132, 144), new Face3(125, 144, 143), new Face3(132, 126, 133), new Face3(132, 133, 144), new Face3(169, 146, 145, null, 0x0000FF, 3), new Face3(169, 147, 146, null, 0x0000FF, 3), new Face3(169, 148, 147, null, 0x0000FF, 3), new Face3(169, 149, 148, null, 0x0000FF, 3), new Face3(169, 150, 149, null, 0x0000FF, 3), new Face3(169, 151, 150, null, 0x0000FF, 3), new Face3(169, 152, 151, null, 0x0000FF, 3), new Face3(169, 153, 152, null, 0x0000FF, 3), new Face3(169, 154, 153, null, 0x0000FF, 3), new Face3(169, 155, 154, null, 0x0000FF, 3), new Face3(169, 156, 155, null, 0x0000FF, 3), new Face3(156, 169, 145, null, 0x0000FF, 3), new Face3(236, 238, 158), new Face3(236, 158, 157), new Face3(238, 239, 159), new Face3(238, 159, 158), new Face3(239, 237, 160), new Face3(239, 160, 159), new Face3(237, 235, 161), new Face3(237, 161, 160), new Face3(235, 241, 162), new Face3(235, 162, 161), new Face3(241, 240, 163), new Face3(241, 163, 162), new Face3(240, 244, 164), new Face3(240, 164, 163), new Face3(244, 243, 165), new Face3(244, 165, 164), new Face3(243, 246, 166), new Face3(243, 166, 165), new Face3(246, 242, 167), new Face3(246, 167, 166), new Face3(242, 245, 168), new Face3(242, 168, 167), new Face3(236, 245, 156), new Face3(236, 156, 145), new Face3(158, 171, 170), new Face3(158, 170, 157), new Face3(159, 172, 171), new Face3(159, 171, 158), new Face3(160, 173, 172), new Face3(160, 172, 159), new Face3(161, 174, 173), new Face3(161, 173, 160), new Face3(162, 175, 174), new Face3(162, 174, 161), new Face3(163, 176, 175), new Face3(163, 175, 162), new Face3(164, 177, 176), new Face3(164, 176, 163), new Face3(165, 178, 177), new Face3(165, 177, 164), new Face3(166, 179, 178), new Face3(166, 178, 165), new Face3(167, 180, 179), new Face3(167, 179, 166), new Face3(168, 181, 180), new Face3(168, 180, 167), new Face3(157, 170, 181), new Face3(157, 181, 168), new Face3(170, 171, 195), new Face3(170, 195, 194), new Face3(194, 195, 183), new Face3(194, 183, 182), new Face3(171, 172, 196), new Face3(171, 196, 195), new Face3(195, 196, 184), new Face3(195, 184, 183), new Face3(172, 173, 197), new Face3(172, 197, 196), new Face3(196, 197, 185), new Face3(196, 185, 184), new Face3(173, 174, 198), new Face3(173, 198, 197), new Face3(197, 198, 186), new Face3(197, 186, 185), new Face3(174, 175, 199), new Face3(174, 199, 198), new Face3(198, 199, 187), new Face3(198, 187, 186), new Face3(175, 176, 200), new Face3(175, 200, 199), new Face3(199, 200, 188), new Face3(199, 188, 187), new Face3(176, 177, 201), new Face3(176, 201, 200), new Face3(200, 201, 189), new Face3(200, 189, 188), new Face3(177, 178, 202), new Face3(177, 202, 201), new Face3(201, 202, 190), new Face3(201, 190, 189), new Face3(178, 179, 203), new Face3(178, 203, 202), new Face3(202, 203, 191), new Face3(202, 191, 190), new Face3(179, 180, 204), new Face3(179, 204, 203), new Face3(203, 204, 192), new Face3(203, 192, 191), new Face3(180, 181, 205), new Face3(180, 205, 204), new Face3(204, 205, 193), new Face3(204, 193, 192), new Face3(181, 170, 194), new Face3(181, 194, 205), new Face3(205, 194, 182), new Face3(205, 182, 193), new Face3(183, 207, 206), new Face3(183, 206, 182), new Face3(184, 208, 207), new Face3(184, 207, 183), new Face3(185, 209, 208), new Face3(185, 208, 184), new Face3(186, 210, 209), new Face3(186, 209, 185), new Face3(187, 211, 210), new Face3(187, 210, 186), new Face3(188, 212, 211), new Face3(188, 211, 187), new Face3(189, 213, 212), new Face3(189, 212, 188), new Face3(190, 214, 213), new Face3(190, 213, 189), new Face3(191, 215, 214), new Face3(191, 214, 190), new Face3(192, 216, 215), new Face3(192, 215, 191), new Face3(193, 217, 216), new Face3(193, 216, 192), new Face3(182, 206, 217), new Face3(182, 217, 193), new Face3(265, 206, 207), new Face3(265, 207, 254), new Face3(254, 207, 208), new Face3(254, 208, 255), new Face3(255, 208, 209), new Face3(255, 209, 256), new Face3(256, 209, 210), new Face3(256, 210, 257), new Face3(257, 210, 211), new Face3(257, 211, 258), new Face3(258, 211, 212), new Face3(258, 212, 259), new Face3(259, 212, 213), new Face3(259, 213, 260), new Face3(260, 213, 214), new Face3(260, 214, 261), new Face3(261, 214, 215), new Face3(261, 215, 262), new Face3(262, 215, 216), new Face3(262, 216, 263), new Face3(263, 216, 217), new Face3(263, 217, 264), new Face3(264, 217, 206), new Face3(264, 206, 265), new Face3(217, 206, 223), new Face3(217, 223, 234), new Face3(208, 209, 226), new Face3(208, 226, 225), new Face3(212, 213, 230), new Face3(212, 230, 229), new Face3(209, 210, 227), new Face3(209, 227, 226), new Face3(206, 207, 224), new Face3(206, 224, 223), new Face3(214, 215, 232), new Face3(214, 232, 231), new Face3(211, 212, 229), new Face3(211, 229, 228), new Face3(210, 211, 228), new Face3(210, 228, 227), new Face3(216, 217, 234), new Face3(216, 234, 233), new Face3(215, 216, 233), new Face3(215, 233, 232), new Face3(207, 208, 225), new Face3(207, 225, 224), new Face3(213, 214, 231), new Face3(213, 231, 230), new Face3(145, 146, 238), new Face3(145, 238, 236), new Face3(146, 147, 239), new Face3(146, 239, 238), new Face3(147, 148, 237), new Face3(147, 237, 239), new Face3(148, 149, 235), new Face3(148, 235, 237), new Face3(149, 150, 241), new Face3(149, 241, 235), new Face3(150, 151, 240), new Face3(150, 240, 241), new Face3(151, 152, 244), new Face3(151, 244, 240), new Face3(152, 153, 243), new Face3(152, 243, 244), new Face3(153, 154, 246), new Face3(153, 246, 243), new Face3(154, 155, 242), new Face3(154, 242, 246), new Face3(155, 156, 245), new Face3(155, 245, 242), new Face3(157, 168, 245), new Face3(157, 245, 236), new Face3(249, 258, 259), new Face3(249, 259, 250), new Face3(250, 259, 260), new Face3(250, 260, 251), new Face3(251, 260, 261), new Face3(251, 261, 252), new Face3(247, 265, 254), new Face3(247, 254, 221), new Face3(221, 254, 255), new Face3(221, 255, 220), new Face3(220, 255, 256), new Face3(220, 256, 248), new Face3(248, 256, 257), new Face3(248, 257, 218), new Face3(218, 257, 258), new Face3(218, 258, 249), new Face3(252, 261, 262), new Face3(252, 262, 219), new Face3(219, 262, 263), new Face3(219, 263, 253), new Face3(253, 263, 264), new Face3(253, 264, 222), new Face3(222, 264, 265), new Face3(222, 265, 247), new Face3(219, 276, 267), new Face3(219, 267, 252), new Face3(252, 267, 268), new Face3(252, 268, 251), new Face3(249, 270, 277), new Face3(249, 277, 218), new Face3(251, 268, 269), new Face3(251, 269, 250), new Face3(220, 275, 274), new Face3(220, 274, 221), new Face3(218, 277, 271), new Face3(218, 271, 248), new Face3(250, 269, 270), new Face3(250, 270, 249), new Face3(247, 272, 273), new Face3(247, 273, 222), new Face3(248, 271, 275), new Face3(248, 275, 220), new Face3(222, 273, 266), new Face3(222, 266, 253), new Face3(221, 274, 272), new Face3(221, 272, 247), new Face3(253, 266, 276), new Face3(253, 276, 219), new Face3(271, 278, 279), new Face3(271, 279, 275), new Face3(275, 279, 280), new Face3(275, 280, 274), new Face3(274, 280, 281), new Face3(274, 281, 272), new Face3(272, 281, 282), new Face3(272, 282, 273), new Face3(273, 282, 283), new Face3(273, 283, 266), new Face3(266, 283, 284), new Face3(266, 284, 276), new Face3(276, 284, 285), new Face3(276, 285, 267), new Face3(267, 285, 286), new Face3(267, 286, 268), new Face3(268, 286, 287), new Face3(268, 287, 269), new Face3(269, 287, 288), new Face3(269, 288, 270), new Face3(270, 288, 289), new Face3(270, 289, 277), new Face3(277, 289, 278), new Face3(277, 278, 271)]; diff --git a/src/blueprint/scripts/tempSrc/LShape.json b/src/blueprint/scripts/tempSrc/LShape.json new file mode 100644 index 0000000..b4b0d2f --- /dev/null +++ b/src/blueprint/scripts/tempSrc/LShape.json @@ -0,0 +1,290 @@ +{ + "floorplan": { + "version": "2.0.1a", + "corners": { + "4ae6fabe-5cdc-ec3a-c858-f4537b0bd0b1": { + "x": 0, + "y": -5, + "elevation": 2.5 + }, + "a103d9da-46bd-88c7-3710-e0323ac74352": { + "x": 10, + "y": -5, + "elevation": 2.5 + }, + "718bc5a1-ef34-deaf-3e91-b7289a043090": { + "x": 10, + "y": 5, + "elevation": 2.5 + }, + "732d5821-5f91-217d-79aa-e8d11c51e97f": { + "x": 5, + "y": 5, + "elevation": 2.5 + }, + "47ad5165-6d74-ff0c-32c9-3f2660a988b5": { + "x": 5, + "y": 0, + "elevation": 2.5 + }, + "331a6234-c305-ab4c-2d4a-4aa69be00cab": { + "x": 0, + "y": 0, + "elevation": 2.5 + } + }, + "walls": [ + { + "corner1": "4ae6fabe-5cdc-ec3a-c858-f4537b0bd0b1", + "corner2": "a103d9da-46bd-88c7-3710-e0323ac74352", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5 + }, + "backTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5 + }, + "wallType": "STRAIGHT", + "a": { + "x": -146.44660940672622, + "y": -146.44660940672628 + }, + "b": { + "x": 146.44660940672628, + "y": -146.44660940672622 + }, + "thickness": 0.2 + }, + { + "corner1": "a103d9da-46bd-88c7-3710-e0323ac74352", + "corner2": "718bc5a1-ef34-deaf-3e91-b7289a043090", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5 + }, + "backTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5 + }, + "wallType": "STRAIGHT", + "a": { + "x": 146.44660940672628, + "y": -146.44660940672622 + }, + "b": { + "x": 146.44660940672622, + "y": 146.44660940672628 + }, + "thickness": 0.2 + }, + { + "corner1": "718bc5a1-ef34-deaf-3e91-b7289a043090", + "corner2": "732d5821-5f91-217d-79aa-e8d11c51e97f", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5 + }, + "backTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5 + }, + "wallType": "STRAIGHT", + "a": { + "x": 323.2233047033631, + "y": 323.22330470336317 + }, + "b": { + "x": 176.77669529663686, + "y": 323.2233047033631 + }, + "thickness": 0.2 + }, + { + "corner1": "732d5821-5f91-217d-79aa-e8d11c51e97f", + "corner2": "47ad5165-6d74-ff0c-32c9-3f2660a988b5", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5 + }, + "backTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5 + }, + "wallType": "STRAIGHT", + "a": { + "x": 176.77669529663686, + "y": 323.2233047033631 + }, + "b": { + "x": 176.7766952966369, + "y": 176.77669529663686 + }, + "thickness": 0.2 + }, + { + "corner1": "47ad5165-6d74-ff0c-32c9-3f2660a988b5", + "corner2": "331a6234-c305-ab4c-2d4a-4aa69be00cab", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5 + }, + "backTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5 + }, + "wallType": "STRAIGHT", + "a": { + "x": -176.7766952966369, + "y": -176.77669529663686 + }, + "b": { + "x": -323.22330470336317, + "y": -176.7766952966369 + }, + "thickness": 0.2 + }, + { + "corner1": "331a6234-c305-ab4c-2d4a-4aa69be00cab", + "corner2": "4ae6fabe-5cdc-ec3a-c858-f4537b0bd0b1", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5 + }, + "backTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5 + }, + "wallType": "STRAIGHT", + "a": { + "x": -323.22330470336317, + "y": -176.7766952966369 + }, + "b": { + "x": -323.2233047033631, + "y": -323.22330470336317 + }, + "thickness": 0.2 + } + ], + "rooms": { + "4ae6fabe-5cdc-ec3a-c858-f4537b0bd0b1,a103d9da-46bd-88c7-3710-e0323ac74352,718bc5a1-ef34-deaf-3e91-b7289a043090,732d5821-5f91-217d-79aa-e8d11c51e97f,47ad5165-6d74-ff0c-32c9-3f2660a988b5,331a6234-c305-ab4c-2d4a-4aa69be00cab": { + "name": "Corridor" + } + }, + "wallTextures": [], + "floorTextures": {}, + "newFloorTextures": { + "331a6234-c305-ab4c-2d4a-4aa69be00cab,47ad5165-6d74-ff0c-32c9-3f2660a988b5,4ae6fabe-5cdc-ec3a-c858-f4537b0bd0b1,718bc5a1-ef34-deaf-3e91-b7289a043090,732d5821-5f91-217d-79aa-e8d11c51e97f,a103d9da-46bd-88c7-3710-e0323ac74352": { + "color": "#FFFFFF", + "emissive": "#181818", + "repeat": 300, + "ambientmap": "textures/Floor/Marble_Tiles_001/Marble_Tiles_001_ambientOcclusion.jpg", + "colormap": "textures/Floor/Marble_Tiles_001/Marble_Tiles_001_basecolor.jpg", + "roughnessmap": "textures/Floor/Marble_Tiles_001/Marble_Tiles_001_roughness.jpg", + "normalmap": "textures/Floor/Marble_Tiles_001/Marble_Tiles_001_normal.jpg", + "reflective": 0.5, + "shininess": 0.5 + } + }, + "carbonSheet": {}, + "units": "m" + }, + "items": [] +} \ No newline at end of file diff --git a/src/blueprint/scripts/tempSrc/designWithBoundary.json b/src/blueprint/scripts/tempSrc/designWithBoundary.json new file mode 100644 index 0000000..221a13c --- /dev/null +++ b/src/blueprint/scripts/tempSrc/designWithBoundary.json @@ -0,0 +1,194 @@ +{ + "floorplan": { + "version": "2.0.1a", + "boundary": { + "points": [ + {"x":-20.0, "y": -20.0, "elevation": 5.0}, + {"x":20.0, "y": -20.0, "elevation": 5.0}, + {"x":20.0, "y": 20.0, "elevation": 5.0}, + {"x":-20.0, "y": 20.0, "elevation": 5.0}, + ], + "style": { + "color": "#00FF00", + "type": "texture", + "colormap": "textures/Ground/GrassTextureDeviantArt.jpg", + "repeat": 3000 + } + }, + "corners": { + "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2": { + "x": 0, + "y": 0, + "elevation": 2.5 + }, + "f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "x": 0, + "y": 5, + "elevation": 2.5 + }, + "da026c08-d76a-a944-8e7b-096b752da9ed": { + "x": 5, + "y": 5, + "elevation": 2.5 + }, + "4e3d65cb-54c0-0681-28bf-bddcc7bdb571": { + "x": 5, + "y": 0, + "elevation": 2.5 + } + }, + "walls": [{ + "corner1": "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "corner2": "f90da5e3-9e0e-eba7-173d-eb0b071e838e", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": -176.77669529663686, + "y": 176.7766952966369 + }, + "b": { + "x": -176.7766952966369, + "y": 323.22330470336317 + }, + "thickness": 0.2 + }, + { + "corner1": "f90da5e3-9e0e-eba7-173d-eb0b071e838e", + "corner2": "da026c08-d76a-a944-8e7b-096b752da9ed", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": 176.7766952966369, + "y": 676.7766952966368 + }, + "b": { + "x": 323.22330470336317, + "y": 676.776695296637 + }, + "thickness": 0.2 + }, + { + "corner1": "da026c08-d76a-a944-8e7b-096b752da9ed", + "corner2": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": 676.7766952966368, + "y": 323.2233047033631 + }, + "b": { + "x": 676.776695296637, + "y": 176.77669529663686 + }, + "thickness": 0.2 + }, + { + "corner1": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571", + "corner2": "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": 323.2233047033631, + "y": -176.77669529663686 + }, + "b": { + "x": 176.77669529663686, + "y": -176.7766952966369 + }, + "thickness": 0.2 + } + ], + "rooms": { + "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2,4e3d65cb-54c0-0681-28bf-bddcc7bdb571,da026c08-d76a-a944-8e7b-096b752da9ed,f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "name": "A Room" + } + }, + "wallTextures": [], + "floorTextures": {}, + "newFloorTextures": { + "4e3d65cb-54c0-0681-28bf-bddcc7bdb571,71d4f128-ae80-3d58-9bd2-711c6ce6cdf2,da026c08-d76a-a944-8e7b-096b752da9ed,f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "repeat": 100, + "roughnessmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_roughness.jpg", + "ambientmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_ambientOcclusion.jpg", + "normalmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_normal.jpg", + "colormap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_basecolor.jpg", + "color": "#FFFFFF", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5, + } + }, + "carbonSheet": {}, + "units": "m" + }, + "items": [ + ] +} \ No newline at end of file diff --git a/src/blueprint/scripts/tempSrc/designWithoutBoundary.json b/src/blueprint/scripts/tempSrc/designWithoutBoundary.json new file mode 100644 index 0000000..8abf315 --- /dev/null +++ b/src/blueprint/scripts/tempSrc/designWithoutBoundary.json @@ -0,0 +1,404 @@ +{ + "floorplan": { + "version": "2.0.1a", + "corners": { + "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2": { + "x": 0, + "y": 0, + "elevation": 2.5 + }, + "f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "x": 0, + "y": 5, + "elevation": 2.5 + }, + "da026c08-d76a-a944-8e7b-096b752da9ed": { + "x": 5, + "y": 5, + "elevation": 2.5 + }, + "4e3d65cb-54c0-0681-28bf-bddcc7bdb571": { + "x": 5, + "y": 0, + "elevation": 2.5 + } + }, + "walls": [{ + "corner1": "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "corner2": "f90da5e3-9e0e-eba7-173d-eb0b071e838e", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": -176.77669529663686, + "y": 176.7766952966369 + }, + "b": { + "x": -176.7766952966369, + "y": 323.22330470336317 + }, + "thickness": 0.2 + }, + { + "corner1": "f90da5e3-9e0e-eba7-173d-eb0b071e838e", + "corner2": "da026c08-d76a-a944-8e7b-096b752da9ed", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": 176.7766952966369, + "y": 676.7766952966368 + }, + "b": { + "x": 323.22330470336317, + "y": 676.776695296637 + }, + "thickness": 0.2 + }, + { + "corner1": "da026c08-d76a-a944-8e7b-096b752da9ed", + "corner2": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": 676.7766952966368, + "y": 323.2233047033631 + }, + "b": { + "x": 676.776695296637, + "y": 176.77669529663686 + }, + "thickness": 0.2 + }, + { + "corner1": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571", + "corner2": "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": 323.2233047033631, + "y": -176.77669529663686 + }, + "b": { + "x": 176.77669529663686, + "y": -176.7766952966369 + }, + "thickness": 0.2 + } + ], + "rooms": { + "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2,4e3d65cb-54c0-0681-28bf-bddcc7bdb571,da026c08-d76a-a944-8e7b-096b752da9ed,f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "name": "A Room" + } + }, + "wallTextures": [], + "floorTextures": {}, + "newFloorTextures": { + "4e3d65cb-54c0-0681-28bf-bddcc7bdb571,71d4f128-ae80-3d58-9bd2-711c6ce6cdf2,da026c08-d76a-a944-8e7b-096b752da9ed,f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "repeat": 100, + "roughnessmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_roughness.jpg", + "ambientmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_ambientOcclusion.jpg", + "normalmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_normal.jpg", + "colormap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_basecolor.jpg", + "color": "#FFFFFF", + "emissive": "#000000", + "reflective": 0.5, + "shininess": 0.5, + } + }, + "carbonSheet": {}, + "units": "m" + }, + "items": [{ + "id": "7d0b3e90-c315-e7a5-a6d9-594757d5b7e4", + "itemName": "An Item", + "itemType": 3, + "position": [ + 10, + 138.38790186348007, + 185.34460161835352 + ], + "rotation": [ + 0, + 1.5707963267948966, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "size": [ + 240, + 100, + 50 + ], + "fixed": true, + "resizable": true, + "modelURL": "models/HollowCube.glb", + "isParametric": false, + "wall": "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2,f90da5e3-9e0e-eba7-173d-eb0b071e838e", + "wallSide": "back", + "wallSurfacePoint": [ + 10, + 138.38790186348007, + 185.34460161835352 + ] + }, + { + "itemName": "Tennis Table", + "itemType": 1, + "position": [ + 280, + 50, + 350 + ], + "rotation": [ + 0, + 0, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "size": [ + 281.598, + 98.1, + 172.4 + ], + "fixed": false, + "resizable": false, + "modelURL": "models/TableTennisTable.glb", + "isParametric": false + }, + { + "itemName": "Andrea Wox Table", + "itemType": 1, + "position": [ + 280, + 25, + 130 + ], + "rotation": [ + 0, + 0, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "size": [ + 161.0, + 51.8, + 161.0 + ], + "fixed": false, + "resizable": false, + "modelURL": "models/AndreaWox_Table_Resized.glb", + "isParametric": false + }, + { + "itemName": "DoubleChairWithPillow", + "itemType": 9, + "position": [ + 99.27116005634912, + 41.36685, + 49.64319999999989 + ], + "rotation": [ + 0, + 0, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "size": [ + 108.85, + 72.7337, + 69.2864 + ], + "fixed": false, + "resizable": false, + "modelURL": "models/DoubleChairWithPillow.glb", + "isParametric": false, + "wall": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571,71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "wallSide": "back", + "wallSurfacePoint": [ + 99.27116005634912, + 70.88314014751387, + 9.999999999999886 + ] + }, + { + "itemName": "Parametric Door 01", + "isParametric": true, + "baseParametricType": "DOOR", + "subParametricData": { + "type": 6, + "frameColor": 15198183, + "doorColor": 15198183, + "doorHandleColor": 15790320, + "glassColor": 8900331, + "frameWidth": 100, + "frameHeight": 200, + "frameSize": 5, + "frameThickness": 20, + "doorRatio": 0.5, + "openDirection": "RIGHT", + "handleType": "HANDLE_01" + }, + "itemType": 7, + "position": [ + 252.10994952514454, + 105, + 10 + ], + "rotation": [ + 0, + 0, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "size": [ + 100, + 200, + 20 + ], + "fixed": false, + "resizable": false, + "wall": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571,71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "wallSide": "back", + "wallSurfacePoint": [ + 252.10994952514454, + 105, + 10 + ] + }, + { + "itemName": "Parametric Door 02", + "isParametric": true, + "baseParametricType": "DOOR", + "subParametricData": { + "type": 5, + "frameColor": 15198183, + "doorColor": 15198183, + "doorHandleColor": 15790320, + "glassColor": 8900331, + "frameWidth": 122, + "frameHeight": 208, + "frameSize": 10.9, + "frameThickness": 20, + "doorRatio": 0.5, + "openDirection": "RIGHT", + "handleType": "HANDLE_01" + }, + "itemType": 7, + "position": [ + 245.9620664305963, + 109, + 490 + ], + "rotation": [ + 0, + 3.141592653589793, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "size": [ + 100, + 200, + 20 + ], + "fixed": false, + "resizable": false, + "wall": "f90da5e3-9e0e-eba7-173d-eb0b071e838e,da026c08-d76a-a944-8e7b-096b752da9ed", + "wallSide": "back", + "wallSurfacePoint": [ + 245.9620664305963, + 109, + 490 + ] + } + ] +} \ No newline at end of file diff --git a/src/blueprint/scripts/tempSrc/empty.json b/src/blueprint/scripts/tempSrc/empty.json new file mode 100644 index 0000000..7853e0a --- /dev/null +++ b/src/blueprint/scripts/tempSrc/empty.json @@ -0,0 +1,141 @@ +'{ +"floorplan": { + "version": "0.0.2a", + "units": "m", + "corners": { + "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2": { + "x": 0, + "y": 0, + "elevation": 2.5 + }, + "f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "x": 0, + "y": 5, + "elevation": 2.5 + }, + "da026c08-d76a-a944-8e7b-096b752da9ed": { + "x": 5, + "y": 5, + "elevation": 2.5 + }, + "4e3d65cb-54c0-0681-28bf-bddcc7bdb571": { + "x": 5, + "y": 0, + "elevation": 2.5 + } + }, + "walls": [{ + "corner1": "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "corner2": "f90da5e3-9e0e-eba7-173d-eb0b071e838e", + "frontTexture": { + "url": "rooms/textures/wallmap.png", + "stretch": true, + "scale": 0 + }, + "backTexture": { + "url": "rooms/textures/wallmap.png", + "stretch": true, + "scale": 0 + }, + "wallType": "STRAIGHT", + "a": { + "x": -176.77669529663686, + "y": 176.7766952966369 + }, + "b": { + "x": -176.7766952966369, + "y": 323.22330470336317 + } + }, + { + "corner1": "f90da5e3-9e0e-eba7-173d-eb0b071e838e", + "corner2": "da026c08-d76a-a944-8e7b-096b752da9ed", + "frontTexture": { + "url": "rooms/textures/wallmap.png", + "stretch": true, + "scale": 0 + }, + "backTexture": { + "url": "rooms/textures/wallmap.png", + "stretch": true, + "scale": 0 + }, + "wallType": "STRAIGHT", + "a": { + "x": 176.7766952966369, + "y": 676.7766952966368 + }, + "b": { + "x": 323.22330470336317, + "y": 676.776695296637 + } + }, + { + "corner1": "da026c08-d76a-a944-8e7b-096b752da9ed", + "corner2": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571", + "frontTexture": { + "url": "rooms/textures/wallmap.png", + "stretch": true, + "scale": 0 + }, + "backTexture": { + "url": "rooms/textures/wallmap.png", + "stretch": true, + "scale": 0 + }, + "wallType": "STRAIGHT", + "a": { + "x": 676.7766952966368, + "y": 323.2233047033631 + }, + "b": { + "x": 676.776695296637, + "y": 176.77669529663686 + } + }, + { + "corner1": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571", + "corner2": "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "frontTexture": { + "url": "rooms/textures/wallmap.png", + "stretch": true, + "scale": 0 + }, + "backTexture": { + "url": "rooms/textures/wallmap.png", + "stretch": true, + "scale": 0 + }, + "wallType": "STRAIGHT", + "a": { + "x": 323.2233047033631, + "y": -176.77669529663686 + }, + "b": { + "x": 176.77669529663686, + "y": -176.7766952966369 + } + } + ], + "rooms": { + "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2,4e3d65cb-54c0-0681-28bf-bddcc7bdb571,da026c08-d76a-a944-8e7b-096b752da9ed,f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "name": "New Room" + } + }, + "wallTextures": [], + "floorTextures": {}, + "newFloorTextures": {}, + "carbonSheet": { + "url": "", + "transparency": 1, + "x": 0, + "y": 0, + "anchorX": 0, + "anchorY": 0, + "width": 0.01, + "height": 0.01 + } +}, +"items": [{ "id": "7d0b3e90-c315-e7a5-a6d9-594757d5b7e4", "itemName": "An Item", "itemType": 1, "position": [0, 0, 0], "rotation": [0, 0, 0], "scale": [1, 1, 1], "size": [1, 1, 1], "fixed": true, "resizable": true }]; +} +' \ No newline at end of file diff --git a/src/blueprint/scripts/tempSrc/empty_room.json b/src/blueprint/scripts/tempSrc/empty_room.json new file mode 100644 index 0000000..9e4c684 --- /dev/null +++ b/src/blueprint/scripts/tempSrc/empty_room.json @@ -0,0 +1,176 @@ +{ + "floorplan": { + "version": "2.0.1a", + "corners": { + "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2": { + "x": 0, + "y": 0, + "elevation": 2.5 + }, + "f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "x": 0, + "y": 5, + "elevation": 2.5 + }, + "da026c08-d76a-a944-8e7b-096b752da9ed": { + "x": 5, + "y": 5, + "elevation": 2.5 + }, + "4e3d65cb-54c0-0681-28bf-bddcc7bdb571": { + "x": 5, + "y": 0, + "elevation": 2.5 + } + }, + "walls": [{ + "corner1": "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "corner2": "f90da5e3-9e0e-eba7-173d-eb0b071e838e", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": -176.77669529663686, + "y": 176.7766952966369 + }, + "b": { + "x": -176.7766952966369, + "y": 323.22330470336317 + }, + "thickness": 0.2 + }, + { + "corner1": "f90da5e3-9e0e-eba7-173d-eb0b071e838e", + "corner2": "da026c08-d76a-a944-8e7b-096b752da9ed", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": 176.7766952966369, + "y": 676.7766952966368 + }, + "b": { + "x": 323.22330470336317, + "y": 676.776695296637 + }, + "thickness": 0.2 + }, + { + "corner1": "da026c08-d76a-a944-8e7b-096b752da9ed", + "corner2": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": 676.7766952966368, + "y": 323.2233047033631 + }, + "b": { + "x": 676.776695296637, + "y": 176.77669529663686 + }, + "thickness": 0.2 + }, + { + "corner1": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571", + "corner2": "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": 323.2233047033631, + "y": -176.77669529663686 + }, + "b": { + "x": 176.77669529663686, + "y": -176.7766952966369 + }, + "thickness": 0.2 + } + ], + "rooms": { + "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2,4e3d65cb-54c0-0681-28bf-bddcc7bdb571,da026c08-d76a-a944-8e7b-096b752da9ed,f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "name": "New Room" + } + }, + "wallTextures": [], + "floorTextures": {}, + "newFloorTextures": { + "4e3d65cb-54c0-0681-28bf-bddcc7bdb571,71d4f128-ae80-3d58-9bd2-711c6ce6cdf2,da026c08-d76a-a944-8e7b-096b752da9ed,f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "repeat": 100, + "roughnessmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_roughness.jpg", + "ambientmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_ambientOcclusion.jpg", + "normalmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_normal.jpg", + "colormap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_basecolor.jpg", + "color": "#FFFFFF" + } + }, + "carbonSheet": {}, + "units": "m" + }, + "items": [] +} \ No newline at end of file diff --git a/src/blueprint/scripts/tempSrc/floor_textures.json b/src/blueprint/scripts/tempSrc/floor_textures.json new file mode 100644 index 0000000..818dbf7 --- /dev/null +++ b/src/blueprint/scripts/tempSrc/floor_textures.json @@ -0,0 +1,54 @@ +{ + "Stylized_Stone_Floor_001": { + "repeat": 100, + "ambientmap": "textures/Floor/Stylized_Stone_Floor_001/Stylized_Stone_Floor_001_ambientOcclusion.jpg", + "normalmap": "textures/Floor/Stylized_Stone_Floor_001/Stylized_Stone_Floor_001_normal.jpg", + "colormap": "textures/Floor/Stylized_Stone_Floor_001/Stylized_Stone_Floor_001_basecolor.jpg", + "roughnessmap": "textures/Floor/Stylized_Stone_Floor_001/Stylized_Stone_Floor_001_roughness.jpg" + }, + "Rubber_Floor_001": { + "repeat": 100, + "reflective": 1.0, + "roughnessmap": "textures/Floor/Rubber_Floor_001/Rubber_Floor_001_roughness.jpg", + "colormap": "textures/Floor/Rubber_Floor_001/Rubber_Floor_001_basecolor.jpg", + "ambientmap": "textures/Floor/Rubber_Floor_001/Rubber_Floor_001_ambientOcclusion.jpg", + "normalmap": "textures/Floor/Rubber_Floor_001/Rubber_Floor_001_normal.jpg" + }, + "Wood_Herringbone_Tiles_001": { + "repeat": 100, + "ambientmap": "textures/Floor/Wood_Herringbone_Tiles_001/Wood_Herringbone_Tiles_001_ambientOcclusion.jpg", + "colormap": "textures/Floor/Wood_Herringbone_Tiles_001/Wood_Herringbone_Tiles_001_basecolor.jpg", + "normalmap": "textures/Floor/Wood_Herringbone_Tiles_001/Wood_Herringbone_Tiles_001_normal.jpg", + "roughnessmap": "textures/Floor/Wood_Herringbone_Tiles_001/Wood_Herringbone_Tiles_001_roughness.jpg" + }, + "Stone_Tiles_004": { + "repeat": 100, + "ambientmap": "textures/Floor/Stone_Tiles_004/Stone_Tiles_004_ambientOcclusion.jpg", + "roughnessmap": "textures/Floor/Stone_Tiles_004/Stone_Tiles_004_roughness.jpg", + "normalmap": "textures/Floor/Stone_Tiles_004/Stone_Tiles_004_normal.jpg", + "colormap": "textures/Floor/Stone_Tiles_004/Stone_Tiles_004_basecolor.jpg" + }, + "Terracotta_Tiles_003": { + "repeat": 100, + "reflective": 1.0, + "normalmap": "textures/Floor/Terracotta_Tiles_003/Terracota_Tiles_003_normal.jpg", + "ambientmap": "textures/Floor/Terracotta_Tiles_003/Terracota_Tiles_003_ambientOcclusion.jpg", + "colormap": "textures/Floor/Terracotta_Tiles_003/Terracota_Tiles_003_basecolor.jpg", + "roughnessmap": "textures/Floor/Terracotta_Tiles_003/Terracota_Tiles_003_roughness.jpg" + }, + "Marble_Tiles_001": { + "repeat": 100, + "reflective": 0.1, + "ambientmap": "textures/Floor/Marble_Tiles_001/Marble_Tiles_001_ambientOcclusion.jpg", + "colormap": "textures/Floor/Marble_Tiles_001/Marble_Tiles_001_basecolor.jpg", + "roughnessmap": "textures/Floor/Marble_Tiles_001/Marble_Tiles_001_roughness.jpg", + "normalmap": "textures/Floor/Marble_Tiles_001/Marble_Tiles_001_normal.jpg" + }, + "Terrazzo_Tiles_001": { + "repeat": 100, + "roughnessmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_roughness.jpg", + "ambientmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_ambientOcclusion.jpg", + "normalmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_normal.jpg", + "colormap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_basecolor.jpg" + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/tempSrc/index.js b/src/blueprint/scripts/tempSrc/index.js new file mode 100644 index 0000000..45dbaa6 --- /dev/null +++ b/src/blueprint/scripts/tempSrc/index.js @@ -0,0 +1,537 @@ +import JSZip from "jszip"; +import FileSaver from 'file-saver'; +import FPS from 'fps-now'; + +import { BlueprintJS } from './scripts/blueprint.js'; +import { EVENT_LOADED, EVENT_NOTHING_2D_SELECTED, EVENT_CORNER_2D_CLICKED, EVENT_WALL_2D_CLICKED, EVENT_ROOM_2D_CLICKED, EVENT_WALL_CLICKED, EVENT_ROOM_CLICKED, EVENT_NO_ITEM_SELECTED, EVENT_ITEM_SELECTED, EVENT_GLTF_READY } from './scripts/core/events.js'; +import { Configuration, configDimUnit, viewBounds } from './scripts/core/configuration.js'; +import { dimMeter, TEXTURE_NO_PREVIEW } from './scripts/core/constants.js'; +import QuickSettings from 'quicksettings'; + +import { Dimensioning } from './scripts/core/dimensioning.js'; +import { ParametricsInterface } from './scripts/ParametricsInterface.js'; + +import * as floor_textures_json from './floor_textures.json'; +import * as wall_textures_json from './wall_textures.json'; +// import * as default_room_json from './parametrics_items.json'; +// import * as default_room_json from './empty_room.json'; +import * as default_room_json from './designWithBoundary.json'; +// import * as default_room_json from './designWithoutBoundary.json'; +// import * as default_room_json from './LShape.json'; + +const fps = FPS.of({x: 0, y: 0}); +fps.start(); + + +let default_room = JSON.stringify(default_room_json); +let startY = 0; +let panelWidths = 200; +let uxInterfaceHeight = 450; +let subPanelsHeight = 460; +let floor_textures = floor_textures_json['default']; +let floor_texture_keys = Object.keys(floor_textures); + +let wall_textures = wall_textures_json['default']; +let wall_texture_keys = Object.keys(wall_textures); + +let blueprint3d = null; + +let app_parent = document.getElementById('bp3d-js-app'); + +let configurationHelper = null; +let floorplanningHelper = null; +let roomplanningHelper = null; + + +let settingsViewer2d = null; +let settingsSelectedCorner = null; +let settingsSelectedWall = null; +let settingsSelectedRoom = null; + +let settingsSelectedRoom3D = null; +let settingsSelectedWall3D = null; + +let settingsViewer3d = null; +let uxInterface = null; + +let parametricContextInterface = null; +let doorsData = { + 'Door Type 1': { src: 'assets/doors/DoorType1.png', type: 1 }, + 'Door Type 2': { src: 'assets/doors/DoorType2.png', type: 2 }, + 'Door Type 3': { src: 'assets/doors/DoorType3.png', type: 3 }, + 'Door Type 4': { src: 'assets/doors/DoorType4.png', type: 4 }, + 'Door Type 5': { src: 'assets/doors/DoorType5.png', type: 5 }, + 'Door Type 6': { src: 'assets/doors/DoorType6.png', type: 6 }, +}; +let doorTypes = Object.keys(doorsData); +let opts = { + viewer2d: { + id: 'bp3djs-viewer2d', + viewer2dOptions: { + 'corner-radius': 12.5, + 'boundary-point-radius': 5.0, + 'boundary-line-thickness': 2.0, + 'boundary-point-color':'#030303', + 'boundary-line-color':'#090909', + pannable: true, + zoomable: true, + scale: false, + rotate: true, + translate: true, + dimlinecolor: '#3E0000', + dimarrowcolor: '#FF0000', + dimtextcolor: '#000000', + pixiAppOptions: { + resolution: 1, + }, + pixiViewportOptions: { + passiveWheel: false, + } + }, + }, + viewer3d: { + id: 'bp3djs-viewer3d', + viewer3dOptions:{ + occludedWalls: false, + occludedRoofs: false + } + }, + textureDir: "models/textures/", + widget: false, + resize: true, +}; + +function selectFloorTexture(data) { + if (!data.index) { + data = settingsSelectedRoom3D.getValue('Floor Textures'); + } + let floor_texture_pack = floor_textures[data.value]; + if(floor_texture_pack.colormap){ + settingsSelectedRoom3D.setValue('Floor Texture:', floor_texture_pack.colormap); + } + else{ + settingsSelectedRoom3D.setValue('Floor Texture:', TEXTURE_NO_PREVIEW); + } + roomplanningHelper.roomTexturePack = floor_texture_pack; +} + +function selectWallTexture(data) { + if (!data.index) { + if (settingsSelectedWall3D._hidden && !settingsSelectedRoom3D._hidden) { + data = settingsSelectedRoom3D.getValue('All Wall Textures'); + } else { + data = settingsSelectedWall3D.getValue('Wall Textures'); + } + + } + let wall_texture_pack = wall_textures[data.value]; + let colormap = wall_texture_pack.colormap; + if (settingsSelectedWall3D._hidden && !settingsSelectedRoom3D._hidden) { + if(colormap){ + settingsSelectedRoom3D.setValue('All Wall Texture:', colormap); + } + else{ + settingsSelectedRoom3D.setValue('All Wall Texture:', TEXTURE_NO_PREVIEW); + } + roomplanningHelper.roomWallsTexturePack = wall_texture_pack; + } else { + if(colormap){ + settingsSelectedWall3D.setValue('Wall Texture:', wall_texture_pack.colormap); + } + else{ + settingsSelectedWall3D.setValue('Wall Texture:', TEXTURE_NO_PREVIEW); + } + roomplanningHelper.wallTexturePack = wall_texture_pack; + } +} + + +function selectFloorTextureColor(data) { + roomplanningHelper.setRoomFloorColor(data); +} + +function selectWallTextureColor(data) { + + if (settingsSelectedWall3D._hidden && !settingsSelectedRoom3D._hidden) { + roomplanningHelper.setRoomWallsTextureColor(data); + } + else { + roomplanningHelper.setWallColor(data); + } +} + +function selectDoorForWall(data) { + if (!data.index) { + data = settingsSelectedWall3D.getValue('Select Door'); + } + let selectedDoor = doorsData[data.value]; + settingsSelectedWall3D.setValue('Door Preview:', selectedDoor.src); +} + +function addDoorForWall() { + let data = settingsSelectedWall3D.getValue('Select Door'); + let selectedDoor = doorsData[data.value]; + roomplanningHelper.addParametricDoorToCurrentWall(selectedDoor.type); +} + +function switchViewer() { + blueprint3d.switchView(); + if (blueprint3d.currentView === 2) { + uxInterface.setValue("Current View", "Floor Planning"); + settingsViewer3d.hide(); + settingsViewer2d.show(); + + settingsSelectedWall3D.hide(); + settingsSelectedRoom3D.hide(); + if (parametricContextInterface) { + parametricContextInterface.destroy(); + parametricContextInterface = null; + } + + } else if (blueprint3d.currentView === 3) { + uxInterface.setValue("Current View", "Room Planning"); + settingsViewer2d.hide(); + settingsSelectedCorner.hide(); + settingsSelectedWall.hide(); + settingsSelectedRoom.hide(); + settingsViewer3d.show(); + } +} + +function switchViewer2DToDraw() { + blueprint3d.setViewer2DModeToDraw(); +} + +function switchViewer2DToMove() { + blueprint3d.setViewer2DModeToMove(); +} + +function switchViewer2DToTransform() { + blueprint3d.switchViewer2DToTransform(); +} + +function loadBlueprint3DDesign(filedata) { + let reader = new FileReader(); + reader.onload = function(event) { + let data = event.target.result; + blueprint3d.model.loadSerialized(data); + }; + reader.readAsText(filedata); +} + +function loadLockedBlueprint3DDesign(filedata) { + let reader = new FileReader(); + reader.onload = function(event) { + let data = event.target.result; + blueprint3d.model.loadLockedSerialized(data); + }; + reader.readAsText(filedata); +} + +function saveBlueprint3DDesign() { + let data = blueprint3d.model.exportSerialized(); + let a = window.document.createElement('a'); + let blob = new Blob([data], { type: 'text' }); + a.href = window.URL.createObjectURL(blob); + a.download = 'design.blueprint3d'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); +} + +function saveBlueprint3D() { + blueprint3d.roomplanner.exportSceneAsGTLF(); +} + +function exportDesignAsPackage() { + function getWallTextureImages(texobject, pre_image_paths) { + let image_paths = []; + if (!texobject) { + return image_paths; + } + if (texobject.normalmap && !pre_image_paths.includes(texobject.normalmap)) { + image_paths.push(texobject.normalmap); + } + if (texobject.colormap && !pre_image_paths.includes(texobject.colormap)) { + image_paths.push(texobject.colormap); + } + if (texobject.roughnessmap && !pre_image_paths.includes(texobject.roughnessmap)) { + image_paths.push(texobject.roughnessmap); + } + if (texobject.ambientmap && !pre_image_paths.includes(texobject.ambientmap)) { + image_paths.push(texobject.ambientmap); + } + if (texobject.bumpmap && !pre_image_paths.includes(texobject.bumpmap)) { + image_paths.push(texobject.bumpmap); + } + return image_paths; + } + + let designFile = blueprint3d.model.exportSerialized(); + let jsonDesignFile = JSON.parse(designFile); + let floorplan = jsonDesignFile.floorplan; + let items = jsonDesignFile.items; + let images = []; + let models = []; + let i = 0; + for (i = 0; i < floorplan.walls.length; i++) { + let wall = floorplan.walls[i]; + images = images.concat(getWallTextureImages(wall.frontTexture, images)); + images = images.concat(getWallTextureImages(wall.backTexture, images)); + } + Object.values(floorplan.newFloorTextures).forEach((texturePack) => { + images = images.concat(getWallTextureImages(texturePack, images)); + console.log("TEXTURE PACK ", texturePack); + }); + // for (i = 0; i < floorplan.newFloorTextures.length; i++) { + // let roomTexture = floorplan.newFloorTextures[i]; + // console.log(roomTexture); + + // } + for (i = 0; i < items.length; i++) { + let item = items[i]; + if (!item.isParametric && !models.includes(item.modelURL)) { + models.push(item.modelURL); + } + } + + let fetched_image_files = []; + let fetched_model_files = []; + + function writeZip() { + if (!fetched_image_files.length === images.length && !fetched_model_files.length === models.length) { + return; + } + } + + let zip = new JSZip(); + zip.file('design.blueprint3d', designFile); + + //Adding the zip files from an url + //Taken from https://medium.com/@joshmarinacci/a-little-fun-with-zip-files-4058812abf92 + for (i = 0; i < images.length; i++) { + let image_path = images[i]; + const imageBlob = fetch(image_path).then(response => { + if (response.status === 200) { + return response.blob(); + } + return Promise.reject(new Error(response.statusText)); + }); + zip.file(image_path, imageBlob); //, { base64: false }); //, { base64: true } + } + for (i = 0; i < models.length; i++) { + let model_path = models[i]; + const gltfBlob = fetch(model_path).then(response => { + if (response.status === 200) { + return response.blob(); + } + return Promise.reject(new Error(response.statusText)); + }); + zip.file(model_path, gltfBlob); //, { base64: false }); //, { base64: true } + } + zip.generateAsync({ type: "blob" }).then(function(content) { + FileSaver.saveAs(content, "YourBlueprintProject.zip"); + }); + + // let a = window.document.createElement('a'); + // let blob = new Blob([zip.toBuffer()], { type: 'octet/stream' }); + // a.href = window.URL.createObjectURL(blob); + // a.download = 'YourBlueprintProject.zip'; + // document.body.appendChild(a); + // a.click(); + // document.body.removeChild(a); +} + +// document.addEventListener('DOMContentLoaded', function() { +console.log('ON DOCUMENT READY '); + + +Configuration.setValue(viewBounds, 10000);//In CMS + +blueprint3d = new BlueprintJS(opts); +Configuration.setValue(configDimUnit, dimMeter); + +configurationHelper = blueprint3d.configurationHelper; +floorplanningHelper = blueprint3d.floorplanningHelper; +roomplanningHelper = blueprint3d.roomplanningHelper; + +blueprint3d.model.addEventListener(EVENT_LOADED, function() { console.log('LOAD SERIALIZED JSON ::: '); }); +blueprint3d.floorplanner.addFloorplanListener(EVENT_NOTHING_2D_SELECTED, function() { + settingsSelectedCorner.hide(); + settingsSelectedWall.hide(); + settingsSelectedRoom.hide(); + settingsViewer2d.hideControl('Delete'); +}); +blueprint3d.floorplanner.addFloorplanListener(EVENT_CORNER_2D_CLICKED, function(evt) { + settingsSelectedCorner.show(); + settingsSelectedWall.hide(); + settingsSelectedRoom.hide(); + settingsViewer2d.showControl('Delete'); + settingsSelectedCorner.setValue('cornerElevation', Dimensioning.cmToMeasureRaw(evt.item.elevation)); +}); +blueprint3d.floorplanner.addFloorplanListener(EVENT_WALL_2D_CLICKED, function(evt) { + settingsSelectedCorner.hide(); + settingsSelectedWall.show(); + settingsSelectedRoom.hide(); + settingsViewer2d.showControl('Delete'); + settingsSelectedWall.setValue('wallThickness', Dimensioning.cmToMeasureRaw(evt.item.thickness)); +}); +blueprint3d.floorplanner.addFloorplanListener(EVENT_ROOM_2D_CLICKED, function(evt) { + settingsSelectedCorner.hide(); + settingsSelectedWall.hide(); + settingsSelectedRoom.show(); + settingsSelectedRoom.setValue('roomName', evt.item.name); +}); + +blueprint3d.roomplanner.addRoomplanListener(EVENT_ITEM_SELECTED, function(evt) { + settingsSelectedWall3D.hide(); + settingsSelectedRoom3D.hide(); + let itemModel = evt.itemModel; + if (parametricContextInterface) { + parametricContextInterface.destroy(); + parametricContextInterface = null; + } + if (itemModel.isParametric) { + parametricContextInterface = new ParametricsInterface(itemModel.parametricClass, blueprint3d.roomplanner); + } +}); + +blueprint3d.roomplanner.addRoomplanListener(EVENT_NO_ITEM_SELECTED, function() { + settingsSelectedWall3D.hide(); + settingsSelectedRoom3D.hide(); + if (parametricContextInterface) { + parametricContextInterface.destroy(); + parametricContextInterface = null; + } +}); +blueprint3d.roomplanner.addRoomplanListener(EVENT_WALL_CLICKED, function(evt) { + settingsSelectedWall3D.show(); + settingsSelectedRoom3D.hide(); + if (parametricContextInterface) { + parametricContextInterface.destroy(); + parametricContextInterface = null; + } +}); +blueprint3d.roomplanner.addRoomplanListener(EVENT_ROOM_CLICKED, function(evt) { + settingsSelectedWall3D.hide(); + settingsSelectedRoom3D.show(); + if (parametricContextInterface) { + parametricContextInterface.destroy(); + parametricContextInterface = null; + } +}); +blueprint3d.roomplanner.addRoomplanListener(EVENT_GLTF_READY, function(evt) { + let data = evt.gltf; + let a = window.document.createElement('a'); + let blob = new Blob([data], { type: 'text' }); + a.href = window.URL.createObjectURL(blob); + a.download = 'design.gltf'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); +}); + +// console.log(default_room); +blueprint3d.model.loadSerialized(default_room); + + +if (!opts.widget) { + uxInterface = QuickSettings.create(0, 0, 'BlueprintJS', app_parent); + + settingsViewer2d = QuickSettings.create(0, 0, 'Viewer 2D', app_parent); + settingsSelectedCorner = QuickSettings.create(0, 0, 'Corner', app_parent); + settingsSelectedWall = QuickSettings.create(0, 0, 'Wall', app_parent); + settingsSelectedRoom = QuickSettings.create(0, 0, 'Room', app_parent); + + settingsViewer3d = QuickSettings.create(0, 0, 'Viewer 3D', app_parent); + settingsSelectedWall3D = QuickSettings.create(0, 0, 'Wall', app_parent); + settingsSelectedRoom3D = QuickSettings.create(0, 0, 'Room', app_parent); + + + uxInterface.addButton('Switch Viewer', switchViewer); + uxInterface.addHTML('Current View', 'Floorplanning'); + + uxInterface.addFileChooser("Load Design", "Load Design", ".blueprint3d", loadBlueprint3DDesign); + uxInterface.addButton('Save Design', saveBlueprint3DDesign); + uxInterface.addButton('Export as GLTF', saveBlueprint3D); + uxInterface.addButton('Export Project (blueprint-py)', exportDesignAsPackage); + uxInterface.addButton('Reset', blueprint3d.model.reset.bind(blueprint3d.model)); + + uxInterface.addFileChooser("Load Locked Design", "Load Locked Design", ".blueprint3d", loadLockedBlueprint3DDesign); + + settingsViewer2d.addButton('Draw Mode', switchViewer2DToDraw); + settingsViewer2d.addButton('Move Mode', switchViewer2DToMove); + settingsViewer2d.addButton('Transform Mode', switchViewer2DToTransform); + settingsViewer2d.addButton('Delete', floorplanningHelper.deleteCurrentItem.bind(floorplanningHelper)); + + settingsViewer2d.bindBoolean('snapToGrid', configurationHelper.snapToGrid, configurationHelper); + settingsViewer2d.bindBoolean('directionalDrag', configurationHelper.directionalDrag, configurationHelper); + settingsViewer2d.bindBoolean('dragOnlyX', configurationHelper.dragOnlyX, configurationHelper); + settingsViewer2d.bindBoolean('dragOnlyY', configurationHelper.dragOnlyY, configurationHelper); + settingsViewer2d.bindRange('snapTolerance', 1, 200, configurationHelper.snapTolerance, 1, configurationHelper); + settingsViewer2d.bindRange('gridSpacing', 10, 200, configurationHelper.gridSpacing, 1, configurationHelper); + settingsViewer2d.bindNumber('boundsX', 1, 200, configurationHelper.boundsX, 1, configurationHelper); + settingsViewer2d.bindNumber('boundsY', 1, 200, configurationHelper.boundsY, 1, configurationHelper); + + settingsSelectedCorner.bindRange('cornerElevation', 1, 500, floorplanningHelper.cornerElevation, 1, floorplanningHelper); + settingsSelectedWall.bindRange('wallThickness', 0.01, 1, floorplanningHelper.wallThickness, 0.01, floorplanningHelper); + settingsSelectedRoom.bindText('roomName', floorplanningHelper.roomName, floorplanningHelper); + + // settingsViewer3d.addDropDown('Floor Textures', floor_texture_keys, selectFloorTexture); + // settingsViewer3d.addImage('Floor Texture:', floor_textures[floor_texture_keys[0]].colormap, null); + // settingsViewer3d.addButton('Apply', selectFloorTexture); + + // settingsViewer3d.addDropDown('Wall Textures', wall_texture_keys, selectWallTexture); + // settingsViewer3d.addImage('Wall Texture:', wall_textures[wall_texture_keys[0]].colormap, null); + // settingsViewer3d.addButton('Apply', selectWallTexture); + + settingsSelectedRoom3D.addDropDown('Floor Textures', floor_texture_keys, selectFloorTexture); + settingsSelectedRoom3D.addImage('Floor Texture:', floor_textures[floor_texture_keys[0]].colormap || TEXTURE_NO_PREVIEW, null); + settingsSelectedRoom3D.addColor('Floor Texture Color:', floor_textures[floor_texture_keys[0]].color || '#FFFFFF', selectFloorTextureColor); + settingsSelectedRoom3D.addButton('Apply', selectFloorTexture); + + settingsSelectedRoom3D.addDropDown('All Wall Textures', wall_texture_keys, selectWallTexture); + settingsSelectedRoom3D.addImage('All Wall Texture:', wall_textures[wall_texture_keys[0]].colormap || TEXTURE_NO_PREVIEW, selectWallTexture); + settingsSelectedRoom3D.addColor('All Wall Texture Color:', wall_textures[wall_texture_keys[0]].color || '#FFFFFF', selectWallTextureColor); + settingsSelectedRoom3D.addButton('Apply', selectWallTexture); + + settingsSelectedWall3D.addDropDown('Wall Textures', wall_texture_keys, selectWallTexture); + settingsSelectedWall3D.addImage('Wall Texture:', wall_textures[wall_texture_keys[0]].colormap || TEXTURE_NO_PREVIEW, null); + settingsSelectedWall3D.addColor('Wall Texture Color:', wall_textures[wall_texture_keys[0]].color || '#FFFFFF', selectWallTextureColor); + settingsSelectedWall3D.addButton('Apply', selectWallTexture); + + settingsSelectedWall3D.addDropDown('Select Door', doorTypes, selectDoorForWall); + settingsSelectedWall3D.addImage('Door Preview:', doorsData[doorTypes[0]].src, null); + settingsSelectedWall3D.addButton('Add', addDoorForWall); + + settingsViewer3d.addHTML('Tips:', '

Click and drag to rotate the room in 360\xB0

Add room items

  • Add parametric doors
  • Other items (Coming soon)

Drag and Place items(pink boxes and parametric doors) in the room

There are 8 different types of items

  • 1: FloorItem
  • 2: WallItem
  • 3: InWallItem
  • 7: InWallFloorItem
  • 8: OnFloorItem
  • 9: WallFloorItem
  • 0: Item
  • 4: RoofItem

'); + + + uxInterface.setWidth(panelWidths); + uxInterface.setHeight(uxInterfaceHeight); + + + settingsViewer2d.hideControl('Delete'); + + settingsViewer2d.setWidth(panelWidths); + settingsViewer3d.setWidth(panelWidths); + + + settingsViewer2d.setHeight(subPanelsHeight); + settingsViewer3d.setHeight(subPanelsHeight); + + + + uxInterface.setPosition(app_parent.clientWidth - panelWidths, startY); + settingsViewer2d.setPosition(app_parent.clientWidth - panelWidths, startY + uxInterfaceHeight); + settingsViewer3d.setPosition(app_parent.clientWidth - panelWidths, startY + uxInterfaceHeight); + + + settingsSelectedCorner.hide(); + settingsSelectedWall.hide(); + settingsSelectedRoom.hide(); + + settingsViewer3d.hide(); + settingsSelectedWall3D.hide(); + settingsSelectedRoom3D.hide(); +} \ No newline at end of file diff --git a/src/blueprint/scripts/tempSrc/parametrics_items.json b/src/blueprint/scripts/tempSrc/parametrics_items.json new file mode 100644 index 0000000..d7f520b --- /dev/null +++ b/src/blueprint/scripts/tempSrc/parametrics_items.json @@ -0,0 +1,366 @@ +{ + "floorplan": { + "version": "2.0.1a", + "corners": { + "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2": { + "x": 0, + "y": 0, + "elevation": 2.5 + }, + "f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "x": 0, + "y": 5, + "elevation": 2.5 + }, + "da026c08-d76a-a944-8e7b-096b752da9ed": { + "x": 5, + "y": 5, + "elevation": 2.5 + }, + "4e3d65cb-54c0-0681-28bf-bddcc7bdb571": { + "x": 5, + "y": 0, + "elevation": 2.5 + } + }, + "walls": [{ + "corner1": "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "corner2": "f90da5e3-9e0e-eba7-173d-eb0b071e838e", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": -176.77669529663686, + "y": 176.7766952966369 + }, + "b": { + "x": -176.7766952966369, + "y": 323.22330470336317 + }, + "thickness": 0.2 + }, + { + "corner1": "f90da5e3-9e0e-eba7-173d-eb0b071e838e", + "corner2": "da026c08-d76a-a944-8e7b-096b752da9ed", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": 176.7766952966369, + "y": 676.7766952966368 + }, + "b": { + "x": 323.22330470336317, + "y": 676.776695296637 + }, + "thickness": 0.2 + }, + { + "corner1": "da026c08-d76a-a944-8e7b-096b752da9ed", + "corner2": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": 676.7766952966368, + "y": 323.2233047033631 + }, + "b": { + "x": 676.776695296637, + "y": 176.77669529663686 + }, + "thickness": 0.2 + }, + { + "corner1": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571", + "corner2": "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "frontTexture": { + "color": "#FFFFFF", + "repeat": 300, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "backTexture": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg", + "color": "#FFFFFF" + }, + "wallType": "STRAIGHT", + "a": { + "x": 323.2233047033631, + "y": -176.77669529663686 + }, + "b": { + "x": 176.77669529663686, + "y": -176.7766952966369 + }, + "thickness": 0.2 + } + ], + "rooms": { + "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2,4e3d65cb-54c0-0681-28bf-bddcc7bdb571,da026c08-d76a-a944-8e7b-096b752da9ed,f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "name": "Ashok's Room" + } + }, + "wallTextures": [], + "floorTextures": {}, + "newFloorTextures": { + "4e3d65cb-54c0-0681-28bf-bddcc7bdb571,71d4f128-ae80-3d58-9bd2-711c6ce6cdf2,da026c08-d76a-a944-8e7b-096b752da9ed,f90da5e3-9e0e-eba7-173d-eb0b071e838e": { + "repeat": 100, + "roughnessmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_roughness.jpg", + "ambientmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_ambientOcclusion.jpg", + "normalmap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_normal.jpg", + "colormap": "textures/Floor/Terrazzo_Tiles_001/Terrazzo_Tiles_001_basecolor.jpg", + "color": "#FFFFFF" + } + }, + "carbonSheet": {}, + "units": "m" + }, + "items": [{ + "id": "7d0b3e90-c315-e7a5-a6d9-594757d5b7e4", + "itemName": "An Item", + "itemType": 3, + "position": [ + 10, + 138.38790186348007, + 185.34460161835352 + ], + "rotation": [ + 0, + 1.5707963267948966, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "size": [ + 240, + 100, + 50 + ], + "fixed": true, + "resizable": true, + "modelURL": "models/HollowCube.glb", + "isParametric": false, + "wall": "71d4f128-ae80-3d58-9bd2-711c6ce6cdf2,f90da5e3-9e0e-eba7-173d-eb0b071e838e", + "wallSide": "back", + "wallSurfacePoint": [ + 10, + 138.38790186348007, + 185.34460161835352 + ], + }, + { + "itemName": "Tennis Table", + "itemType": 1, + "position": [ + 209.43984621295914, + 49.05, + 270.9912269855666 + ], + "rotation": [ + 0, + 0, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "size": [ + 281.598, + 98.1, + 172.4 + ], + "fixed": false, + "resizable": false, + "modelURL": "models/TableTennisTable.glb", + "isParametric": false + }, + { + "itemName": "DoubleChairWithPillow", + "itemType": 9, + "position": [ + 209.43984621295914, + 49.05, + 270.9912269855666 + ], + "rotation": [ + 0, + 0, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "size": [ + 108.85, + 72.7337, + 69.2864 + ], + "fixed": false, + "resizable": false, + "modelURL": "models/DoubleChairWithPillow.glb", + "isParametric": false + }, + { + "itemName": "Parametric Door 01", + "isParametric": true, + "baseParametricType": "DOOR", + "subParametricData": { + "type": 6, + "frameColor": 15198183, + "doorColor": 15198183, + "doorHandleColor": 15790320, + "glassColor": 8900331, + "frameWidth": 100, + "frameHeight": 200, + "frameSize": 5, + "frameThickness": 20, + "doorRatio": 0.5, + "openDirection": "RIGHT", + "handleType": "HANDLE_01" + }, + "itemType": 7, + "position": [ + 252.10994952514463, + 105, + 10 + ], + "rotation": [ + 0, + 0, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "size": [ + 100, + 200, + 20 + ], + "fixed": false, + "resizable": false, + "wall": "4e3d65cb-54c0-0681-28bf-bddcc7bdb571,71d4f128-ae80-3d58-9bd2-711c6ce6cdf2", + "wallSide": "back", + "wallSurfacePoint": [ + 252.10994952514463, + 105, + 10 + ], + }, + { + "itemName": "Parametric Door 02", + "isParametric": true, + "baseParametricType": "DOOR", + "subParametricData": { + "type": 5, + "frameColor": 15198183, + "doorColor": 15198183, + "doorHandleColor": 15790320, + "glassColor": 8900331, + "frameWidth": 122, + "frameHeight": 208, + "frameSize": 10.9, + "frameThickness": 20, + "doorRatio": 0.5, + "openDirection": "RIGHT", + "handleType": "HANDLE_01" + }, + "itemType": 7, + "position": [ + 245.9620664305963, + 109, + 490 + ], + "rotation": [ + 0, + 3.141592653589793, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "size": [ + 100, + 200, + 20 + ], + "fixed": false, + "resizable": false, + "wall": "f90da5e3-9e0e-eba7-173d-eb0b071e838e,da026c08-d76a-a944-8e7b-096b752da9ed", + "wallSide": "back", + "wallSurfacePoint": [ + 245.9620664305963, + 109, + 490 + ] + } + ] +} \ No newline at end of file diff --git a/src/blueprint/scripts/tempSrc/wall_textures.json b/src/blueprint/scripts/tempSrc/wall_textures.json new file mode 100644 index 0000000..3b2efe6 --- /dev/null +++ b/src/blueprint/scripts/tempSrc/wall_textures.json @@ -0,0 +1,81 @@ +{ + "Plain_White_Wall_001": { + "repeat": 200, + "color": "#FFFFFF", + "normalmap": "textures/Wall/Stone-Wall-015/Wall_Stone_015_normal.jpg", + "ambientmap": "textures/Wall/Stone-Wall-015/Wall_Stone_015_ambientOcclusion.jpg", + "roughnessmap": "textures/Wall/Stone-Wall-015/Wall_Stone_015_roughness.jpg" + }, + "Concrete_Wall_005_SD": { + "repeat": 200, + "colormap": "textures/Wall/Concrete_Wall_005_SD/Concrete_Wall_005_BaseColor.jpg", + "normalmap": "textures/Wall/Concrete_Wall_005_SD/Concrete_Wall_005_Normal.jpg", + "bumpmap": "textures/Wall/Concrete_Wall_005_SD/Concrete_Wall_005_Height.png", + "ambientmap": "textures/Wall/Concrete_Wall_005_SD/Concrete_Wall_005_AmbientOcclusion.jpg", + "roughnessmap": "textures/Wall/Concrete_Wall_005_SD/Concrete_Wall_005_Roughness.jpg" + }, + "Terracotta_Bricks_002": { + "repeat": 200, + "normalmap": "textures/Wall/Terracotta_Bricks_002/Bricks_Terracotta_002_normal.jpg", + "ambientmap": "textures/Wall/Terracotta_Bricks_002/Bricks_Terracotta_002_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Terracotta_Bricks_002/Bricks_Terracotta_002_height.png", + "roughnessmap": "textures/Wall/Terracotta_Bricks_002/Bricks_Terracotta_002_roughness.jpg", + "colormap": "textures/Wall/Terracotta_Bricks_002/Bricks_Terracotta_002_basecolor.jpg" + }, + "Concrete-Wall-002": { + "repeat": 200, + "colormap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_basecolor.jpg", + "bumpmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_height.png", + "normalmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_normal.jpg", + "roughnessmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_roughness.jpg", + "ambientmap": "textures/Wall/Concrete-Wall-002/Concrete_Wall_002_ambientocclusion.jpg" + }, + "Concrete_016_SD": { + "repeat": 200, + "bumpmap": "textures/Wall/Concrete_016_SD/Concrete_016_height.png", + "ambientmap": "textures/Wall/Concrete_016_SD/Concrete_016_ambientOcclusion.jpg", + "normalmap": "textures/Wall/Concrete_016_SD/Concrete_016_normal.jpg", + "roughnessmap": "textures/Wall/Concrete_016_SD/Concrete_016_roughness.jpg", + "colormap": "textures/Wall/Concrete_016_SD/Concrete_016_baseColor.jpg" + }, + "Concrete_Column_001_SD": { + "repeat": 200, + "ambientmap": "textures/Wall/Concrete_Column_001_SD/Concrete_Column_001_ambientOcclusion.jpg", + "normalmap": "textures/Wall/Concrete_Column_001_SD/Concrete_Column_001_normal.jpg", + "bumpmap": "textures/Wall/Concrete_Column_001_SD/Concrete_Column_001_height.png", + "roughnessmap": "textures/Wall/Concrete_Column_001_SD/Concrete_Column_001_roughness.jpg", + "colormap": "textures/Wall/Concrete_Column_001_SD/Concrete_Column_001_basecolor.jpg" + }, + "Brick_Wall_017_SD": { + "repeat": 200, + "normalmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_normal.jpg", + "roughnessmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_roughness.jpg", + "colormap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_basecolor.jpg", + "ambientmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Brick_Wall_017_SD/Brick_Wall_017_height.png" + }, + "Stone-Wall-015": { + "repeat": 200, + "colormap": "textures/Wall/Stone-Wall-015/Wall_Stone_015_basecolor.jpg", + "normalmap": "textures/Wall/Stone-Wall-015/Wall_Stone_015_normal.jpg", + "ambientmap": "textures/Wall/Stone-Wall-015/Wall_Stone_015_ambientOcclusion.jpg", + "bumpmap": "textures/Wall/Stone-Wall-015/Wall_Stone_015_height.png", + "roughnessmap": "textures/Wall/Stone-Wall-015/Wall_Stone_015_roughness.jpg" + }, + "Stone_Wall_012_SD": { + "repeat": 200, + "ambientmap": "textures/Wall/Stone_Wall_012_SD/Stone_Wall_ambientOcclusion.jpg", + "colormap": "textures/Wall/Stone_Wall_012_SD/Stone_Wall_basecolor.jpg", + "normalmap": "textures/Wall/Stone_Wall_012_SD/Stone_Wall_normal.jpg", + "bumpmap": "textures/Wall/Stone_Wall_012_SD/Stone_Wall_height.png", + "roughnessmap": "textures/Wall/Stone_Wall_012_SD/Stone_Wall_roughness.jpg" + }, + "Stylized-Sci-fi Wall-001": { + "repeat": 125, + "normalmap": "textures/Wall/Stylized-Sci-fi Wall-001/Stylized_Sci-fi_Wall_001_normal.jpg", + "ambientmap": "textures/Wall/Stylized-Sci-fi Wall-001/Stylized_Sci-fi_Wall_001_ambientOcclusion.jpg", + "colormap": "textures/Wall/Stylized-Sci-fi Wall-001/Stylized_Sci-fi_Wall_001_basecolor.jpg", + "roughnessmap": "textures/Wall/Stylized-Sci-fi Wall-001/Stylized_Sci-fi_Wall_001_roughness.jpg", + "bumpmap": "textures/Wall/Stylized-Sci-fi Wall-001/Stylized_Sci-fi_Wall_001_height.png" + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer2d/BaseFloorplanViewElement2D.ts b/src/blueprint/scripts/viewer2d/BaseFloorplanViewElement2D.ts new file mode 100644 index 0000000..e0eeb35 --- /dev/null +++ b/src/blueprint/scripts/viewer2d/BaseFloorplanViewElement2D.ts @@ -0,0 +1,203 @@ +import { Graphics } from 'pixi.js'; +import { Dimensioning } from '../core/dimensioning'; +import { Floorplan } from '../model/floorplan'; +import { EventSystem } from '../core/EventSystem'; +import { Vector2 } from 'babylonjs'; + +export class BaseFloorplanViewElement2D extends Graphics { + + __floorplan; + __options; + __interactable; + __isDragging; + __isSelected; + __snapToGrid; + __keyboard; + __mouseDownEvent; + __mouseUpEvent; + __mouseMoveEvent; + __mouseOverEvent; + __mouseOutEvent; + __mouseClickEvent; + __keyListenerEvent; + constructor(floorplan: Floorplan, options: any) { + super(); + this.__floorplan = floorplan; + this.__options = {}; + for (let opt in options) { + this.__options[opt] = options[opt]; + } + // this.__eventDispatcher = new EventDispatcher(); + this.__interactable = true; + this.interactive = true; + this.buttonMode = true; + this.__isDragging = false; + this.__isSelected = false; + this.__snapToGrid = false; + // this.__keyboard = new KeyboardListener2D();// 按键管理现在不需要创建 + this.__mouseDownEvent = this.__dragStart.bind(this); + this.__mouseUpEvent = this.__dragEnd.bind(this); + this.__mouseMoveEvent = this.__dragMove.bind(this); + this.__mouseOverEvent = this.__mouseOver.bind(this); + this.__mouseOutEvent = this.__mouseOut.bind(this); + this.__mouseClickEvent = this.__click.bind(this); + + this.__keyListenerEvent = this.__keyListener.bind(this); + + + this.on('mousedown', this.__mouseClickEvent).on('touchstart', this.__mouseClickEvent); + this.on('mouseupoutside', this.__mouseUpEvent).on('touchendoutside', this.__mouseUpEvent); + this.on('mouseup', this.__mouseUpEvent).on('touchend', this.__mouseUpEvent); + this.on('mousemove', this.__mouseMoveEvent).on('touchmove', this.__mouseMoveEvent); + this.on('mouseover', this.__mouseOverEvent).on('mouseout', this.__mouseOutEvent); + // this.on('click', this.__mouseClickEvent); + + // this.__keyboard.addEventListener(EVENT_KEY_RELEASED, this.__keyListenerEvent); + // this.__keyboard.addEventListener(EVENT_KEY_PRESSED, this.__keyListenerEvent); + EventSystem.Instance.addListener("KEY_PRESSED_EVENT", this.__keyListenerEvent); + EventSystem.Instance.addListener("KEY_RELEASED_EVENT", this.__keyListenerEvent); + } + + __deactivate() { + this.off('mousedown', this.__mouseClickEvent).off('touchstart', this.__mouseClickEvent); + this.off('mouseupoutside', this.__mouseUpEvent).off('touchendoutside', this.__mouseUpEvent); + this.off('mouseup', this.__mouseUpEvent).off('touchend', this.__mouseUpEvent); + this.off('mousemove', this.__mouseMoveEvent).off('touchmove', this.__mouseMoveEvent); + this.off('mouseover', this.__mouseOverEvent).off('mouseout', this.__mouseOutEvent); + } + + __keyListener(evt: KeyboardEvent) { + if (this.selected && evt.key === 'Delete') { + this.__removeFromFloorplan(); + } + + if (evt.type === "keydown" && evt.key === 'Shift') { + this.__snapToGrid = true; + } + if (evt.type === "keyup" && evt.key === 'Shift') { + this.__snapToGrid = false; + } + } + + __vectorToPixels(v) { + return new Vector2(Dimensioning.cmToPixel(v.x), Dimensioning.cmToPixel(v.y)); + } + + __drawSelectedState() { + + } + __drawHoveredOnState() { + + } + __drawHoveredOffState() { + + } + + __click(evt) { + this.selected = true; + this.__isDragging = true; + this.__dragStart(evt); + this.__drawSelectedState(); + if (evt !== undefined) { + evt.stopPropagation(); + } + } + + __mouseOver(evt) { + if (!this.selected) { + this.__drawHoveredOnState(); + evt.stopPropagation(); + } + } + + __mouseOut(evt) { + if (!this.selected) { + this.__drawHoveredOffState(); + if (evt !== undefined) { + evt.stopPropagation(); + } + } + } + __dragStart(evt) { + this.__isDragging = true; + if (evt) { + evt.stopPropagation(); + } + } + + __dragEnd(evt) { + this.__isDragging = false; + evt.stopPropagation(); + } + + __dragMove(evt) { + if (this.__isDragging) { + evt.stopPropagation(); + } + } + /** + * The below method is necessary if the remove event was + * triggered from within this view class. For example, this view + * class keeps listening to the delete key pressed. In such a case + * it is the job of this view class to call the "remove()" method of the + * associated method. + */ + __removeFromFloorplan() { + //Stub the sub-classes need to implement this functionality + } + + remove() { + this.off('mousedown', this.__mouseDownEvent).off('touchstart', this.__mouseDownEvent); + this.off('mouseupoutside', this.__mouseUpEvent).off('touchendoutside', this.__mouseUpEvent); + this.off('mouseup', this.__mouseUpEvent).off('touchend', this.__mouseUpEvent); + this.off('mousemove', this.__mouseMoveEvent).off('touchmove', this.__mouseMoveEvent); + this.off('mouseover', this.__mouseOverEvent).off('mouseout', this.__mouseOutEvent); + this.off('click', this.__mouseClickEvent); + // this.__keyboard.removeEventListener(EVENT_KEY_RELEASED, this.__keyListenerEvent); + // this.__keyboard.removeEventListener(EVENT_KEY_PRESSED, this.__keyListenerEvent); + EventSystem.Instance.removeListener("KEY_RELEASED_EVENT", this.__keyListenerEvent); + EventSystem.Instance.removeListener("KEY_PRESSED_EVENT", this.__keyListenerEvent); + // this.__keyboard.remove(); + if (this.parent) { + this.parent.removeChild(this); + } + } + + // addFloorplanListener(type, listener) { + // // this.__eventDispatcher.addEventListener(type, listener); + // EventSystem.Instance.addListener(type, listener); + // } + + // removeFloorplanListener(type, listener) { + // // this.__eventDispatcher.removeEventListener(type, listener); + // EventSystem.Instance.removeListener(type, listener); + // } + + get selected() { + return this.__isSelected; + } + + set selected(flag) { + this.__isSelected = flag; + if (!this.__isSelected) { + this.__drawHoveredOffState(); + } + if (flag) { + // this.__eventDispatcher.dispatchEvent({ type: EVENT_2D_SELECTED, item: this }); + EventSystem.Instance.sendMessage("SELECTED_2D_EVENT", this); + } else { + // this.__eventDispatcher.dispatchEvent({ type: EVENT_2D_UNSELECTED, item: this }); + EventSystem.Instance.sendMessage("UNSELECTED_2D_EVENT", this); + } + } + + get interactable() { + return this.__interactable; + } + + set interactable(flag) { + this.__interactable = flag; + this.interactive = flag; + this.buttonMode = flag; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer2d/BoundaryView2D.js b/src/blueprint/scripts/viewer2d/BoundaryView2D.js new file mode 100644 index 0000000..5b3d53b --- /dev/null +++ b/src/blueprint/scripts/viewer2d/BoundaryView2D.js @@ -0,0 +1,95 @@ +import { Color } from "three"; + +import {Matrix, Texture} from 'pixi.js'; +import { BaseFloorplanViewElement2D } from "./BaseFloorplanViewElement2D"; +import { isMobile } from "detect-touch-device"; + +export class BoundaryView2D extends BaseFloorplanViewElement2D { + + constructor(floorplan, options, boundary) { + super(floorplan, options); + + this.__options['boundary-point-radius'] = 12.5; + this.__options['boundary-line-thickness'] = 12.5; + this.__options['boundary-point-color'] = '#000000'; + this.__options['boundary-line-color'] = '#CC33CC'; + + for (let opt in options) { + if (this.__options.hasOwnProperty(opt) && options.hasOwnProperty(opt)) { + this.__options[opt] = options[opt]; + } + } + + this.__options['boundary-point-color'] = new Color(this.__options['boundary-point-color']).getHex(); + this.__options['boundary-line-color'] = new Color(this.__options['boundary-line-color']).getHex(); + + this.__boundary = boundary; + this.pivot.x = this.pivot.y = 0.5; + + this.interactive = false; + this.buttonMode = false; + + this.__drawHoveredOffState(); + } + + __drawBoundaryRegion(pointsColor, lineColor){ + this.clear(); + + if(!this.__boundary.points.length){ + return; + } + + let alpha = 1.0;//0.1;// + let fillAlpha = 1.0; + let radius = this.__options['boundary-point-radius']; + let thickness = this.__options['boundary-line-thickness']; + + if (isMobile) { + } + // console.log('BEFORE ::: ', this.fill, this.__boundary.styleType); + this.fill.visible = true; + this.fill.alpha = fillAlpha; + + if(this.__boundary.style.colormap){ + let matrix = new Matrix(); + let scale = Math.min(this.__boundary.width, this.__boundary.height) / this.__boundary.styleRepeat; + matrix = matrix.scale(scale, scale); + + let texture = Texture.from(this.__boundary.style.colormap); + this.fill.texture = texture; + this.fill.matrix = matrix; + } + this.fill.color = new Color(this.__boundary.style.color).getHex(); + + this.lineStyle(thickness, lineColor); + + for (let i =0;i <= this.__boundary.points.length;i++){ + let index = i % this.__boundary.points.length; + let cmPoint = this.__boundary.points[index]; + let pixelPoint = this.__vectorToPixels(cmPoint); + if(i === 0){ + this.moveTo(pixelPoint.x, pixelPoint.y); + } + else{ + this.lineTo(pixelPoint.x, pixelPoint.y); + } + } + // this.endFill(); + + this.beginFill(pointsColor, alpha); + for (let i =0;i < this.__boundary.points.length;i++){ + + let cmPoint = this.__boundary.points[i]; + let pixelPoint = this.__vectorToPixels(cmPoint); + this.drawCircle(pixelPoint.x, pixelPoint.y, radius); + } + this.endFill(); + + } + __drawHoveredOffState() { + super.__drawHoveredOffState(); + + this.__drawBoundaryRegion(this.__options['boundary-point-color'], this.__options['boundary-line-color']); + } + +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer2d/CornerGroupTransform2D.js b/src/blueprint/scripts/viewer2d/CornerGroupTransform2D.js new file mode 100644 index 0000000..b4606a4 --- /dev/null +++ b/src/blueprint/scripts/viewer2d/CornerGroupTransform2D.js @@ -0,0 +1,768 @@ +import { Graphics, utils as pixiutils, Text, Ticker, Texture, Sprite } from "pixi.js"; +import Corner from "../model/corner"; +import Wall from "../model/wall"; +import Room from "../model/room"; +import { Dimensioning } from "../core/dimensioning"; +import { Matrix4, Vector3, Vector2, EventDispatcher, Quaternion } from "three"; +import { Utils } from "../core/utils"; +import { Configuration, snapToGrid, snapTolerance } from "../core/configuration"; + + +class CornerGroupRectangle extends Graphics { + constructor(floorplan, size, center) { + super(); + this.__floorplan = floorplan; + this.__size = size.clone(); + this.__center = center.clone(); + let halfSize = this.__size.clone().multiplyScalar(0.5); + this.__tl = this.__center.clone().sub(halfSize); + this.__br = this.__center.clone().add(halfSize); + this.__tr = new Vector2(this.__br.x, this.__tl.y); + this.__bl = new Vector2(this.__tl.x, this.__br.y); + + this.__vertices = [this.__tl, this.__tr, this.__br, this.__bl]; + + this.__originalSize = this.__size.clone(); + this.__originalCenter = this.__center.clone(); + this.__currentRadians = 0; + + this.__currentScaleMatrix = new Matrix4(); //Keeps track of the absolute scaling + this.__currentRotationMatrix = new Matrix4(); //Keeps track of the absolute rotation + this.__currentTranslationMatrix = new Matrix4(); //Keeps track of translation + + this.__drawRectangle(); + this.__ticker = Ticker.shared; + // this.__ticker.add(this.__tick, this); + } + + translateByPosition(position) { + let translateMatrix = new Matrix4().makeTranslation(position.x, position.y, 0); + let finalPoints = []; + for (let i = 0; i < this.__vertices.length; i++) { + //Reset current Scaling + let co2 = this.__vertices[i].clone(); + let co = new Vector3(co2.x, co2.y, 0); + // co = co.applyMatrix4(this.__currentRotationMatrix.clone().getInverse(this.__currentRotationMatrix.clone())); + co = co.applyMatrix4(translateMatrix); + + if(this.__floorplan.boundary){ + if(!this.__floorplan.boundary.containsPoint(Dimensioning.pixelToCm(co.x), Dimensioning.pixelToCm(co.y))){ + return; + } + if(this.__floorplan.boundary.intersectsExternalDesign(Dimensioning.pixelToCm(co.x), Dimensioning.pixelToCm(co.y))){ + return; + } + } + finalPoints.push(co); + } + + for (let i =0;i < finalPoints.length;i++){ + let co = finalPoints[i]; + this.__vertices[i].x = co.x; + this.__vertices[i].y = co.y; + } + + + + this.__center.y = this.__tr.y - this.__tl.y; + this.__size.x = this.__tl.clone().sub(this.__tr).length(); + this.__size.y = this.__tl.clone().sub(this.__bl).length(); + this.__center = this.__br.clone().sub(this.__tl).multiplyScalar(0.5).add(this.__tl); + let delta = this.__center.clone().sub(this.__originalCenter); + this.__currentTranslationMatrix = new Matrix4().makeTranslation(delta.x, delta.y, 0); + this.__drawRectangle(); + } + + rotateByRadians(radians) { + let finalPoints = []; + let T = new Matrix4().makeTranslation(-this.__center.x, -this.__center.y, 0); + let TInv = new Matrix4().makeTranslation(this.__center.x, this.__center.y, 0); + + let rotationMatrix = new Matrix4().makeRotationAxis(new Vector3(0, 0, 1), radians); + let rotationAboutOrigin = TInv.clone().multiply(rotationMatrix).multiply(T); + + let resetRotation = new Matrix4().makeRotationAxis(new Vector3(0, 0, 1), -this.__currentRadians); + let resetRotationAboutOrigin = TInv.clone().multiply(resetRotation).multiply(T); + + for (let i = 0; i < this.__vertices.length; i++) { + //Reset current Scaling + let co2 = this.__vertices[i].clone(); + let co = new Vector3(co2.x, co2.y, 0); + // co = co.applyMatrix4(this.__currentRotationMatrix.clone().getInverse(this.__currentRotationMatrix.clone())); + co = co.applyMatrix4(resetRotationAboutOrigin); + co = co.applyMatrix4(rotationAboutOrigin); + + + if(this.__floorplan.boundary){ + if(!this.__floorplan.boundary.containsPoint(Dimensioning.pixelToCm(co.x), Dimensioning.pixelToCm(co.y))){ + return; + } + if(this.__floorplan.boundary.intersectsExternalDesign(Dimensioning.pixelToCm(co.x), Dimensioning.pixelToCm(co.y))){ + return; + } + } + finalPoints.push(co); + } + + + for (let i =0;i < finalPoints.length;i++){ + let co = finalPoints[i]; + this.__vertices[i].x = co.x; + this.__vertices[i].y = co.y; + } + + + this.__currentRotationMatrix = rotationAboutOrigin.clone(); + this.__currentRadians = radians; + // this.__center.x = this.__tr.x - this.__tl.x; + this.__center.y = this.__tr.y - this.__tl.y; + this.__size.x = this.__tl.clone().sub(this.__tr).length(); + this.__size.y = this.__tl.clone().sub(this.__bl).length(); + this.__center = this.__br.clone().sub(this.__tl).multiplyScalar(0.5).add(this.__tl); + this.__drawRectangle(); + } + + scaleBySize(newWidth, newHeight, origin) { + + let finalPoints = []; + + let scale = new Vector2(newWidth / this.__size.x, newHeight / this.__size.y); + //Origin - The origin about which transformations happen + let T = new Matrix4().makeTranslation(-origin.x, -origin.y, 0); //Translate to -origin of scaling + let TInv = new Matrix4().makeTranslation(origin.x, origin.y, 0); //Translate to origin of scaling (inverse) + + + let rotation = new Matrix4().makeRotationAxis(new Vector3(0, 0, 1), this.__currentRadians); //Calculate the current rotation matrix + let scaleMatrix = new Matrix4().makeScale(scale.x, scale.y, 1); //Calculate the relative scaling to apply + + let scaleAboutOrigin = TInv.clone().multiply(scaleMatrix).multiply(T); //Now scale about the origin. This matrix has no rotation so scaling along x,y + let rotateAboutOrigin = TInv.clone().multiply(rotation).multiply(T); //Now rotate about the origin. + let resetRotationAboutOrigin = rotateAboutOrigin.clone().getInverse(rotateAboutOrigin.clone()); //Ensure to reset the rotation of currentRadians + + /** + * The final transformation matrix is composition of matrices from right to left + * 1- So the first thing is reset the current rotation, + * 2- Then apply scaling along normal x,y axis, + * 3 -Finally apply the current rotation + */ + let transformMatrix = rotateAboutOrigin.clone().multiply(scaleAboutOrigin).multiply(resetRotationAboutOrigin); + + for (let i = 0; i < this.__vertices.length; i++) { + let co2 = this.__vertices[i].clone(); + let co = new Vector3(co2.x, co2.y, 0); + co = co.applyMatrix4(transformMatrix); + + if(this.__floorplan.boundary){ + if(!this.__floorplan.boundary.containsPoint(Dimensioning.pixelToCm(co.x), Dimensioning.pixelToCm(co.y))){ + return; + } + if(this.__floorplan.boundary.intersectsExternalDesign(Dimensioning.pixelToCm(co.x), Dimensioning.pixelToCm(co.y))){ + return; + } + } + finalPoints.push(co); + // this.__vertices[i].x = co.x; + // this.__vertices[i].y = co.y; + } + + + for (let i =0;i < finalPoints.length;i++){ + let co = finalPoints[i]; + this.__vertices[i].x = co.x; + this.__vertices[i].y = co.y; + } + + this.__size.x = newWidth; //this.__tl.clone().sub(this.__tr).length(); + this.__size.y = newHeight; //this.__tl.clone().sub(this.__bl).length(); + this.__center = this.__br.clone().sub(this.__tl).multiplyScalar(0.5).add(this.__tl); + + let delta = this.__center.clone().sub(this.__originalCenter); + this.__currentRotationMatrix = rotation.clone(); + this.__currentScaleMatrix = this.__currentScaleMatrix.multiply(scaleMatrix); + this.__currentTranslationMatrix = new Matrix4().makeTranslation(delta.x, delta.y, 0); + + this.__drawRectangle(); + } + + __tick() { + console.log('TICK TICK TICK'); + } + + __drawRectangle() { + this.clear(); + this.beginFill(0xCCCCCC, 0.5); + this.moveTo(this.__tl.x, this.__tl.y); + this.lineTo(this.__tr.x, this.__tr.y); + this.lineTo(this.__br.x, this.__br.y); + this.lineTo(this.__bl.x, this.__bl.y); + this.endFill(); + + // this.beginFill(0xFF0000, 1.0); + // this.drawCircle(this.__center.x, this.__center.y, 10); + // this.endFill(); + } + + destroy() { + this.__ticker.remove(this.__tick, this); + this.__ticker.destroy(); + } + + get tl() { + return this.__tl; + } + + get tr() { + return this.__tr; + } + + get br() { + return this.__br; + } + + get bl() { + return this.__bl; + } + + get size() { + return this.__size; + } + + get center() { + return this.__center; + } + + get rotationMatrix() { + return this.__currentRotationMatrix.clone(); + } + + get scalingMatrix() { + return this.__currentScaleMatrix; + } + + get translationMatrix() { + return this.__currentTranslationMatrix; + } + + get rotationRadians() { + return this.__currentRadians; + } + + get origin() { + return this.__center; + } + + get matrix4() { + let scale = new Vector3().setFromMatrixScale(this.__currentScaleMatrix); + let rotation = new Quaternion().setFromRotationMatrix(this.__currentRotationMatrix); + let translation = new Vector3().setFromMatrixPosition(this.__currentTranslationMatrix); + let sMatrix = new Matrix4().makeScale(scale.x, scale.y, 1); + let rMatrix = new Matrix4().makeRotationFromQuaternion(rotation); + let tMatrix = new Matrix4().makeTranslation(translation.x, translation.y, translation.z); + return rMatrix.multiply(sMatrix).multiply(tMatrix); + } +} + + +class CornerGroupTransformationPoint extends Sprite { + constructor(svg = 'icons/rotateGroup.svg') { + super(new Texture.from(svg)); + this.__eventDispatcher = new EventDispatcher(); + + this.__mouseUpEvent = this.__dragEnd.bind(this); + this.__mouseMoveEvent = this.__dragMove.bind(this); + this.__mouseOverEvent = this.__mouseOver.bind(this); + this.__mouseOutEvent = this.__mouseOut.bind(this); + this.__mouseDownEvent = this.__mouseDown.bind(this); + + + this.on('mousedown', this.__mouseDownEvent).on('touchstart', this.__mouseDownEvent); + this.on('mouseupoutside', this.__mouseUpEvent).on('touchendoutside', this.__mouseUpEvent); + this.on('mouseup', this.__mouseUpEvent).on('touchend', this.__mouseUpEvent); + this.on('mousemove', this.__mouseMoveEvent).on('touchmove', this.__mouseMoveEvent); + this.on('mouseover', this.__mouseOverEvent).on('mouseout', this.__mouseOutEvent); + + this.interactive = true; + this.buttonMode = true; + this.scale.set(0.05, 0.05); + this.anchor.set(0.5); + } + + __mouseDown(evt) { + evt.stopPropagation(); + this.__isDragged = true; + let co = evt.data.getLocalPosition(this.parent); + this.__eventDispatcher.dispatchEvent({ type: 'DragStart', position: co, handle: this }); + } + + __mouseOver(evt) { + evt.stopPropagation(); + } + + __mouseOut(evt) { + evt.stopPropagation(); + } + + __dragEnd(evt) { + evt.stopPropagation(); + this.__isDragged = false; + let co = evt.data.getLocalPosition(this.parent); + this.__eventDispatcher.dispatchEvent({ type: 'DragEnd', position: co, handle: this }); + } + + __dragMove(evt) { + if (this.__isDragged) { + evt.stopPropagation(); + let snapping = Configuration.getBooleanValue(snapToGrid); + let co = evt.data.getLocalPosition(this.parent); + + if (snapping) { + co.x = Math.floor(co.x / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + co.y = Math.floor(co.y / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + } + this.__eventDispatcher.dispatchEvent({ type: 'DragMove', position: co, handle: this }); + } + } + + addFloorplanListener(type, listener) { + this.__eventDispatcher.addEventListener(type, listener); + } + + removeFloorplanListener(type, listener) { + this.__eventDispatcher.removeEventListener(type, listener); + } +} +class CornerGroupScalePoint extends Graphics { + constructor(index, parameters) { + super(); + var opts = { radius: 10, outerColor: 0x00FF00, innerColor: '#FFFF00', move: { x: 1, y: 1 }, offset: { x: -0.5, y: -0.5 } }; + if (parameters) { + for (var opt in opts) { + if (opts.hasOwnProperty(opt) && parameters.hasOwnProperty(opt)) { + opts[opt] = parameters[opt]; + } + if (opt === 'outerColor' || opt === 'innerColor') { + opts[opt] = pixiutils.string2hex(opts[opt]); + } + } + } + this.id = Utils.guide(); + this.__index = index; + this.__isDragged = false; + this.__center = new Vector2(); + this.__size = new Vector2(); + this.__parameters = opts; + this.__parameters.move = new Vector2(opts.move.x, opts.move.y); + this.__opposite = null; + this.__matrix4 = new Matrix4(); + this.__eventDispatcher = new EventDispatcher(); + + this.__textfield = new Text(this.__index, { fontFamily: 'Arial', fontSize: 12, fill: 0x000000, align: 'center' }); + this.__textfield.pivot.x = 3; + this.__textfield.pivot.y = 6; + + this.__mouseUpEvent = this.__dragEnd.bind(this); + this.__mouseMoveEvent = this.__dragMove.bind(this); + this.__mouseOverEvent = this.__mouseOver.bind(this); + this.__mouseOutEvent = this.__mouseOut.bind(this); + this.__mouseDownEvent = this.__mouseDown.bind(this); + + + this.on('mousedown', this.__mouseDownEvent).on('touchstart', this.__mouseDownEvent); + this.on('mouseupoutside', this.__mouseUpEvent).on('touchendoutside', this.__mouseUpEvent); + this.on('mouseup', this.__mouseUpEvent).on('touchend', this.__mouseUpEvent); + this.on('mousemove', this.__mouseMoveEvent).on('touchmove', this.__mouseMoveEvent); + this.on('mouseover', this.__mouseOverEvent).on('mouseout', this.__mouseOutEvent); + + this.interactive = true; + this.buttonMode = true; + + this.addChild(this.__textfield); + this.__drawPoint(); + } + + __drawPoint() { + this.clear(); + let hitRadius = this.__parameters.radius * 3; + let borderRadius = this.__parameters.radius * 2; + let radius = this.__parameters.radius; + + this.beginFill(0x00000, 0.1); + this.drawRect(-hitRadius * 0.5, -hitRadius * 0.5, hitRadius, hitRadius); + + this.beginFill(this.__parameters.outerColor, 1.0); + this.drawRect(-borderRadius * 0.5, -borderRadius * 0.5, borderRadius, borderRadius); + + this.beginFill(this.__parameters.innerColor, 1.0); + this.drawRect(-radius * 0.5, -radius * 0.5, radius, radius); + } + + __mouseDown(evt) { + evt.stopPropagation(); + this.__isDragged = true; + let co = evt.data.getLocalPosition(this.parent); + this.__eventDispatcher.dispatchEvent({ type: 'DragStart', position: co, handle: this, opposite: this.opposite }); + } + + __mouseOver(evt) { + evt.stopPropagation(); + } + + __mouseOut(evt) { + evt.stopPropagation(); + } + + __dragEnd(evt) { + evt.stopPropagation(); + this.__isDragged = false; + let co = evt.data.getLocalPosition(this.parent); + this.__eventDispatcher.dispatchEvent({ type: 'DragEnd', position: co, handle: this, opposite: this.opposite }); + } + + __dragMove(evt) { + if (this.__isDragged) { + evt.stopPropagation(); + let snapping = Configuration.getBooleanValue(snapToGrid); + let co = evt.data.getLocalPosition(this.parent); + + if (snapping) { + co.x = Math.floor(co.x / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + co.y = Math.floor(co.y / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + } + this.__eventDispatcher.dispatchEvent({ type: 'DragMove', position: co, handle: this, opposite: this.opposite }); + } + } + + updateCenterAndSize(center, size) { + let xOffset = (size.x * this.__parameters.offset.x); + let yOffset = (size.y * this.__parameters.offset.y); + this.position.x = xOffset + center.x; + this.position.y = yOffset + center.y; + } + + addFloorplanListener(type, listener) { + this.__eventDispatcher.addEventListener(type, listener); + } + + removeFloorplanListener(type, listener) { + this.__eventDispatcher.removeEventListener(type, listener); + } + + get location() { + return new Vector2(this.position.x, this.position.y); + } + + get index() { + return this.__index; + } + + get opposite() { + return this.__opposite; + } + set opposite(oppose) { + this.__opposite = oppose; + } + + get move() { + return this.__parameters.move; + } + + get offset() { + return this.__parameters.offset; + } + + get matrix4() { + return this.__matrix4; + } + + set matrix4(mat) { + this.__matrix4 = mat.clone(); + } +} + +export class CornerGroupTransform2D extends Graphics { + constructor(floorplan, parameters) { + super(); + let opts = { scale: true, rotate: true, translate: true }; + if (parameters) { + for (var opt in opts) { + if (opts.hasOwnProperty(opt) && parameters.hasOwnProperty(opt)) { + opts[opt] = parameters[opt]; + } + } + } + this.__parameters = opts; + this.__floorplan = floorplan; + this.__groups = this.__floorplan.cornerGroups; + this.__currentGroup = null; + this.__cornerPointer = null; + this.__isActive = false; + + + this.__originalPositions = []; + this.__size = null; + this.__center = null; + this.__scalingHandles = []; + this.__rotateHandle = new CornerGroupTransformationPoint(); + this.__translateHandle = new CornerGroupTransformationPoint('icons/translateGroup.svg'); + + this.__resizer = null; + + + this.__scaleHandleDragStartEvent = this.__scaleHandleDragStart.bind(this); + this.__scaleHandleDragEndEvent = this.__scaleHandleDragEnd.bind(this); + this.__scaleHandleDragMoveEvent = this.__scaleHandleDragMove.bind(this); + + this.__rotateHandleDragStartEvent = this.__rotateHandleDragStart.bind(this); + this.__rotateHandleDragEndEvent = this.__rotateHandleDragEnd.bind(this); + this.__rotateHandleDragMoveEvent = this.__rotateHandleDragMove.bind(this); + + + + if (this.__parameters.scale) { + this.__createScalingHandles(); + } + if (this.__parameters.rotate) { + this.__rotateHandle.addFloorplanListener('DragStart', this.__rotateHandleDragStartEvent); + this.__rotateHandle.addFloorplanListener('DragMove', this.__rotateHandleDragMoveEvent); + this.__rotateHandle.addFloorplanListener('DragEnd', this.__rotateHandleDragEndEvent); + this.addChild(this.__rotateHandle); + } + if (this.__parameters.translate) { + this.__translateHandle.addFloorplanListener('DragStart', this.__rotateHandleDragStartEvent); + this.__translateHandle.addFloorplanListener('DragMove', this.__rotateHandleDragMoveEvent); + this.__translateHandle.addFloorplanListener('DragEnd', this.__rotateHandleDragEndEvent); + this.addChild(this.__translateHandle); + } + } + + /** + * array of handles + * 0 starts from tl and goes clockwise to index each handle (total 8 handles) + * top-left handle will be at 0th index, + * mid-top handle will be at 1th index, + * top-right handle will be at 2nd index, + * mid-right handle will be at 3rd index, + * bottom-right handle will be at 4th index, + * mid-bottom handle will be at 5th index, + * bottom-left handle will be at 6th index, + * mid-left will be at 7th index, + * all mid handles are in the odd index + */ + __createScalingHandles() { + let i = 0; + let totalHandles = 8; + let xTransform = 1; + let yTransform = 0; + let xOffsets = [-0.5, 0.0, 0.5, 0.5, 0.5, 0, -0.5, -0.5]; + let yOffsets = [-0.5, -0.5, -0.5, 0.0, 0.5, 0.5, 0.5, -0.0]; + let resizerIndices = [0, -1, 1, -1, 2, -1, 3, -1]; + for (; i < totalHandles; i++) { + let xMove = 1; + let yMove = 1; + if (i % 2 === 1) { + xTransform = Number(!xTransform); + yTransform = Number(!yTransform); + xMove = xTransform; + yMove = yTransform; + } + let handle = new CornerGroupScalePoint(i, { move: { x: xMove, y: yMove }, offset: { x: xOffsets[i], y: yOffsets[i] } }); + handle.addFloorplanListener('DragStart', this.__scaleHandleDragStartEvent); + handle.addFloorplanListener('DragEnd', this.__scaleHandleDragEndEvent); + handle.addFloorplanListener('DragMove', this.__scaleHandleDragMoveEvent); + this.addChild(handle); + this.__scalingHandles.push(handle); + } + + for (i = 0; i < totalHandles; i++) { + let handle = this.__scalingHandles[i]; + let oppositeIndex = (i + 4) % totalHandles; + handle.extraIndex = resizerIndices[i]; + handle.opposite = this.__scalingHandles[oppositeIndex]; + } + } + + + __scaleHandleDragStart(evt) { + + } + + __scaleHandleDragMove(evt) { + this.__isActive = true; + let co = new Vector3(evt.position.x, evt.position.y, 0); + let handle = evt.handle; + let opposite = evt.opposite; + let opposite3 = new Vector3(opposite.location.x, opposite.location.y, 0); + let vect = opposite3.clone().sub(co); + let sizeX = this.__resizer.size.x; + let sizeY = this.__resizer.size.y; + if (handle.move.x && handle.move.y) { + let hVect = null; + let vVect = null; + let co2 = new Vector2(evt.position.x, evt.position.y); + switch (handle.extraIndex) { + case 0: + hVect = co2.clone().sub(this.__resizer.tr.clone()); + vVect = co2.clone().sub(this.__resizer.bl.clone()); + break; + case 1: + hVect = co2.clone().sub(this.__resizer.tl.clone()); + vVect = co2.clone().sub(this.__resizer.br.clone()); + break; + case 2: + hVect = co2.clone().sub(this.__resizer.bl.clone()); + vVect = co2.clone().sub(this.__resizer.tr.clone()); + break; + default: + hVect = co2.clone().sub(this.__resizer.br.clone()); + vVect = co2.clone().sub(this.__resizer.tl.clone()); + break; + } + sizeX = hVect.length(); //vect.length(); // + sizeY = vVect.length(); //vect.length(); // + } else if (handle.move.x) { + sizeX = vect.length(); + } else if (handle.move.y) { + sizeY = vect.length(); + } + this.__resizer.scaleBySize(sizeX, sizeY, opposite.location); + this.__setControlsPosition(); + } + + __scaleHandleDragEnd(evt) { + if (!this.__isActive) { + return; + } + // let matrix = this.__resizer.scalingMatrix.clone().multiply(this.__resizer.rotationMatrix); + this.__setControlsPosition(); + this.__updateMatrixOfGroup(); + this.__isActive = false; + } + + __rotateHandleDragStart(evt) { + + } + + __rotateHandleDragMove(evt) { + this.__isActive = true; + let handle = evt.handle; + if (handle === this.__rotateHandle) { + let co = new Vector2(evt.position.x, evt.position.y); + let vect = co.sub(this.__resizer.center); + let radians = Math.atan2(vect.y, vect.x); + this.__resizer.rotateByRadians(radians); + } else if (handle === this.__translateHandle) { + let co = new Vector2(evt.position.x, evt.position.y); + let delta = co.sub(this.__resizer.center); + this.__resizer.translateByPosition(delta); + } + this.__setControlsPosition(); + } + + __rotateHandleDragEnd(evt) { + if (!this.__isActive) { + return; + } + this.__setControlsPosition(); + this.__updateMatrixOfGroup(); + this.__isActive = false; + } + + __updateMatrixOfGroup() { + let matrix = this.__resizer.matrix4; + let scale = new Vector3().setFromMatrixScale(matrix); + this.__currentGroup.applyTransformations(scale, this.__resizer.rotationRadians, this.__toUnits(this.__resizer.origin.clone())); + // let newMatrix = this.__currentGroup.matrix; + // if(this.__cornerPointer){ + // this.__currentGroup = this.__groups.getContainingGroup(this.__cornerPointer); + // this.__updateTransformControls(); + // } + } + + __toPixels(vector) { + vector.x = Dimensioning.cmToPixel(vector.x); + vector.y = Dimensioning.cmToPixel(vector.y); + return vector; + } + + __toUnits(pixels) { + pixels.x = Dimensioning.pixelToCm(pixels.x); + pixels.y = Dimensioning.pixelToCm(pixels.y); + return pixels; + } + + __setControlsPosition() { + if (this.__parameters.scale) { + let center = this.__resizer.center; + let horizontal = this.__resizer.tr.clone().sub(this.__resizer.tl); + let vertical = this.__resizer.bl.clone().sub(this.__resizer.tl); + for (let i = 0; i < this.__scalingHandles.length; i++) { + let handle = this.__scalingHandles[i]; + let hvect = horizontal.clone().multiplyScalar(handle.offset.x); + let vvect = vertical.clone().multiplyScalar(handle.offset.y); + let vect = hvect.add(vvect); + let position = center.clone().add(vect); + handle.position.set(position.x, position.y); + // handle.updateCenterAndSize(center, size); + this.__originalPositions.push(new Vector2(handle.position.x, handle.position.y)); + } + } + + if (this.__parameters.rotate) { + let midPoint = this.__resizer.br.clone().sub(this.__resizer.tr).multiplyScalar(0.5).add(this.__resizer.tr); + let direction = this.__resizer.bl.clone().sub(this.__resizer.br).normalize().negate(); + let position = midPoint.add(direction.multiplyScalar(50)); + this.__rotateHandle.position.set(position.x, position.y); + } + + if (this.__parameters.translate) { + this.__translateHandle.position.set(this.__resizer.center.x, this.__resizer.center.y); + } + } + + __updateTransformControls() { + this.__currentScale = new Vector2(1, 1); + this.__size = this.__toPixels(this.__currentGroup.size.clone()); + this.__center = this.__toPixels(this.__currentGroup.center.clone()); + this.__matrix = this.__currentGroup.matrix.clone(); + + if (this.__resizer) { + this.__resizer.destroy(); + this.removeChild(this.__resizer); + } + + this.__resizer = new CornerGroupRectangle(this.__floorplan, this.__size, this.__center); + // this.__resizer.position.set(this.__center.x, this.__center.y); + this.addChild(this.__resizer); + this.__setControlsPosition(); + } + + get selected() { + return this.__selected; + } + set selected(instanceOfCornerOrWallOrRoom) { + if (this.__currentGroup) { + this.__currentGroup.update(); + } + this.__selected = instanceOfCornerOrWallOrRoom; + if (this.__selected) { + let corner = null; + if (instanceOfCornerOrWallOrRoom instanceof Corner) { + corner = instanceOfCornerOrWallOrRoom; + } else if (instanceOfCornerOrWallOrRoom instanceof Wall) { + corner = instanceOfCornerOrWallOrRoom.start; + } else if (instanceOfCornerOrWallOrRoom instanceof Room) { + corner = instanceOfCornerOrWallOrRoom.corners[0]; + } else { + throw new Error('selected can assigned with a Corner, Wall, Room or null. Unrecogonized datatype'); + } + this.__currentGroup = this.__groups.getContainingGroup(corner); + this.__cornerPointer = corner; + this.__updateTransformControls(); + } else { + if (this.__resizer) { + this.__resizer.destroy(); + } + this.__cornerPointer = null; + } + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer2d/CornerView2D.ts b/src/blueprint/scripts/viewer2d/CornerView2D.ts new file mode 100644 index 0000000..c1d629c --- /dev/null +++ b/src/blueprint/scripts/viewer2d/CornerView2D.ts @@ -0,0 +1,157 @@ +import { BaseFloorplanViewElement2D } from './BaseFloorplanViewElement2D.js'; +import { Dimensioning } from '../core/dimensioning.js'; + +import { Point } from 'pixi.js'; +import { Configuration, snapTolerance, snapToGrid, dragOnlyX, dragOnlyY } from '../core/configuration.js'; +import { isMobile } from 'detect-touch-device'; +import { Floorplan } from '../model/floorplan.js'; +import { Corner } from '../model/corner.js'; +import { EventSystem } from '../core/EventSystem.js'; + + + +// import {pointPolygon, pointBox} from 'intersects'; + + +export class CornerView2D extends BaseFloorplanViewElement2D { + __corner: Corner; + __cornerUpdateEvent: () => void; + __cornerDeletedEvent: (obj) => void; + constructor(floorplan: Floorplan, options: any, corner: Corner) { + super(floorplan, options); + this.__options['corner-radius'] = 12.5; + for (var opt in options) { + if (this.__options.hasOwnProperty(opt) && options.hasOwnProperty(opt)) { + this.__options[opt] = options[opt]; + } + } + + this.__corner = corner; + this.pivot.x = this.pivot.y = 0.5; + + this.__cornerUpdateEvent = this.__updateWithModel.bind(this); + this.__cornerDeletedEvent = this.__cornerDeleted.bind(this); + + this.interactive = corner.isLocked; + this.buttonMode = corner.isLocked; + + if (corner.isLocked) { + this.__deactivate(); + } + + this.__drawHoveredOffState(); + + // this.__corner.addEventListener(EVENT_MOVED, this.__cornerUpdateEvent); + // this.__corner.addEventListener(EVENT_DELETED, this.__cornerDeletedEvent); + EventSystem.Instance.addListener("MOVED_EVENT", this.__cornerUpdateEvent); + EventSystem.Instance.addListener("DELETED_EVENT", this.__cornerDeletedEvent); + this.__updateWithModel(); + } + + __drawCornerState(radius, borderColor, fillColor) { + this.clear(); + let alpha = 0.5;//1.0;// + let useRadius = (isMobile) ? radius * 2.5 : radius; + let insideRadius = useRadius * 0.55; + let xOut = 0;//useRadius * 0.5;// + let yOut = 0;//useRadius * 0.5;// + // if (isMobile) { + // useRadius = radius * 2.5; + // // this.beginFill(borderColor, alpha); + // // this.drawCircle(0, 0, useRadius); + // // this.endFill(); + // } + this.beginFill(borderColor, alpha); + this.drawCircle(xOut, yOut, useRadius); + this.endFill(); + this.beginFill(fillColor, alpha); + this.drawCircle(xOut, yOut, insideRadius); + this.endFill(); + } + + __drawSelectedState() { + super.__drawSelectedState(); + let radius = this.__options['corner-radius']; + this.__drawCornerState(radius, 0x04A9F5, 0x049995); + } + __drawHoveredOnState() { + super.__drawHoveredOnState(); + let radius = this.__options['corner-radius'] * 1.0; + this.__drawCornerState(radius, 0x000000, 0x04A9F5); + } + __drawHoveredOffState() { + super.__drawHoveredOffState(); + let radius = this.__options['corner-radius']; + this.__drawCornerState(radius, 0xCCCCCC, 0x000000); + } + + __updateWithModel() { + let xx = Dimensioning.cmToPixel(this.__corner.location.x); + let yy = Dimensioning.cmToPixel(this.__corner.location.y); + this.position.x = xx; + this.position.y = yy; + } + + __dragStart(evt) { + super.__dragStart(evt); + } + + __dragMove(evt) { + super.__dragMove(evt); + if (this.__isDragging) { + let co = evt.data.getLocalPosition(this.parent); + let cmCo = new Point(co.x, co.y); + + cmCo.x = Dimensioning.pixelToCm(cmCo.x); + cmCo.y = Dimensioning.pixelToCm(cmCo.y); + + if (Configuration.getBooleanValue(snapToGrid) || this.__snapToGrid) { + cmCo.x = Math.floor(cmCo.x / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + cmCo.y = Math.floor(cmCo.y / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + } + + if (Configuration.getBooleanValue(dragOnlyX) && !Configuration.getBooleanValue(dragOnlyY)) { + cmCo.y = this.__corner.location.y; + } + + if (!Configuration.getBooleanValue(dragOnlyX) && Configuration.getBooleanValue(dragOnlyY)) { + cmCo.x = this.__corner.location.x; + } + if (this.__floorplan.boundary) { + if (!this.__floorplan.boundary.containsPoint(cmCo.x, cmCo.y)) { + return; + } + if (this.__floorplan.boundary.intersectsExternalDesign(cmCo.x, cmCo.y)) { + return; + } + } + this.__corner.move(cmCo.x, cmCo.y); + } + } + + __dragEnd(evt) { + super.__dragEnd(evt); + this.__floorplan.update(); + } + + __cornerDeleted(evt) { + this.remove(); + this.__corner = null; + } + + __removeFromFloorplan() { + this.__corner.remove(); + } + + remove() { + // this.__corner.removeEventListener(EVENT_DELETED, this.__cornerDeletedEvent); + // this.__corner.removeEventListener(EVENT_MOVED, this.__cornerUpdateEvent); + EventSystem.Instance.removeListener("DELETED_EVENT", this.__cornerDeletedEvent); + EventSystem.Instance.removeListener("MOVED_EVENT", this.__cornerDeletedEvent); + super.remove(); + } + + get corner() { + return this.__corner; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer2d/Grid2d.ts b/src/blueprint/scripts/viewer2d/Grid2d.ts new file mode 100644 index 0000000..1f3fc27 --- /dev/null +++ b/src/blueprint/scripts/viewer2d/Grid2d.ts @@ -0,0 +1,77 @@ +import { Configuration, gridSpacing, viewBounds } from '../core/configuration'; +import { Graphics } from 'pixi.js'; +import { Dimensioning } from '../core/dimensioning'; +import { Vector2 } from 'babylonjs'; +import { EventSystem } from '../core/EventSystem'; + +const GRID_SIZE = 10000; + +export class Grid2D extends Graphics { + __canvasHolder; + __options; + __size; + __gridScale; + constructor(canvas, options) { + super(); + // this.drawRect(0, 0, GRID_SIZE, GRID_SIZE); + this.__canvasHolder = canvas; + this.__options = options; + this.__size = new Vector2(GRID_SIZE, GRID_SIZE); + this.__gridScale = 1.0; + this.width = this.__size.x; + this.height = this.__size.y; + this.drawRect(0, 0, GRID_SIZE, GRID_SIZE); + this.pivot.x = this.pivot.y = 0.5; + // Configuration.getInstance().addEventListener(EVENT_CHANGED, (evt) => this.__updateGrid(evt.key)); + EventSystem.Instance.addListener("CHANGED_EVENT", () => { + this.__updateGrid(); + }) + this.__updateGrid(); + } + + __updateGrid() { + let gridSize = Dimensioning.cmToPixel(Configuration.getNumericValue(viewBounds) * 1); + let spacingCMS = Configuration.getNumericValue(gridSpacing); + let spacing = Dimensioning.cmToPixel(spacingCMS); + let totalLines = gridSize / spacing; + let halfSize = gridSize * 0.5; + let linewidth = Math.max(1.0 / this.__gridScale, 1.0); + let highlightLineWidth = Math.max(2.0 / this.__gridScale, 1.0); + let normalColor = 0xE0E0E0; + let highlightColor = 0xD0D0D0; + this.clear(); + for (let i = 0; i < totalLines; i++) { + let co = (i * spacing) - halfSize; + if (i % 5 === 0) { + this.lineStyle(highlightLineWidth, highlightColor).moveTo(-halfSize, co).lineTo(halfSize, co); + this.lineStyle(highlightLineWidth, highlightColor).moveTo(co, -halfSize).lineTo(co, halfSize); + } else { + this.lineStyle(linewidth, normalColor).moveTo(-halfSize, co).lineTo(halfSize, co); + this.lineStyle(linewidth, normalColor).moveTo(co, -halfSize).lineTo(co, halfSize); + } + } + + // this.beginFill(0xFF0000, 1.0); + // this.drawCircle(-halfSize, -halfSize,20); + // this.drawCircle(halfSize, -halfSize,20); + // this.drawCircle(halfSize, halfSize,20); + // this.drawCircle(-halfSize, halfSize,20); + // this.drawCircle(0, 0, 20); + // this.endFill(); + } + + get gridScale() { + return this.__gridScale; + } + + set gridScale(value) { + this.__gridScale = value; + this.__updateGrid(); + } + + __configurationUpdate(evt) { + if (evt.key === gridSpacing) { + this.__updateGrid(); + } + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer2d/KeyboardSystem.ts b/src/blueprint/scripts/viewer2d/KeyboardSystem.ts new file mode 100644 index 0000000..631125e --- /dev/null +++ b/src/blueprint/scripts/viewer2d/KeyboardSystem.ts @@ -0,0 +1,24 @@ + + +import { EventSystem } from '../core/EventSystem'; + +export class KeyboardSystem { + + private instance = new KeyboardSystem(); + + keyDownEvent: (event: KeyboardEvent) => void = (event: KeyboardEvent) => { + EventSystem.Instance.sendMessage("KEY_PRESSED_EVENT", event); + }; + keyUpEvent: (event: KeyboardEvent) => void = (event: KeyboardEvent) => { + EventSystem.Instance.sendMessage("KEY_RELEASED_EVENT", event); + }; + private constructor() { + window.addEventListener('keydown', this.keyDownEvent); + window.addEventListener('keyup', this.keyUpEvent); + } + + dispose() { + window.removeEventListener('keydown', this.keyDownEvent); + window.removeEventListener('keyup', this.keyUpEvent); + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer2d/RoomView2D.ts b/src/blueprint/scripts/viewer2d/RoomView2D.ts new file mode 100644 index 0000000..ebf8a66 --- /dev/null +++ b/src/blueprint/scripts/viewer2d/RoomView2D.ts @@ -0,0 +1,109 @@ +import { BaseFloorplanViewElement2D } from './BaseFloorplanViewElement2D'; +import { Dimensioning } from '../core/dimensioning'; +import { Text } from 'pixi.js'; +import { EventSystem } from '../core/EventSystem'; +import { Vector2 } from 'babylonjs'; + +export class RoomView2D extends BaseFloorplanViewElement2D { + __room; + __updatedRoomEvent; + __roomNameField: Text; + __roomAreaField: Text; + constructor(floorplan, options, room) { + super(floorplan, options); + this.__room = room; + this.__updatedRoomEvent = this.__drawUpdatedRoom.bind(this); + + this.__roomNameField = new Text('Room Name ', { fontFamily: 'Arial', fontSize: 14, fill: '#000000', align: 'left' }); + this.__roomAreaField = new Text('Room Area ', { fontFamily: 'Arial', fontSize: 14, fill: '#000000', align: 'left' }); + + this.__roomAreaField.alpha = 0.5; + this.__roomNameField.alpha = 0.5; + + this.interactive = room.isLocked; + this.buttonMode = room.isLocked; + + if (room.isLocked) { + this.__deactivate(); + } + + this.addChild(this.__roomNameField); + this.addChild(this.__roomAreaField); + // this.__room.addEventListener(EVENT_ROOM_ATTRIBUTES_CHANGED, this.__updatedRoomEvent); + // this.__room.addEventListener(EVENT_CHANGED, this.__updatedRoomEvent); + // Configuration.getInstance().addEventListener(EVENT_CHANGED, this.__updatedRoomEvent); + EventSystem.Instance.addListener("ROOM_ATTRIBUTES_CHANGED_EVENT", this.__updatedRoomEvent); + EventSystem.Instance.addListener("CHANGED_EVENT", this.__updatedRoomEvent); + this.__drawUpdatedLabel(); + this.__mouseOut(undefined); + } + + __drawUpdatedLabel() { + let roomCenter = this.__room.areaCenter; + let area = Math.round(this.__room.area * 100) / 100; + // let measure = Dimensioning.cmToMeasure(parseInt(area), 2); + let measure = Dimensioning.cmToMeasure(area.toFixed(1), 2); + let offset = 15; + this.__roomNameField.position.x = this.__roomAreaField.position.x = Dimensioning.cmToPixel(roomCenter.x); + this.__roomNameField.position.y = Dimensioning.cmToPixel(roomCenter.y) - offset; + this.__roomAreaField.position.y = Dimensioning.cmToPixel(roomCenter.y) + offset; + this.__roomAreaField.text = measure + '\xB2'; + this.__roomNameField.text = this.__room.name; + + this.__roomNameField.anchor.set(0.5, 0.5); + this.__roomAreaField.anchor.set(0.5, 0.5); + } + + __drawUpdatedRoom() { + this.__drawUpdatedLabel(); + this.__drawPolygon(null, null); + this.__drawHoveredOffState(); + } + + __drawPolygon(color, alpha = 1.0) { + let points = []; + this.clear(); + this.beginFill(color, alpha); + + // this.__room.interiorCorners.forEach((corner) => { + // points.push(new Vector2(corner.x, corner.y)); + // }); + this.__room.corners.forEach((corner) => { + points.push(new Vector2(corner.x, corner.y)); + }); + + for (let i = 0; i < points.length; i++) { + let x = Dimensioning.cmToPixel(points[i].x); + let y = Dimensioning.cmToPixel(points[i].y); + if (i === 0) { + this.moveTo(x, y); + } else { + this.lineTo(x, y); + } + } + this.endFill(); + } + + __drawSelectedState() { + this.__drawPolygon(0x00BA8C, 1.0); + } + __drawHoveredOnState() { + this.__drawPolygon(0x008CBA, 1.0); + } + __drawHoveredOffState() { + this.__drawPolygon(0xFEDAFF, 1.0); + } + + remove() { + // this.__room.removeEventListener(EVENT_ROOM_ATTRIBUTES_CHANGED, this.__updatedRoomEvent); + // this.__room.removeEventListener(EVENT_CHANGED, this.__updatedRoomEvent); + // Configuration.getInstance().removeEventListener(EVENT_CHANGED, this.__updatedRoomEvent); + EventSystem.Instance.removeListener("ROOM_ATTRIBUTES_CHANGED_EVENT", this.__updatedRoomEvent); + EventSystem.Instance.removeListener("CHANGED_EVENT", this.__updatedRoomEvent); + super.remove(); + } + + get room() { + return this.__room; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer2d/TemporaryWall.ts b/src/blueprint/scripts/viewer2d/TemporaryWall.ts new file mode 100644 index 0000000..b3a5bff --- /dev/null +++ b/src/blueprint/scripts/viewer2d/TemporaryWall.ts @@ -0,0 +1,54 @@ +import { Vector2 } from "babylonjs"; +import { Graphics, Text } from "pixi.js"; +import { Dimensioning } from "../core/dimensioning"; +import { Corner } from "../model/corner"; + +export class TemporaryWall extends Graphics { + __textfield: Text; + constructor() { + super(); + this.__textfield = new Text('Length: ', { fontFamily: 'Arial', fontSize: 14, fill: "black", align: 'center' }); + // this.__textfield.pivot.x = this.__textfield.pivot.y = 0.5; + this.addChild(this.__textfield); + } + + __toPixels(vector): Vector2 { + vector.x = Dimensioning.cmToPixel(vector.x); + vector.y = Dimensioning.cmToPixel(vector.y); + return vector; + } + + update(corner: Corner, endPoint: Vector2, startPoint: Vector2): void { + this.clear(); + this.__textfield.visible = false; + if (corner !== undefined && endPoint !== undefined) { + let pxCornerCo = this.__toPixels(corner.location.clone()); + let pxEndPoint = this.__toPixels(endPoint.clone()); + let vect = endPoint.clone().subtract(corner.location); + let midPoint = (pxEndPoint.clone().subtract(pxCornerCo).multiplyByFloats(0.5, 0.5)).add(pxCornerCo);; + + this.lineStyle(10, 0x008CBA); + this.moveTo(pxCornerCo.x, pxCornerCo.y); + this.lineTo(pxEndPoint.x, pxEndPoint.y); + + this.beginFill(0x008CBA, 0.5); + this.drawCircle(pxEndPoint.x, pxEndPoint.y, 10); + + this.__textfield.position.x = midPoint.x; + this.__textfield.position.y = midPoint.y; + this.__textfield.text = Dimensioning.cmToMeasure(vect.length()); + this.__textfield.visible = true; + } + if (startPoint !== undefined) { + let pxStartCo = this.__toPixels(startPoint); + this.beginFill(0x008cba, 0.5); + this.drawCircle(pxStartCo.x, pxStartCo.y, 10); + } + } + + clear(): this { + super.clear(); + this.__textfield.visible = false; + return this; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer2d/Viewer2D.ts b/src/blueprint/scripts/viewer2d/Viewer2D.ts new file mode 100644 index 0000000..f4588da --- /dev/null +++ b/src/blueprint/scripts/viewer2d/Viewer2D.ts @@ -0,0 +1,667 @@ +import { Application, Container, DisplayObject, Graphics, Text } from 'pixi.js'; +import { Viewport } from 'pixi-viewport'; +import { Grid2D } from './Grid2d'; +import { CornerView2D } from './CornerView2D'; +import { WallView2D } from './WallView2D'; +import { RoomView2D } from './RoomView2D'; +import { Dimensioning } from '../core/dimensioning'; +import { Configuration, snapToGrid, snapTolerance, viewBounds } from '../core/configuration'; +import { IS_TOUCH_DEVICE } from '../helpers/DeviceInfo'; +import { CornerGroupTransform2D } from './CornerGroupTransform2D'; +import { Room } from '../model/room'; +import { BoundaryView2D } from './BoundaryView2D'; +import { TemporaryWall } from './TemporaryWall'; +import { Vector2 } from 'babylonjs'; +import { BaseFloorplanViewElement2D } from './BaseFloorplanViewElement2D'; +import { Floorplan } from '../model/floorplan'; + +export enum floorplannerModes { + MOVE = 0, + DRAW = 1, + EDIT_ISLANDS = 2 +}; + + + +export class Viewer2D extends Application { + __mode: floorplannerModes; + __canvasHolder: HTMLCanvasElement; + __floorplan: Floorplan; + __options; + + __lastNode; + __tempWall: TemporaryWall; + + __corners2d: CornerView2D[]; + __walls2d: WallView2D[]; + __rooms2d: RoomView2D[]; + __entities2D: BaseFloorplanViewElement2D[]; + + __externalCorners2d: CornerView2D[]; + __externalWalls2d: WallView2D[]; + __externalRooms2d: RoomView2D[]; + __externalEntities2d: BaseFloorplanViewElement2D[]; + + __worldWidth: 3000; + __worldHeight: 3000; + __currentWidth: 500; + __currentHeight: 500; + __currentSelection: Object; + + __zoomedEvent: () => void; + __pannedEvent: () => void; + __selectionMonitorEvent: (event) => void; + __cornerMovedEvent: (event) => void; + + __drawModeMouseDownEvent: (event) => void; + __drawModeMouseUpEvent: (event) => void; + __drawModeMouseMoveEvent: (event) => void; + + __redrawFloorplanEvent: () => void; + __drawExternalFloorplanEvent: () => void; + __windowResizeEvent: () => void; + __resetFloorplanEvent: (event) => void; + + __floorplanLoadedEvent: () => void; + + __floorplanContainer: Viewport; + + __tempWallHolder: Graphics; + __snapToGrid; + __keyboard; + __keyListenerEvent; + __floorplanElementsHolder: Graphics; + __boundaryHolder: Graphics; + + __grid2d: Grid2D; + + __boundaryRegion2D; + __groupTransformer; + + constructor(canvasHolder, floorplan, options) { + const { pixiAppOptions, pixiViewportOptions } = options; + const pixiDefalultAppOpts = { + width: 512, + height: 512, + resolution: window.devicePixelRatio || 2, + antialias: true, + transparent: false, + }; + // super({width: 512, height: 512}); + super(Object.assign(pixiDefalultAppOpts, pixiAppOptions)); + + let opts = { + 'corner-radius': 20, + 'boundary-point-radius': 5.0, + 'boundary-line-thickness': 1.0, + 'boundary-point-color': '#D3D3D3', + 'boundary-line-color': '#F3F3F3', + pannable: true, + zoomable: true, + dimlinecolor: '#3EDEDE', + dimarrowcolor: '#000000', + dimtextcolor: '#000000', + scale: true, + rotate: true, + translate: true, + resize: true, + }; + + for (var opt in opts) { + if (opts.hasOwnProperty(opt) && options.hasOwnProperty(opt)) { + opts[opt] = options[opt]; + } + } + + // console.log('VIEWER 2D ::: ', opts); + this.__mode = floorplannerModes.MOVE; + this.__canvasHolder = document.getElementById(canvasHolder) as HTMLCanvasElement; + this.__floorplan = floorplan; + this.__options = opts; + + this.__lastNode = null; + this.__tempWall = new TemporaryWall(); + + this.__corners2d = []; + this.__walls2d = []; + this.__rooms2d = []; + this.__entities2D = []; + + this.__externalCorners2d = []; + this.__externalWalls2d = []; + this.__externalRooms2d = []; + this.__externalEntities2d = []; + + this.__worldWidth = 3000; + this.__worldHeight = 3000; + this.__currentWidth = 500; + this.__currentHeight = 500; + this.__currentSelection = null; + + this.__zoomedEvent = this.__zoomed.bind(this); + this.__pannedEvent = this.__panned.bind(this); + this.__selectionMonitorEvent = this.__selectionMonitor.bind(this); + this.__cornerMovedEvent = this.__cornerMoved.bind(this); + + this.__drawModeMouseDownEvent = this.__drawModeMouseDown.bind(this); + this.__drawModeMouseUpEvent = this.__drawModeMouseUp.bind(this); + this.__drawModeMouseMoveEvent = this.__drawModeMouseMove.bind(this); + + this.__redrawFloorplanEvent = this.__redrawFloorplan.bind(this); + this.__drawExternalFloorplanEvent = this.__drawExternalFloorplan.bind(this); + this.__windowResizeEvent = this._handleWindowResize.bind(this); + this.__resetFloorplanEvent = this.__resetFloorplan.bind(this); + + this.__floorplanLoadedEvent = this.__center.bind(this); + + const pixiViewportDefaultOpts = { + screenWidth: window.innerWidth, + screenHeight: window.innerHeight, + worldWidth: this.__worldWidth, + worldHeight: this.__worldHeight, + interaction: this.renderer.plugins.interaction, + passiveWheel: false, + }; + + this.__floorplanContainer = new Viewport(Object.assign(pixiViewportDefaultOpts, pixiViewportOptions)); + this.__tempWallHolder = new Graphics(); + + this.__snapToGrid = false; + + this.__keyListenerEvent = this.__keyListener.bind(this); + + let origin = new Graphics(); + this.__floorplanElementsHolder = new Graphics(); + this.__boundaryHolder = new Graphics(); + this.__grid2d = new Grid2D(this.view, options); + this.__boundaryRegion2D = null; + this.__groupTransformer = new CornerGroupTransform2D(this.__floorplan, this.__options); + this.__groupTransformer.visible = false; + this.__groupTransformer.selected = null; + + origin.beginFill(0xFF0000); + origin.drawCircle(0, 0, 5); + + this.__floorplanContainer.position.set(window.innerWidth * 0.5, window.innerHeight * 0.5); + + this.renderer.backgroundColor = 0xFFFFFF; + + // this.renderer.autoResize = true; + + this.__tempWall.visible = false; + + this.__floorplanContainer.addChild(this.__grid2d); + this.__floorplanContainer.addChild(this.__boundaryHolder); + // this.__floorplanContainer.addChild(this.__tempWall); + this.__floorplanContainer.addChild(origin); + this.__floorplanContainer.addChild(this.__floorplanElementsHolder); + this.__floorplanContainer.addChild(this.__groupTransformer); + + this.__tempWallHolder.addChild(this.__tempWall); + + + this.stage.addChild(this.__floorplanContainer); + this.stage.addChild(this.__tempWallHolder); + + this.__canvasHolder.appendChild(this.view); + + this.__floorplanContainer.drag().pinch().wheel(); + + if (!this.__options.pannable) { + this.__floorplanContainer.plugins.pause('drag'); + } + + if (!this.__options.zoomable) { + this.__floorplanContainer.plugins.pause('wheel'); + this.__floorplanContainer.plugins.pause('pinch'); + } + + this.__keyboard.addEventListener(EVENT_KEY_RELEASED, this.__keyListenerEvent); + this.__keyboard.addEventListener(EVENT_KEY_PRESSED, this.__keyListenerEvent); + + this.__floorplanContainer.on('zoomed', this.__zoomedEvent); + this.__floorplanContainer.on('moved', this.__pannedEvent); + this.__floorplanContainer.on('clicked', this.__selectionMonitorEvent); + + this.__floorplanContainer.on('mousedown', this.__drawModeMouseDownEvent); + this.__floorplanContainer.on('mouseup', this.__drawModeMouseUpEvent); + this.__floorplanContainer.on('mousemove', this.__drawModeMouseMoveEvent); + + //User touches the screen then emulate the Mouseup event creating a corner + this.__floorplanContainer.on('touchstart', this.__drawModeMouseUpEvent); + //User then touch moves and lifts the finger away from the screen. Now create the next corner + this.__floorplanContainer.on('touchend', this.__drawModeMouseUpEvent); + + //Use touches and drags across the screen then emulate drawing the temporary wall + this.__floorplanContainer.on('touchmove', this.__drawModeMouseMoveEvent); + + // this.__floorplan.addEventListener(EVENT_UPDATED, (evt) => scope.__redrawFloorplan(evt)); + + // this.__floorplan.addEventListener(EVENT_LOADED, this.__floorplanLoadedEvent); + EventSystem.Instance.addListener("LOADED_EVENT", this.__floorplanLoadedEvent); + + this.__floorplan.addEventListener(EVENT_MODE_RESET, this.__resetFloorplanEvent); + this.__floorplan.addEventListener(EVENT_NEW, this.__redrawFloorplanEvent); + this.__floorplan.addEventListener(EVENT_DELETED, this.__redrawFloorplanEvent); + + this.__floorplan.addEventListener(EVENT_NEW_ROOMS_ADDED, this.__redrawFloorplanEvent); + + this.__floorplan.addEventListener(EVENT_EXTERNAL_FLOORPLAN_LOADED, this.__drawExternalFloorplanEvent); + + + window.addEventListener('resize', this.__windowResizeEvent); + window.addEventListener('orientationchange', this.__windowResizeEvent); + + this._handleWindowResize(); + + this.__center(); + } + + __drawBoundary() { + // return; + if (this.__boundaryRegion2D) { + this.__boundaryRegion2D.remove(); + } + + if (this.__floorplan.boundary) { + if (this.__floorplan.boundary.isValid) { + this.__boundaryRegion2D = new BoundaryView2D(this.__floorplan, this.__options, this.__floorplan.boundary); + this.__boundaryHolder.addChild(this.__boundaryRegion2D); + } + } + } + + __keyListener(evt: KeyboardEvent) { + + if (evt.type === EVENT_KEY_PRESSED && evt.key === 'Shift') { + this.__snapToGrid = true; + } + if (evt.type === EVENT_KEY_RELEASED && evt.key === 'Shift') { + this.__snapToGrid = false; + } + if (evt.key === 'Escape') { + this.switchMode(floorplannerModes.MOVE); + } + } + + switchMode(mode) { + if (this.__mode === floorplannerModes.EDIT_ISLANDS && mode !== floorplannerModes.EDIT_ISLANDS) { + this.__floorplan.update(); + } + switch (mode) { + case floorplannerModes.DRAW: + this.__mode = floorplannerModes.DRAW; + this.__floorplanContainer.plugins.pause('drag'); + for (let i = 0; i < this.__entities2D.length; i++) { + this.__entities2D[i].interactive = false; + } + this.__changeCursorMode(); + this.__tempWall.clear(); + this.__tempWall.visible = true; + this.__groupTransformer.visible = false; + this.__groupTransformer.selected = null; + break; + case floorplannerModes.EDIT_ISLANDS: + this.__mode = floorplannerModes.EDIT_ISLANDS; + if (this.__currentSelection instanceof Room) { + this.__groupTransformer.visible = true; + this.__groupTransformer.selected = this.__currentSelection; + } else { + this.__groupTransformer.visible = false; + this.__groupTransformer.selected = null; + } + + this.__floorplanContainer.plugins.pause('drag'); + for (let i = 0; i < this.__corners2d.length; i++) { + this.__corners2d[i].interactive = false; + } + for (let i = 0; i < this.__walls2d.length; i++) { + this.__walls2d[i].interactive = false; + } + this.__changeCursorMode(); + break; + case floorplannerModes.MOVE: + this.__mode = floorplannerModes.MOVE; + for (let i = 0; i < this.__entities2D.length; i++) { + this.__entities2D[i].interactive = true; + } + this.__tempWall.visible = false; + this.__groupTransformer.visible = false; + this.__groupTransformer.selected = null; + this.__lastNode = null; + this.__floorplanContainer.plugins.resume('drag'); + this.__changeCursorMode(); + break; + default: + throw new Error('Unknown Viewer2D mode'); + } + } + + __changeCursorMode() { + let cursor = (this.__mode === floorplannerModes.DRAW) ? 'crosshair' : 'pointer'; + this.renderer.plugins.interaction.cursorStyles.crosshair = cursor; + this.renderer.plugins.interaction.cursorStyles.default = cursor; + this.renderer.plugins.interaction.setCursorMode(cursor); + } + + __drawModeMouseDown(evt) { + if (IS_TOUCH_DEVICE) { + this.__drawModeMouseUp(evt); + } + } + + __drawModeMouseUp(evt) { + if (this.__mode === floorplannerModes.DRAW) { + let co = evt.data.getLocalPosition(this.__floorplanContainer); + let cmCo = new Vector2(co.x, co.y); + cmCo.x = Dimensioning.pixelToCm(cmCo.x); + cmCo.y = Dimensioning.pixelToCm(cmCo.y); + if (Configuration.getBooleanValue(snapToGrid) || this.__snapToGrid) { + cmCo.x = Math.floor(cmCo.x / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + cmCo.y = Math.floor(cmCo.y / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + } + + if (this.__floorplan.boundary) { + if (!this.__floorplan.boundary.containsPoint(cmCo.x, cmCo.y)) { + return; + } + } + + // This creates the corner already + let corner = this.__floorplan.newCorner(cmCo.x, cmCo.y, undefined); + + // further create a newWall based on the newly inserted corners + // (one in the above line and the other in the previous mouse action + // of start drawing a new wall) + if (this.__lastNode != null) { + this.__floorplan.newWall(this.__lastNode, corner, undefined, undefined); + this.__floorplan.newWallsForIntersections(this.__lastNode, corner); + // this.__tempWall.visible = false; + // this.switchMode(floorplannerModes.MOVE); + } + if (corner.mergeWithIntersected() && this.__lastNode != null) { + this.__tempWall.visible = false; + this.__lastNode = null; + this.switchMode(floorplannerModes.MOVE); + } + + if (this.__lastNode === null && this.__mode === floorplannerModes.DRAW) { + this.__tempWall.visible = true; + } + + if (IS_TOUCH_DEVICE && corner && this.__lastNode !== null) { + this.__tempWall.visible = false; + this.__lastNode = null; + } else { + this.__lastNode = corner; + } + + + } + } + + __drawModeMouseMove(evt) { + if (this.__mode === floorplannerModes.DRAW) { + let co = evt.data.getLocalPosition(this.__floorplanContainer); + let cmCo = new Vector2(co.x, co.y); + let lastNode = undefined; + cmCo.x = Dimensioning.pixelToCm(cmCo.x); + cmCo.y = Dimensioning.pixelToCm(cmCo.y); + if (Configuration.getBooleanValue(snapToGrid) || this.__snapToGrid) { + cmCo.x = Math.floor(cmCo.x / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + cmCo.y = Math.floor(cmCo.y / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + } + if (this.__lastNode !== null) { + this.__tempWall.update(this.__lastNode, cmCo, undefined); + } else { + this.__tempWall.update(lastNode, undefined, cmCo); + } + } + } + + __cornerMoved(evt) { + if (this.__mode === floorplannerModes.EDIT_ISLANDS) { + return; + } + this.__groupTransformer.visible = false; + this.__groupTransformer.selected = null; + } + + __selectionMonitor(evt) { + this.__currentSelection = null; + this.__groupTransformer.visible = false; + this.__groupTransformer.selected = null; + // this.__eventDispatcher.dispatchEvent({ type: EVENT_NOTHING_2D_SELECTED }); + EventSystem.Instance.sendMessage("NOTHING_2D_SELECTED_EVENT", {}) + for (let i = 0; i < this.__entities2D.length; i++) { + let entity = this.__entities2D[i]; + if (evt.item !== undefined) { + if (evt.item === entity) { + continue; + } + } + entity.selected = false; + } + if (evt.item) { + let item = null; + if (evt.item instanceof WallView2D) { + item = evt.item.wall; + // this.__eventDispatcher.dispatchEvent({ type: EVENT_WALL_2D_CLICKED, item: evt.item.wall, entity: evt.item }); + EventSystem.Instance.sendMessage("WALL_CLICKED_2D_EVENT", evt) + } else if (evt.item instanceof CornerView2D) { + item = evt.item.corner; + // this.__eventDispatcher.dispatchEvent({ type: EVENT_CORNER_2D_CLICKED, item: evt.item.corner, entity: evt.item }); + EventSystem.Instance.sendMessage("CORNER_CLICKED_2D_EVENT", evt) + } else if (evt.item instanceof RoomView2D) { + item = evt.item.room; + // this.__eventDispatcher.dispatchEvent({ type: EVENT_ROOM_2D_CLICKED, item: evt.item.room, entity: evt.item }); + EventSystem.Instance.sendMessage("ROOM_CLICKED_2D_EVENT", evt) + } + if (this.__mode === floorplannerModes.EDIT_ISLANDS) { + this.__groupTransformer.visible = true; + this.__groupTransformer.selected = item; + } + this.__currentSelection = item; + } + } + + __center() { + let floorplanCenter = this.__floorplan.getCenter(); + let zoom = this.__floorplanContainer.scale.x; + let windowSize = new Vector2(this.__currentWidth, this.__currentHeight); + let bounds = Dimensioning.cmToPixel(Configuration.getNumericValue(viewBounds)) * zoom; + // console.log(windowSize.x, windowSize.y); + let x = (windowSize.x * 0.5) - (floorplanCenter.x * 0.5);// - (bounds*0.5); + let y = (windowSize.y * 0.5) - (floorplanCenter.z * 0.5);// - (bounds*0.5); + this.__floorplanContainer.x = x; + this.__floorplanContainer.y = y; + this.__tempWallHolder.x = x; + this.__tempWallHolder.y = y; + // console.log(x, y, floorplanCenter); + } + + __zoomed() { + let zoom = this.__floorplanContainer.scale.x; + let bounds = Dimensioning.cmToPixel(Configuration.getNumericValue(viewBounds));// * zoom; + let maxZoomOut = Math.max(window.innerWidth, window.innerHeight) / bounds; + zoom = (zoom < maxZoomOut) ? maxZoomOut : (zoom > 60) ? 60 : zoom; + + this.__floorplanContainer.scale.x = this.__floorplanContainer.scale.y = zoom; + this.__tempWallHolder.scale.x = this.__tempWallHolder.scale.y = zoom; + + this.__grid2d.gridScale = this.__floorplanContainer.scale.x; + } + + __panned() { + let zoom = this.__floorplanContainer.scale.x; + let bounds = Dimensioning.cmToPixel(Configuration.getNumericValue(viewBounds)) * zoom; + + let xy = new Vector2(this.__floorplanContainer.x, this.__floorplanContainer.y); + let topleft = new Vector2((-(bounds * 0.5)), (-(bounds * 0.5))); + let bottomright = new Vector2(((bounds * 0.5)), ((bounds * 0.5))); + + // let windowSize = new Vector2(window.innerWidth, window.innerHeight); + let windowSize = new Vector2(this.__currentWidth, this.__currentHeight); + + let xValue = Math.min(-topleft.x, xy.x); + let yValue = Math.min(-topleft.y, xy.y); + + xValue = Math.max(windowSize.x - bottomright.x, xValue); + yValue = Math.max(windowSize.y - bottomright.y, yValue); + + + this.__floorplanContainer.x = this.__tempWallHolder.x = xValue; + this.__floorplanContainer.y = this.__tempWallHolder.y = yValue; + // console.log('---------------------------------------------'); + // console.log('CURRENT ZOOM :: ', zoom); + // console.log('TOP LEFT :: ', topleft); + // console.log('BOTTOM RIGHT :: ', bottomright); + // console.log('WINDOW SIZE :: ', windowSize); + // console.log(`X=${xValue}, Y=${yValue}`); + } + + __resetFloorplan(evt) { + this.__mode = floorplannerModes.MOVE; + this.__groupTransformer.visible = false; + this.__groupTransformer.selected = null; + this.__drawExternalFloorplan(); + } + + __redrawFloorplan() { + let scope = this; + let i = 0; + + // clear scene + scope.__entities2D.forEach((entity) => { + entity.removeFloorplanListener(EVENT_2D_SELECTED, this.__selectionMonitorEvent); + entity.remove(); + }); + + this.__drawBoundary(); + + this.__corners2d = []; + this.__walls2d = []; + this.__rooms2d = []; + this.__entities2D = []; + + let rooms = this.__floorplan.getRooms(); + + for (i = 0; i < rooms.length; i++) { + let modelRoom = rooms[i]; + let roomView = new RoomView2D(this.__floorplan, this.__options, modelRoom); + this.__floorplanElementsHolder.addChild(roomView); + this.__rooms2d.push(roomView); + this.__entities2D.push(roomView); + roomView.interactive = (this.__mode === floorplannerModes.MOVE); + roomView.addFloorplanListener(EVENT_2D_SELECTED, this.__selectionMonitorEvent); + } + for (i = 0; i < this.__floorplan.walls.length; i++) { + let modelWall = this.__floorplan.walls[i]; + let wallView = new WallView2D(this.__floorplan, this.__options, modelWall); + this.__floorplanElementsHolder.addChild(wallView); + this.__walls2d.push(wallView); + this.__entities2D.push(wallView); + wallView.interactive = (this.__mode === floorplannerModes.MOVE); + wallView.addFloorplanListener(EVENT_2D_SELECTED, this.__selectionMonitorEvent); + } + for (i = 0; i < this.__floorplan.corners.length; i++) { + let modelCorner = this.__floorplan.corners[i]; + let cornerView = new CornerView2D(this.__floorplan, this.__options, modelCorner); + this.__floorplanElementsHolder.addChild(cornerView); + this.__corners2d.push(cornerView); + this.__entities2D.push(cornerView); + cornerView.interactive = (this.__mode === floorplannerModes.MOVE); + cornerView.addFloorplanListener(EVENT_2D_SELECTED, this.__selectionMonitorEvent); + modelCorner.removeEventListener(EVENT_MOVED, this.__cornerMovedEvent); + modelCorner.addEventListener(EVENT_MOVED, this.__cornerMovedEvent); + } + this._handleWindowResize(); + } + + __drawExternalFloorplan() { + let scope = this; + let i = 0; + // clear scene + scope.__externalEntities2d.forEach((entity) => { + entity.remove(); + }); + + this.__drawBoundary(); + + this.__externalCorners2d = []; + this.__externalWalls2d = []; + this.__externalRooms2d = []; + + let rooms = this.__floorplan.externalRooms; + + for (i = 0; i < rooms.length; i++) { + let modelRoom = rooms[i]; + let roomView = new RoomView2D(this.__floorplan, this.__options, modelRoom); + this.__floorplanElementsHolder.addChild(roomView); + this.__externalRooms2d.push(roomView); + this.__externalEntities2d.push(roomView); + } + for (i = 0; i < this.__floorplan.externalWalls.length; i++) { + let modelWall = this.__floorplan.externalWalls[i]; + let wallView = new WallView2D(this.__floorplan, this.__options, modelWall); + this.__floorplanElementsHolder.addChild(wallView); + this.__externalWalls2d.push(wallView); + this.__externalEntities2d.push(wallView); + } + for (i = 0; i < this.__floorplan.externalCorners.length; i++) { + let modelCorner = this.__floorplan.externalCorners[i]; + let cornerView = new CornerView2D(this.__floorplan, this.__options, modelCorner); + this.__floorplanElementsHolder.addChild(cornerView); + this.__externalCorners2d.push(cornerView); + this.__externalEntities2d.push(cornerView); + } + this._handleWindowResize(); + } + + /** */ + _handleWindowResize() { + + let heightMargin = this.__canvasHolder.offsetTop; + let widthMargin = this.__canvasHolder.offsetLeft; + + let w = (this.__options.resize) ? window.innerWidth - widthMargin : this.__canvasHolder.clientWidth; + let h = (this.__options.resize) ? window.innerHeight - heightMargin : this.__canvasHolder.clientHeight; + + this.__currentWidth = w; + this.__currentHeight = h; + + this.renderer.resize(w, h); + this.renderer.view.style.width = w + 'px'; + this.renderer.view.style.height = h + 'px'; + this.renderer.view.style.display = 'block'; + this.__floorplanContainer.resize(w, h, this.__worldWidth, this.__worldHeight); + + + this.renderer.render(this.stage); + this.__zoomed(); + this.__panned(); + } + + addFloorplanListener(type, listener) { + // this.__eventDispatcher.addEventListener(type, listener); + EventSystem.Instance.addListener(type, listener); + } + + removeFloorplanListener(type, listener) { + EventSystem.Instance.removeListener(type, listener); + // this.__eventDispatcher.removeEventListener(type, listener); + } + + dispose() { + this.__floorplanContainer.off('zoomed', this.__zoomedEvent); + this.__floorplanContainer.off('moved', this.__pannedEvent); + this.__floorplanContainer.off('clicked', this.__selectionMonitorEvent); + + // this.__floorplan.addEventListener(EVENT_UPDATED, (evt) => scope.__redrawFloorplan(evt)); + this.__floorplan.removeEventListener(EVENT_NEW, this.__redrawFloorplanEvent); + this.__floorplan.removeEventListener(EVENT_DELETED, this.__redrawFloorplanEvent); + this.__floorplan.removeEventListener(EVENT_LOADED, this.__redrawFloorplanEvent); + window.removeEventListener('resize', this.__windowResizeEvent); + window.removeEventListener('orientationchange', this.__windowResizeEvent); + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer2d/WallView2D.ts b/src/blueprint/scripts/viewer2d/WallView2D.ts new file mode 100644 index 0000000..6d034c4 --- /dev/null +++ b/src/blueprint/scripts/viewer2d/WallView2D.ts @@ -0,0 +1,559 @@ +import { BaseFloorplanViewElement2D } from './BaseFloorplanViewElement2D.js'; +import { Dimensioning } from '../core/dimensioning.js'; +import { Graphics, Text, Point } from 'pixi.js'; +import { Configuration, snapToGrid, snapTolerance, dragOnlyX, dragOnlyY, directionalDrag } from '../core/configuration.js'; +import { isMobile } from 'detect-touch-device'; +import { EventSystem } from '../core/EventSystem.js'; +import { Color4, Vector2, Vector3 } from 'babylonjs'; +import { Wall } from '../model/wall'; + +export class WallDimensions2D extends Graphics { + + __floorplan; + __options; + __wall: Wall; + __textfield; + + constructor(floorplan, options, wall) { + super(); + var opts = { dimlinecolor: '#3EDEDE', dimarrowcolor: '#000000', dimtextcolor: '#000000', }; + for (var opt in opts) { + if (opts.hasOwnProperty(opt) && options.hasOwnProperty(opt)) { + opts[opt] = options[opt]; + } + } + opts.dimlinecolor = Color4.FromHexString(opts.dimlinecolor).toHexString(); + opts.dimarrowcolor = Color4.FromHexString(opts.dimarrowcolor).toHexString(); + opts.dimtextcolor = Color4.FromHexString(opts.dimtextcolor).toHexString(); + + this.__floorplan = floorplan; + this.__options = opts; + this.__wall = wall; + this.__textfield = new Text('Length: ', { fontFamily: 'Arial', fontSize: 14, fill: this.__options.dimtextcolor, align: 'center' }); + this.__textfield.anchor.set(0.5, 0.5); + this.interactive = this.__textfield.interactive = false; + this.addChild(this.__textfield); + this.update(); + } + + __getPolygon(start, radius, sides, rotation = 0.0) { + let points = []; + for (let i = 0; i < sides; i++) { + let theta = (i / sides) * Math.PI * 2.0; + let xx = (Math.sin(theta + rotation) * radius) + start.x; + let yy = (Math.cos(theta + rotation) * radius) + start.y; + points.push(new Vector2(xx, yy)); + } + + return points; + } + + __wallNormal() { + if (this.__wall.attachedRooms.length) { + return this.__wall.attachedRooms[0].getWallOutDirection(this.__wall); + } + let wallDirectionNormalized2D = this.__wall.wallDirectionNormalized(); + let wallDirectionNormalized = new Vector3(wallDirectionNormalized2D.x, wallDirectionNormalized2D.y, 0); + // wallDirectionNormalized.applyAxisAngle(new Vector3(0, 0, 1), 1.57); + wallDirectionNormalized = Vector3.RotationFromAxis(new Vector3(0, 0, 1), wallDirectionNormalized, new Vector3(0, 0, 1.57)); + + return wallDirectionNormalized; + } + + __wallOffsetLocation(point2d, offset = 20) { + let wallOutDirection = this.__wallNormal(); + if (wallOutDirection === null) { + wallOutDirection = new Vector3(0, 1, 0); + } + let bestLocation = point2d.add(wallOutDirection.multiplyScalar(offset)); + return this.__toPixels(bestLocation); + } + + __wallOffsetLocationFromCenter(offset = 20) { + let wallCenter2D = this.__wall.wallCenter().clone(); + let bestLocation = this.__wallOffsetLocation(wallCenter2D, offset); //wallCenter.add(wallOutDirection.multiplyScalar(offset)); + return bestLocation; + } + + __toPixels(vector) { + vector.x = Dimensioning.cmToPixel(vector.x); + vector.y = Dimensioning.cmToPixel(vector.y); + return vector; + } + + __drawDimensionLine() { + // console.trace('DRAW DIMENSION LINE ::: ', this.__wall.id); + let wallDirectionNormalized = this.__wall.wallDirectionNormalized(); + let wallAngle = this.__wall.wallDirectionNormalized().angle(); + let p1Start = this.__toPixels(this.__wall.start.location.clone()); + let p1End = this.__wallOffsetLocation(this.__wall.start.location.clone(), 100); + + let p2Start = this.__toPixels(this.__wall.end.location.clone()); + let p2End = this.__wallOffsetLocation(this.__wall.end.location.clone(), 100); + + let p1Center = this.__wallOffsetLocation(this.__wall.start.location.clone(), 50); + let p2Center = this.__wallOffsetLocation(this.__wall.end.location.clone(), 50); + //Draw the line at wall start + this.clear(); + this.lineStyle(2, this.__options.dimlinecolor); + + this.moveTo(p1Start.x, p1Start.y); + this.lineTo(p1End.x, p1End.y); + + this.moveTo(p2Start.x, p2Start.y); + this.lineTo(p2End.x, p2End.y); + + this.moveTo(p1Center.x, p1Center.y); + this.lineTo(p2Center.x, p2Center.y); + + + let radius = 5; + let p4 = p1Center.add(wallDirectionNormalized.clone().multiplyScalar(radius)); + let p5 = p2Center.sub(wallDirectionNormalized.clone().multiplyScalar(radius)); + + let arrow1 = this.__getPolygon(p4, radius, 4, wallAngle + 1.57); + let arrow2 = this.__getPolygon(p5, radius, 4, wallAngle + 1.57); + let i = 0; + this.beginFill(this.__options.dimarrowcolor, 1.0); + this.moveTo(arrow1[0].x, arrow1[0].y); + for (i = 1; i < arrow1.length; i++) { + this.lineTo(arrow1[i].x, arrow1[i].y); + } + this.lineTo(arrow1[0].x, arrow1[0].y); + + this.moveTo(arrow2[0].x, arrow2[0].y); + for (i = 1; i < arrow2.length; i++) { + this.lineTo(arrow2[i].x, arrow2[i].y); + } + this.lineTo(arrow2[0].x, arrow2[0].y); + this.endFill(); + + // this.__textfield.rotation = -wallAngle; + } + + __updateDimensionText() { + let location = this.__wallOffsetLocationFromCenter(100); + this.__textfield.text = Dimensioning.cmToMeasure(this.__wall.wallSize); + this.__textfield.position.x = location.x; + this.__textfield.position.y = location.y; + } + + update() { + this.__drawDimensionLine(); + this.__updateDimensionText(); + } + +} + +export class Edge2D extends BaseFloorplanViewElement2D { + __wall; + __edge; + __debugMode; + constructor(floorplan, options, wall, edge) { + super(floorplan, options); + this.__wall = wall; + this.__edge = edge; + this.__debugMode = false; + this.__deactivate(); + } + + __getCornerCoordinates() { + // let sPoint = Dimensioning.cmToPixelVector2D(this.__wall.start.location.clone()); + // let ePoint = Dimensioning.cmToPixelVector2D(this.__wall.end.location.clone()); + + // return [sPoint, ePoint]; + + let iStartPoint = Dimensioning.cmToPixelVector2D(this.__edge.interiorStart()); + let iEndPoint = Dimensioning.cmToPixelVector2D(this.__edge.interiorEnd()); + + let eStartPoint = Dimensioning.cmToPixelVector2D(this.__edge.exteriorStart()); + let eEndPoint = Dimensioning.cmToPixelVector2D(this.__edge.exteriorEnd()); + + let vectStart = eStartPoint.clone().sub(iStartPoint); + let vectEnd = eEndPoint.clone().sub(iEndPoint); + + return [iStartPoint.add(vectStart.multiplyScalar(0.5)), iEndPoint.add(vectEnd.multiplyScalar(0.5))]; + + } + + __getPolygonCoordinates(forEdge) { + let points = [ + forEdge.exteriorStart(this.__debugMode), + forEdge.exteriorEnd(this.__debugMode), + forEdge.interiorEnd(this.__debugMode), + forEdge.interiorStart(this.__debugMode)]; + if (isMobile) { + let pixelPoints = []; + let start = forEdge.getStart().location; + let end = forEdge.getEnd().location; + let origins = [start, end, end, start]; + for (let i = 0; i < points.length; i++) { + let point = points[i]; + let origin = origins[i]; + let vect = point.clone().sub(origin); + + vect = vect.multiplyScalar(3.0).add(origin); + let pixelPoint = Dimensioning.cmToPixelVector2D(vect); //new Vector2(Dimensioning.cmToPixel(vect.x), Dimensioning.cmToPixel(vect.y)); + pixelPoints.push(pixelPoint); + } + return pixelPoints; + } + for (let i = 0; i < points.length; i++) { + points[i] = Dimensioning.cmToPixelVector2D(points[i]); + } + return points; + } + + __drawEdgeArrow(forEdge, color = 0xDDDDDD, alpha = 1.0) { + let start = Dimensioning.cmToPixelVector2D(forEdge.getStart().location.clone()); + let end = Dimensioning.cmToPixelVector2D(forEdge.getEnd().location.clone()); + let vect = end.clone().sub(start); + let midPoint = start.clone().add(vect.multiplyScalar(0.5)); + let lineThickness = 3.0; + let arrowSize = 7; + let dotSize = 5; + + this.lineStyle(lineThickness, color, alpha); + this.moveTo(start.x, start.y); + this.lineTo(midPoint.x, midPoint.y); + + this.beginFill(color, alpha); + this.drawCircle(start.x, start.y, dotSize); + this.drawRect(midPoint.x - arrowSize * 0.5, midPoint.y - arrowSize * 0.5, arrowSize, arrowSize); + this.endFill(); + } + + __drawEdgePolygon(forEdge, color = 0xDDDDDD, alpha = 1.0) { + let points = this.__getPolygonCoordinates(forEdge); + + this.clear(); + let lineThickness = 2.5; + + let pStart = points[2]; + let pEnd = points[3]; + + // let pStart = points[0].clone().add(points[0].clone().sub(points[3]).multiplyScalar(0.5)); + // let pEnd = points[1].clone().add(points[2].clone().sub(points[3]).multiplyScalar(0.5)); + + this.lineStyle(lineThickness, color, 1.0); + this.moveTo(pStart.x, pStart.y); + this.lineTo(pEnd.x, pEnd.y); + + this.lineStyle(lineThickness, color, 0.0); + this.beginFill(color, alpha); + for (let i = 0; i < points.length; i++) { + let pt = points[i]; + if (i === 0) { + this.moveTo(pt.x, pt.y); + } else { + this.lineTo(pt.x, pt.y); + } + } + this.endFill(); + } + + drawEdge(color = 0xDDDDDD, alpha = 1.0) { + this.clear(); + // if(!this.__edge.room){ + // return; + // } + + let alpha_new = (this.__debugMode) ? 0.1 : alpha; + this.__drawEdgePolygon(this.__edge, color, alpha_new);//0.1);// + + if (this.__debugMode) { + this.__drawEdgeArrow(this.__edge, 0x000000, alpha); + if (this.__edge.prev) { //Red for previous edge + this.__drawEdgeArrow(this.__edge.prev, 0xFF0000, alpha); + } + if (this.__edge.next) { //Blue for Next edge + this.__drawEdgeArrow(this.__edge.next, 0x0000FF, alpha); + } + } + + if (!this.__debugMode) { + let cornerLine = this.__getCornerCoordinates(); + let lineThickness = 1.5; //Math.min(Dimensioning.cmToPixel(this.__wall.thickness * 0.25), 1.0); + this.lineStyle(lineThickness, 0xF0F0F0); + this.moveTo(cornerLine[1].x, cornerLine[1].y); + this.lineTo(cornerLine[0].x, cornerLine[0].y); + } + } + + get edge() { + return this.__edge; + } + + get debugMode() { + return this.__debugMode; + } + + set debugMode(flag) { + this.__debugMode = flag; + } +} + +export class WallView2D extends BaseFloorplanViewElement2D { + __options; + __wall; + + __frontEdge; + __backEdge; + __info: WallDimensions2D; + __wallUpdatedEvent = (event) => { + this.__drawUpdatedWall(event); + }; + __wallDeletedEvent = () => { + this.__wallDeleted(); + } + + constructor(floorplan, options, wall) { + super(floorplan, options); + this.__options = options; + this.__wall = wall; + + this.__frontEdge = null; + this.__backEdge = null; + this.__info = new WallDimensions2D(floorplan, options, wall); + this.viewDimensions = false; + + this.interactive = wall.isLocked; + this.buttonMode = wall.isLocked; + + if (wall.isLocked) { + this.__deactivate(); + } + + // this.__wallUpdatedEvent = this.__drawUpdatedWall.bind(this); + // this.__wallDeletedEvent = this.__wallDeleted.bind(this); + + EventSystem.Instance.addListener("MOVED_EVENT", this.__wallUpdatedEvent); + EventSystem.Instance.addListener("UPDATED_EVENT", this.__wallUpdatedEvent); + EventSystem.Instance.addListener("DELETED_EVENT", this.__wallUpdatedEvent); + + if (wall.backEdge) { + this.__backEdge = new Edge2D(this.__floorplan, options, this.__wall, wall.backEdge); + this.addChild(this.__backEdge); + } + if (wall.frontEdge) { + this.__frontEdge = new Edge2D(this.__floorplan, options, this.__wall, wall.frontEdge); + this.addChild(this.__frontEdge); + } + this.addChild(this.__info); + this.__mouseOut(); + } + + get viewDimensions() { + return (this.__info.alpha > 0.9); + } + + set viewDimensions(value) { + if (value) { + this.__info.alpha = 1.0; + return; + } + this.__info.alpha = 0.15; + } + + __getCornerCoordinates() { + let sPoint = Dimensioning.cmToPixelVector2D(this.__wall.start.location.clone()); + let ePoint = Dimensioning.cmToPixelVector2D(this.__wall.end.location.clone()); + + // sPoint.x = Dimensioning.cmToPixel(sPoint.x); + // sPoint.y = Dimensioning.cmToPixel(sPoint.y); + // ePoint.x = Dimensioning.cmToPixel(ePoint.x); + // ePoint.y = Dimensioning.cmToPixel(ePoint.y); + return [sPoint, ePoint]; + } + + __drawInWallItems() { + this.lineStyle(0, 0xF0F0F0); + let inWallItems = this.__wall.inWallItems; + // let depth = this.__wall.thickness * 0.5; + let wallDirection = this.__wall.wallDirectionNormalized(); + for (let i = 0; i < inWallItems.length; i++) { + let item = inWallItems[i]; + let pos = new Vector2(item.position.x, item.position.z); + let width = item.halfSize.x; + let depth = item.halfSize.z; + + let right = wallDirection.clone().multiplyScalar(width); + let left = wallDirection.clone().multiplyScalar(width).multiplyScalar(-1); + let up = wallDirection.clone().rotateAround(new Vector2(), Math.PI * 0.5).multiplyScalar(depth); + let down = up.clone().multiplyScalar(-1); + + let a = pos.clone().add(right.clone().add(up)); + let b = pos.clone().add(right.clone().sub(up)); + let c = pos.clone().add(left.clone().add(down)); + let d = pos.clone().add(left.clone().sub(down)); + + let points = [ + new Point(Dimensioning.cmToPixel(a.x), Dimensioning.cmToPixel(a.y)), + new Point(Dimensioning.cmToPixel(b.x), Dimensioning.cmToPixel(b.y)), + new Point(Dimensioning.cmToPixel(c.x), Dimensioning.cmToPixel(c.y)), + new Point(Dimensioning.cmToPixel(d.x), Dimensioning.cmToPixel(d.y)), + ]; + + this.beginFill(0x0000F0, 0.85); + this.drawPolygon(points); + this.endFill(); + } + } + + __drawPolygon(color = 0xDDDDDD, alpha = 1.0) { + this.clear(); + /** + * Front edge color is blue + */ + let frontColor = color; //0x0000FF; // + + /** + * Back Edge color is red + */ + let backColor = color; //0xFF0000; // + + if (this.__frontEdge) { + this.__frontEdge.drawEdge(frontColor, alpha); + } + if (this.__backEdge) { + this.__backEdge.drawEdge(backColor, alpha); + } + // if(!this.__frontEdge && !this.__backEdge){ + // console.log('NO FRONT OR BACK EDGE TO DRAW ', this.__wall.wallSize); + // } + this.__drawInWallItems(); + } + + __drawSelectedState() { + // if (this.__frontEdge) { + // this.__frontEdge.debugMode = true; + // } + // if (this.__backEdge) { + // this.__backEdge.debugMode = true; + // } + this.__drawPolygon(0x049995, 1.0); + } + __drawHoveredOnState() { + this.__drawPolygon(0x04A9F5, 1.0); + } + __drawHoveredOffState() { + // if (this.__frontEdge) { + // this.__frontEdge.debugMode = false; + // } + // if (this.__backEdge) { + // this.__backEdge.debugMode = false; + // } + this.__drawPolygon(0x000000, 1.0); + } + + __getCornerLocation(vec2) { + let s = this.__wall.start.location.clone(); + let e = this.__wall.end.location.clone(); + let vect = e.clone().sub(s); + let midPoint = s.clone().add(vect.clone().multiplyScalar(0.5)); + let vectorSToMid = s.clone().sub(midPoint); + let vectorEToMid = e.clone().sub(midPoint); + let sNewLocation = vec2.clone().add(vectorSToMid); + let eNewLocation = vec2.clone().add(vectorEToMid); + + return { start: sNewLocation, end: eNewLocation }; + } + + __dragMove(evt) { + super.__dragMove(evt); + + + if (this.__isDragging) { + let co = evt.data.getLocalPosition(this.parent); + let cmCo = new Vector2(co.x, co.y); + cmCo.x = Dimensioning.pixelToCm(cmCo.x); + cmCo.y = Dimensioning.pixelToCm(cmCo.y); + if (Configuration.getBooleanValue(snapToGrid) || this.__snapToGrid) { + cmCo.x = Math.floor(cmCo.x / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + cmCo.y = Math.floor(cmCo.y / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + } + + if (Configuration.getBooleanValue(directionalDrag)) { + let projected = this.__wall.projectOnWallPlane(cmCo); + let vectorToProjected = cmCo.clone().sub(projected); + + if (Configuration.getBooleanValue(snapToGrid) || this.__snapToGrid) { + let snappedLength = Math.floor(vectorToProjected.length() / Configuration.getNumericValue(snapTolerance)) * Configuration.getNumericValue(snapTolerance); + vectorToProjected = vectorToProjected.normalize().multiplyScalar(snappedLength); + } + let finalCo = this.__wall.location.clone().add(vectorToProjected); + cmCo = finalCo; + } + + if (Configuration.getBooleanValue(dragOnlyX) && !Configuration.getBooleanValue(dragOnlyY)) { + cmCo.y = this.__wall.location.y; + } + + if (!Configuration.getBooleanValue(dragOnlyX) && Configuration.getBooleanValue(dragOnlyY)) { + cmCo.x = this.__wall.location.x; + } + + if (this.__floorplan.boundary) { + if (this.__floorplan.boundary.isValid) { + let cornerPoints = this.__getCornerLocation(cmCo); + if ( + !this.__floorplan.boundary.containsPoint(cornerPoints.start.x, cornerPoints.start.y) || + !this.__floorplan.boundary.containsPoint(cornerPoints.end.x, cornerPoints.end.y)) { + return; + } + + if ( + this.__floorplan.boundary.intersectsExternalDesign(cornerPoints.start.x, cornerPoints.start.y) || + this.__floorplan.boundary.intersectsExternalDesign(cornerPoints.end.x, cornerPoints.end.y) + ) { + return; + } + } + } + + // this.__wall.move(cmCo.x, cmCo.y); + this.__wall.location = cmCo; //new Vector2(cmCo.x, cmCo.y); + evt.stopPropagation(); + } + } + + __drawUpdatedWall(evt) { + this.__info.update(); + this.viewDimensions = true; + if (this.selected) { + this.__drawSelectedState(); + return; + } + this.__drawHoveredOffState(); + } + + __wallDeleted() { + this.remove(); + this.__wall = null; + } + + __removeFromFloorplan() { + this.__wall.remove(); + } + + remove() { + EventSystem.Instance.removeListener("MOVED_EVENT", this.__wallUpdatedEvent); + EventSystem.Instance.removeListener("UPDATED_EVENT", this.__wallUpdatedEvent); + EventSystem.Instance.removeListener("DELETED_EVENT", this.__wallUpdatedEvent); + this.removeChild(this.__info); + super.remove(); + } + + get wall() { + return this.__wall; + } + + get selected() { + return super.selected; + } + + set selected(flag) { + super.selected = flag; + this.viewDimensions = flag; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer3d/BoundaryView3D.js b/src/blueprint/scripts/viewer3d/BoundaryView3D.js new file mode 100644 index 0000000..ee23449 --- /dev/null +++ b/src/blueprint/scripts/viewer3d/BoundaryView3D.js @@ -0,0 +1,71 @@ +import { BufferGeometry, DoubleSide, Mesh, Shape, ShapeGeometry, Vector2 } from "three"; +import { FloorMaterial3D } from "../materials/FloorMaterial3D"; + +export class BoundaryView3D extends Mesh{ + constructor(scene, floorplan, options, boundary){ + super(); + this.__scene = scene; + this.__boundary = boundary; + this.__floorplan = floorplan; + + this.__floorPlane = null; + this.__drawBoundary(); + } + + removeFromScene(){ + if(!this.__floorPlane){ + return; + } + this.__scene.remove(this.__floorPlane); + } + + __drawBoundary(){ + if(this.__boundary && this.__boundary.points.length) { + if(this.__boundary.isValid){ + this.removeFromScene(); + this.__floorPlane = this.__buildFloor(); + this.__floorPlane.position.y = -0.5; + this.__scene.add(this.__floorPlane); + } + } + } + + __buildFloor() { + let points = []; + this.__boundary.points.forEach((corner) => { + points.push(new Vector2(corner.x, corner.y)); + }); + let floorSize = new Vector2(this.__boundary.width, this.__boundary.height);//this.room.floorRectangleSize.clone(); + let shape = new Shape(points); + let geometry = new ShapeGeometry(shape); + + geometry.faceVertexUvs[0] = []; + + geometry.faces.forEach((face) => { + let vertA = geometry.vertices[face.a]; + let vertB = geometry.vertices[face.b]; + let vertC = geometry.vertices[face.c]; + geometry.faceVertexUvs[0].push([vertexToUv(vertA), vertexToUv(vertB), vertexToUv(vertC)]); + }); + + function vertexToUv(vertex) { + let x = vertex.x / floorSize.x; + let y = vertex.y / floorSize.y; + return new Vector2(x, y); + } + + geometry.faceVertexUvs[1] = geometry.faceVertexUvs[0]; + geometry.computeFaceNormals(); + geometry.computeVertexNormals(); + geometry.uvsNeedUpdate = true; + // console.log('COLOR FOR BOUNDARY REGION ::: ', this.__boundary.style.color); + let material = new FloorMaterial3D({ color: this.__boundary.style.color, side: DoubleSide }, this.__boundary.style, this.__scene); + let useGeometry = new BufferGeometry().fromGeometry(geometry); + + material.dimensions = new Vector2(this.__boundary.width, this.__boundary.height); + + let floor = new Mesh(useGeometry, material); + floor.rotation.set(Math.PI * 0.5, 0, 0); + return floor; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer3d/DragRoomItemsControl3D.js b/src/blueprint/scripts/viewer3d/DragRoomItemsControl3D.js new file mode 100644 index 0000000..398b949 --- /dev/null +++ b/src/blueprint/scripts/viewer3d/DragRoomItemsControl3D.js @@ -0,0 +1,216 @@ +import { EventDispatcher, Vector2 } from 'three'; +import { Plane, Raycaster, Vector3, Matrix4 } from 'three/build/three.module'; +import { EVENT_ITEM_SELECTED, EVENT_ITEM_MOVE, EVENT_ITEM_HOVERON, EVENT_ITEM_HOVEROFF, EVENT_ITEM_MOVE_FINISH, EVENT_NO_ITEM_SELECTED, EVENT_WALL_CLICKED, EVENT_FLOOR_CLICKED, EVENT_ROOM_CLICKED } from '../core/events'; +import { IS_TOUCH_DEVICE } from '../../DeviceInfo'; + +/** + * This is a custom implementation of the DragControls class + * In this class the raycaster intersection will not check for children + * This is supposed to work only for physicalroomitems because it creates + * a invisible box geometry based on the loaded gltf + */ +export class DragRoomItemsControl3D extends EventDispatcher { + constructor(walls, floors, items, camera, domElement) { + super(); + this.__walls = walls; + this.__floors = floors; + this.__draggableItems = items; + this.__camera = camera; + this.__domElement = domElement; + this.__enabled = true; + this.__transformGroup = false; + + this.__intersections = []; + + this.__plane = new Plane(); + this.__raycaster = new Raycaster(); + this.__mouse = new Vector2(); + this.__offset = new Vector3(); + this.__intersection = new Vector3(); + + this.__worldPosition = new Vector3(); + this.__inverseMatrix = new Matrix4(); + this.__selected = null; + this.__hovered = null; + + this.__timestamp = Date.now(); + + this.__pressListenerEvent = this.__pressListener.bind(this); + this.__releaseListenerEvent = this.__releaseListener.bind(this); + this.__moveListenerEvent = this.__moveListener.bind(this); + this.activate(); + } + + __pressListener(evt) { + let time = Date.now(); + let deltaTime = time - this.__timestamp; + this.__timestamp = time; + evt.preventDefault(); + evt = (evt.changedTouches !== undefined) ? evt.changedTouches[0] : evt; + + this.__intersections.length = 0; + + let visibleDraggableItems = []; + for (let i = 0; i < this.__draggableItems.length; i++) { + if (this.__draggableItems[i].visible) { + visibleDraggableItems.push(this.__draggableItems[i]); + } + } + + this.__raycaster.setFromCamera(this.__mouse, this.__camera); + // this.__raycaster.intersectObjects(this.__draggableItems, false, this.__intersections); + this.__raycaster.intersectObjects(visibleDraggableItems, false, this.__intersections); + + if (this.__intersections.length) { + this.__selected = (this.__transformGroup) ? this.__draggableItems[0] : this.__intersections[0].object; + + if (this.__raycaster.ray.intersectPlane(this.__plane, this.__intersection)) { + + this.__inverseMatrix.getInverse(this.__selected.parent.matrixWorld); + /** + * The belwo line for plane setting normal and coplanar point is necessary for touch based events (ref: DragCOntrols.js in three) + */ + this.__plane.setFromNormalAndCoplanarPoint(this.__camera.getWorldDirection(this.__plane.normal), this.__worldPosition.setFromMatrixPosition(this.__selected.matrixWorld)); + + this.__offset.copy(this.__intersection).sub(this.__worldPosition.setFromMatrixPosition(this.__selected.matrixWorld)); + } + this.__domElement.style.cursor = 'move'; + this.dispatchEvent({ type: EVENT_ITEM_SELECTED, item: this.__selected }); + return; + } + if (deltaTime < 300) { + this.dispatchEvent({ type: EVENT_NO_ITEM_SELECTED, item: this.__selected }); + } + } + + __releaseListener(evt) { + + evt.preventDefault(); + if (this.__selected) { + this.dispatchEvent({ type: EVENT_ITEM_MOVE_FINISH, item: this.__selected }); + this.__selected = null; + } else { + + evt = (evt.changedTouches !== undefined) ? evt.changedTouches[0] : evt; + this.__raycaster.setFromCamera(this.__mouse, this.__camera); + + let wallPlanesThatIntersect = this.__raycaster.intersectObjects(this.__walls, false); + let floorPlanesThatIntersect = this.__raycaster.intersectObjects(this.__floors, false); + if (wallPlanesThatIntersect.length) { + this.dispatchEvent({ type: EVENT_WALL_CLICKED, item: wallPlanesThatIntersect[0].object.edge, point: wallPlanesThatIntersect[0].point, normal: wallPlanesThatIntersect[0].face.normal }); + } else if (floorPlanesThatIntersect.length) { + this.dispatchEvent({ type: EVENT_ROOM_CLICKED, item: floorPlanesThatIntersect[0].object.room, point: floorPlanesThatIntersect[0].point, normal: floorPlanesThatIntersect[0].face.normal }); + } + } + this.__domElement.style.cursor = (this.__hovered) ? 'pointer' : 'auto'; + + } + + __moveListener(evt) { + evt.preventDefault(); + evt = (evt.changedTouches !== undefined) ? evt.changedTouches[0] : evt; + + let rect = this.__domElement.getBoundingClientRect(); + this.__mouse.x = ((evt.clientX - rect.left) / rect.width) * 2 - 1; + this.__mouse.y = -((evt.clientY - rect.top) / rect.height) * 2 + 1; + + this.__raycaster.setFromCamera(this.__mouse, this.__camera); + + if (this.__selected && this.__enabled && this.__selected.visible) { + //Check if the item has customIntersectionPlanes, otherwise move it freely + if (!this.__selected.intersectionPlanes.length) { + if (this.__raycaster.ray.intersectPlane(this.__plane, this.__intersection)) { + let location = this.__selected.location.clone().copy(this.__intersection.sub(this.__offset).applyMatrix4(this.__inverseMatrix)); + this.__selected.location = location; + } + } else { + let customIntersectingPlanes = this.__selected.intersectionPlanes; + let customPlanesThatIntersect = this.__raycaster.intersectObjects(customIntersectingPlanes, false); + if (customPlanesThatIntersect.length) { + let intersectionData = customPlanesThatIntersect[0]; + this.__intersection = intersectionData.point; + let location = intersectionData.point; + let normal = intersectionData.face.normal; + let intersectingPlane = intersectionData.object; + this.__selected.snapToPoint(location, normal, intersectingPlane); + } + } + this.dispatchEvent({ type: EVENT_ITEM_MOVE, item: this.__selected }); + return; + } + + if (IS_TOUCH_DEVICE) { + return; + } + + this.__intersections.length = 0; + + this.__raycaster.setFromCamera(this.__mouse, this.__camera); + this.__raycaster.intersectObjects(this.__draggableItems, false, this.__intersections); + if (this.__intersections.length) { + let object = this.__intersections[0].object; + this.__plane.setFromNormalAndCoplanarPoint(this.__camera.getWorldDirection(this.__plane.normal), this.__worldPosition.setFromMatrixPosition(object.matrixWorld)); + + if (this.__hovered !== object) { + this.__hovered = object; + this.__domElement.style.cursor = 'pointer'; + this.dispatchEvent({ type: EVENT_ITEM_HOVERON, item: object }); + } + } else { + if (this.__hovered !== null) { + this.__domElement.style.cursor = 'auto'; + this.dispatchEvent({ type: EVENT_ITEM_HOVEROFF, item: this.__hovered }); + this.__hovered = null; + } + } + } + + dispose() { + this.deactivate(); + } + + activate() { + + this.__domElement.addEventListener('mousedown', this.__pressListenerEvent, false); + this.__domElement.addEventListener('touchstart', this.__pressListenerEvent, false); + + this.__domElement.addEventListener('mousemove', this.__moveListenerEvent, false); + this.__domElement.addEventListener('touchmove', this.__moveListenerEvent, false); + + this.__domElement.addEventListener('mouseup', this.__releaseListenerEvent, false); + // this.__domElement.addEventListener('mouseleave', this.__releaseListenerEvent, false);//Not necessary + this.__domElement.addEventListener('touchend', this.__releaseListenerEvent, false); + + } + + deactivate() { + this.__domElement.removeEventListener('mousedown', this.__pressListenerEvent, false); + this.__domElement.removeEventListener('touchstart', this.__pressListenerEvent, false); + + this.__domElement.removeEventListener('mousemove', this.__moveListenerEvent, false); + this.__domElement.removeEventListener('touchmove', this.__moveListenerEvent, false); + + this.__domElement.removeEventListener('mouseup', this.__releaseListenerEvent, false); + // this.__domElement.removeEventListener('mouseleave', this.__releaseListenerEvent, false);//Not necessary + this.__domElement.removeEventListener('touchend', this.__releaseListenerEvent, false); + + this.__domElement.style.cursor = ''; + + } + + get enabled() { + return this.__enabled; + } + + set enabled(flag) { + this.__enabled = flag; + } + + get draggableItems() { + return this.__draggableItems; + } + + set draggableItems(items) { + this.__draggableItems = items; + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer3d/Physical3DItem.js b/src/blueprint/scripts/viewer3d/Physical3DItem.js new file mode 100644 index 0000000..ad82235 --- /dev/null +++ b/src/blueprint/scripts/viewer3d/Physical3DItem.js @@ -0,0 +1,233 @@ +import { Mesh, Box3, Vector3, AxesHelper, Matrix4, sRGBEncoding, LinearEncoding } from "three"; +import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader"; +import { EVENT_ITEM_LOADED, EVENT_ITEM_LOADING, EVENT_UPDATED, EVENT_PARAMETRIC_GEOMETRY_UPATED } from "../core/events"; +import { BoxBufferGeometry, LineBasicMaterial, LineSegments, EdgesGeometry } from "three"; +import gsap from 'gsap'; +export class Physical3DItem extends Mesh { + constructor(itemModel, opts) { + super(); + this.__itemModel = itemModel; + this.__box = null; + this.__center = null; + this.__size = null; + this.__selected = false; + + + this.__options = opts; + + this.__selectedMaterial = new LineBasicMaterial({ color: 0x0000F0, linewidth: 5 }); + + this.__boxhelper = new LineSegments(new EdgesGeometry(new BoxBufferGeometry(1, 1, 1)), this.__selectedMaterial); + + + this.__customIntersectionPlanes = []; // Useful for intersecting only wall planes, only floorplanes, only ceiling planes etc + + this.__gltfLoader = new GLTFLoader(); + this.__gltfLoadingProgressEvent = this.__gltfLoadingProgress.bind(this); + this.__gltfLoadedEvent = this.__gltfLoaded.bind(this); + this.__itemUpdatedEvent = this.__itemUpdated.bind(this); + this.__parametricGeometryUpdateEvent = this.__parametricGeometryUpdate.bind(this); + + + this.__itemModel.addEventListener(EVENT_UPDATED, this.__itemUpdatedEvent); + this.add(this.__boxhelper); + this.__boxhelper.material.linewidth = 5; + this.selected = false; + this.position.copy(this.__itemModel.position); + if (this.__itemModel.isParametric) { + this.__createParametricItem(); + } else { + this.__loadItemModel(); + } + } + + __parametricGeometryUpdate(evt) { + let mLocal = new Matrix4().getInverse(this.matrixWorld); + this.__loadedItem.geometry = this.__itemModel.parametricClass.geometry; + this.parent.needsUpdate = true; + + + this.__box = this.__loadedItem.geometry.boundingBox.clone(); //new Box3().setFromObject(this.__loadedItem); + this.__center = this.__box.getCenter(new Vector3()); + this.__size = this.__box.getSize(new Vector3()); + let localCenter = this.__center.clone().applyMatrix4(mLocal); + let m = new Matrix4(); + m = m.makeTranslation(-localCenter.x, -localCenter.y, -localCenter.z); + + this.__boxhelper.geometry = new EdgesGeometry(new BoxBufferGeometry(this.__size.x, this.__size.y, this.__size.z)); + // this.__boxhelper.geometry.applyMatrix4(m); + + this.__boxhelper.rotation.x = this.__itemModel.rotation.x; + this.__boxhelper.rotation.y = this.__itemModel.rotation.y; + this.__boxhelper.rotation.z = this.__itemModel.rotation.z; + + } + __itemUpdated(evt) { + let scope = this; + let duration = 0.25; + if (!scope.parent) { + return; + } + + function __tinyUpdate() { + if (scope.parent) { + scope.parent.needsUpdate = true; + } + + } + if (!this.__itemModel.offlineUpdate) { + if (evt.property === 'position') { + this.position.set(this.__itemModel.position.x, this.__itemModel.position.y, this.__itemModel.position.z); + // gsap.to(this.position, { duration: duration, x: this.__itemModel.position.x, onUpdate: __tinyUpdate }); + // gsap.to(this.position, { duration: duration, y: this.__itemModel.position.y }); + // gsap.to(this.position, { duration: duration, z: this.__itemModel.position.z }); + } + if (evt.property === 'rotation') { + gsap.to(this.__loadedItem.rotation, { duration: duration, x: this.__itemModel.rotation.x, onUpdate: __tinyUpdate }); + gsap.to(this.__loadedItem.rotation, { duration: duration, y: this.__itemModel.rotation.y }); + gsap.to(this.__loadedItem.rotation, { duration: duration, z: this.__itemModel.rotation.z }); + gsap.to(this.__boxhelper.rotation, { duration: duration, x: this.__itemModel.rotation.x }); + gsap.to(this.__boxhelper.rotation, { duration: duration, y: this.__itemModel.rotation.y }); + gsap.to(this.__boxhelper.rotation, { duration: duration, z: this.__itemModel.rotation.z }); + } + } else { + if (evt.property === 'position') { + this.position.set(this.__itemModel.position.x, this.__itemModel.position.y, this.__itemModel.position.z); + } + if (evt.property === 'rotation') { + this.__loadedItem.rotation.set(this.__itemModel.rotation.x, this.__itemModel.rotation.y, this.__itemModel.rotation.z); + this.__boxhelper.rotation.set(this.__itemModel.rotation.x, this.__itemModel.rotation.y, this.__itemModel.rotation.z); + } + } + if (evt.property === 'visible') { + this.visible = this.__itemModel.visible; + } + } + + __initializeChildItem() { + this.__box = new Box3().setFromObject(this.__loadedItem); + this.__center = this.__box.getCenter(new Vector3()); + this.__size = this.__box.getSize(new Vector3()); + + this.__boxhelper.geometry = new EdgesGeometry(new BoxBufferGeometry(this.__size.x, this.__size.y, this.__size.z)); + this.add(this.__loadedItem); + + this.geometry = new BoxBufferGeometry(this.__size.x, this.__size.y, this.__size.z, 1, 1, 1); + this.geometry.computeBoundingBox(); + + this.material.visible = false; + this.__loadedItem.rotation.x = this.__itemModel.rotation.x; + this.__loadedItem.rotation.y = this.__itemModel.rotation.y; + this.__loadedItem.rotation.z = this.__itemModel.rotation.z; + this.__boxhelper.rotation.x = this.__itemModel.rotation.x; + this.__boxhelper.rotation.y = this.__itemModel.rotation.y; + this.__boxhelper.rotation.z = this.__itemModel.rotation.z; + } + + __loadItemModel() { + if (!this.__itemModel.modelURL || this.__itemModel.modelURL === undefined || this.__itemModel.modelURL === 'undefined') { + return; + } + + if (this.__loadedItem) { + this.remove(this.__loadedItem); + } + + this.__gltfLoader.load(this.__itemModel.modelURL, this.__gltfLoadedEvent, this.__gltfLoadingProgressEvent); + } + + __gltfLoaded(gltfModel) { + this.__loadedItem = gltfModel.scene; + // this.__loadedItem.children.forEach((child) => { + // if (child.material) { + // if (child.material.map) { + // child.material.map.encoding = sRGBEncoding; + // } + // } + // }); + this.__initializeChildItem(); + this.dispatchEvent({ type: EVENT_ITEM_LOADED }); + } + + __gltfLoadingProgress(xhr) { + this.dispatchEvent({ type: EVENT_ITEM_LOADING, loaded: xhr.loaded, total: xhr.total, percent: (xhr.loaded / xhr.total) * 100, jsraw: xhr }); + } + + __createParametricItem() { + let parametricData = this.__itemModel.parametricClass; + + // let parametricClass = ParametricFactory.getParametricClass(this.__itemModel.baseParametricType.description); + // parametricData = new(parametricClass.getClass(this.__itemModel.subParametricData.type))(this.__itemModel.subParametricData); + + if (parametricData) { + this.__loadedItem = new Mesh(parametricData.geometry, parametricData.material); + this.__itemModel.parametricClass.addEventListener(EVENT_PARAMETRIC_GEOMETRY_UPATED, this.__parametricGeometryUpdateEvent); + this.__initializeChildItem(); + // let axes = new AxesHelper(1000); + // this.add(axes); + this.dispatchEvent({ type: EVENT_ITEM_LOADED }); + } + } + + dispose() { + this.__itemModel.dispose(); + this.__itemModel.removeEventListener(EVENT_UPDATED, this.__itemUpdatedEvent); + this.parent.remove(this); + } + + snapToPoint(coordinate3d, normal, intersectingPlane) { + this.__itemModel.snapToPoint(coordinate3d, normal, intersectingPlane); + } + + snapToWall(coordinate3d, wall, wallEdge) { + this.__itemModel.snapToWall(coordinate3d, wall, wallEdge); + } + + get selected() { + return this.__selected; + } + + set selected(flag) { + this.__selected = flag; + this.__boxhelper.visible = flag; + } + + set location(coordinate3d) { + this.__itemModel.position = coordinate3d; + } + + get location() { + return this.__itemModel.position.clone(); + } + + get intersectionPlanes() { + return this.__itemModel.intersectionPlanes; + } + + get itemModel() { + return this.__itemModel; + } +} + +/** +export class Physical3DItem { + constructor(itemModel) { + console.log(this); + return new Proxy(new Physical3DItemNonProxy(itemModel), { + get(target, name, receiver) { + console.log('USING REFLECT.GET ', target); + if (!Reflect.has(target, name) && !Reflect.has(target.itemModel, name)) { + return undefined; + } + if (Reflect.has(target, name)) { + return Reflect.get(target, name); + } + if (Reflect.has(target.itemModel, name)) { + return Reflect.get(target.itemModel, name); + } + return undefined; + } + }); + } +} + */ \ No newline at end of file diff --git a/src/blueprint/scripts/viewer3d/Viewer3d.ts b/src/blueprint/scripts/viewer3d/Viewer3d.ts new file mode 100644 index 0000000..17403b6 --- /dev/null +++ b/src/blueprint/scripts/viewer3d/Viewer3d.ts @@ -0,0 +1,463 @@ +import { WebGLRenderer, ImageUtils, PerspectiveCamera, AxesHelper, Scene, RGBFormat, LinearMipmapLinearFilter, sRGBEncoding } from 'three'; +import { PCFSoftShadowMap, WebGLCubeRenderTarget, CubeCamera } from 'three'; +import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'; +import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter'; + +import { EVENT_UPDATED, EVENT_LOADED, EVENT_ITEM_SELECTED, EVENT_ITEM_MOVE, EVENT_ITEM_MOVE_FINISH, EVENT_NO_ITEM_SELECTED, EVENT_WALL_CLICKED, EVENT_ROOM_CLICKED, EVENT_GLTF_READY, EVENT_NEW_ITEM, EVENT_NEW_ROOMS_ADDED, EVENT_MODE_RESET, EVENT_EXTERNAL_FLOORPLAN_LOADED } from '../core/EventSystem.js'; +// import { EVENT_NEW, EVENT_DELETED } from '../core/events.js'; + +import { Skybox } from './skybox.js'; +import { Edge3D } from './edge3d.js'; +import { Floor3D } from './floor3d.js'; +import { Lights3D } from './lights3d.js'; +import { Physical3DItem } from './Physical3DItem.js'; +import { DragRoomItemsControl3D } from './DragRoomItemsControl3D.js'; +import { Configuration, viewBounds } from '../core/configuration.js'; +import { BoundaryView3D } from './BoundaryView3D.js'; + +export class Viewer3D extends Scene { + __physicalRoomItems = []; + __enabled = true; + model; + floorplan; + __options; + + domElement; + + perspectivecamera = null; + camera = null; + __environmentCamera = null; + + cameraNear = 10; + cameraFar = 100000; + + controls = null; + + renderer = null; + controller = null; + + needsUpdate = false; + lastRender = Date.now(); + + heightMargin = null; + widthMargin = null; + elementHeight = null; + elementWidth = null; + pauseRender = false; + + edges3d = []; + floors3d = []; + + __externalEdges3d = []; + __externalFloors3d = []; + + __boundaryRegion3D = null; + __currentItemSelected = null; + + __newItemEvent; + __wallSelectedEvent; + __roomSelectedEvent; + __roomItemSelectedEvent; + __roomItemUnselectedEvent; + __roomItemDraggedEvent; + __roomItemDragFinishEvent; + + __resetDesignEvent; + + constructor(model, element, opts) { + super(); + let options = { + occludedRoofs: false, + occludedWalls: false, + resize: true, + pushHref: false, + spin: true, + spinSpeed: .00002, + clickPan: true, + canMoveFixedItems: false + }; + for (let opt in options) { + if (options.hasOwnProperty(opt) && opts.hasOwnProperty(opt)) { + options[opt] = opts[opt]; + } + } + + // console.log('VIEWER 3D ::: ', options); + + this.__physicalRoomItems = []; + this.__enabled = true; + this.model = model; + this.floorplan = this.model.floorplan; + this.__options = options; + + this.domElement = document.getElementById(element); + + this.perspectivecamera = null; + this.camera = null; + this.__environmentCamera = null; + + this.cameraNear = 10; + this.cameraFar = 100000; + + this.controls = null; + + this.renderer = null; + this.controller = null; + + this.needsUpdate = false; + this.lastRender = Date.now(); + + this.heightMargin = null; + this.widthMargin = null; + this.elementHeight = null; + this.elementWidth = null; + this.pauseRender = false; + + this.edges3d = []; + this.floors3d = []; + + this.__externalEdges3d = []; + this.__externalFloors3d = []; + + this.__boundaryRegion3D = null; + this.__currentItemSelected = null; + + this.needsUpdate = true; + + this.__newItemEvent = this.__addNewItem.bind(this); + this.__wallSelectedEvent = this.__wallSelected.bind(this); + this.__roomSelectedEvent = this.__roomSelected.bind(this); + this.__roomItemSelectedEvent = this.__roomItemSelected.bind(this); + this.__roomItemUnselectedEvent = this.__roomItemUnselected.bind(this); + this.__roomItemDraggedEvent = this.__roomItemDragged.bind(this); + this.__roomItemDragFinishEvent = this.__roomItemDragFinish.bind(this); + + this.__resetDesignEvent = this.__resetDesign.bind(this); + + this.init(); + } + + init() { + let scope = this; + + ImageUtils.crossOrigin = ''; + + scope.camera = new PerspectiveCamera(45, 10, scope.cameraNear, scope.cameraFar); + + let cubeRenderTarget = new WebGLCubeRenderTarget(16, { format: RGBFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); + scope.__environmentCamera = new CubeCamera(1, 100000, cubeRenderTarget); + scope.__environmentCamera.renderTarget.texture.encoding = sRGBEncoding; + + scope.renderer = scope.getARenderer(); + scope.domElement.appendChild(scope.renderer.domElement); + + scope.lights = new Lights3D(this, scope.floorplan); + // scope.dragcontrols = new DragControls(this.physicalRoomItems, scope.camera, scope.renderer.domElement); + scope.dragcontrols = new DragRoomItemsControl3D(this.floorplan.wallPlanesForIntersection, this.floorplan.floorPlanesForIntersection, this.physicalRoomItems, scope.camera, scope.renderer.domElement); + scope.controls = new OrbitControls(scope.camera, scope.domElement); + // scope.controls.autoRotate = this.__options['spin']; + scope.controls.enableDamping = false; + scope.controls.dampingFactor = 0.1; + scope.controls.maxPolarAngle = Math.PI * 0.5; //Math.PI * 0.35;//Math.PI * 1.0; // + scope.controls.maxDistance = Configuration.getNumericValue(viewBounds);// 7500; //2500 + scope.controls.minDistance = 100; //1000; //1000 + scope.controls.screenSpacePanning = true; + + scope.skybox = new Skybox(this, scope.renderer); + scope.camera.position.set(0, 600, 1500); + scope.controls.update(); + + scope.axes = new AxesHelper(500); + + + // handle window resizing + scope.updateWindowSize(); + + if (scope.__options.resize) { + window.addEventListener('resize', () => { scope.updateWindowSize(); }); + window.addEventListener('orientationchange', () => { scope.updateWindowSize(); }); + } + + scope.model.addEventListener(EVENT_NEW_ITEM, scope.__newItemEvent); + scope.model.addEventListener(EVENT_MODE_RESET, scope.__resetDesignEvent); + // scope.model.addEventListener(EVENT_LOADED, (evt) => scope.addRoomItems(evt)); + // scope.floorplan.addEventListener(EVENT_UPDATED, (evt) => scope.addWalls(evt)); + + scope.model.addEventListener(EVENT_LOADED, scope.addRoomItems.bind(scope)); + + // scope.floorplan.addEventListener(EVENT_UPDATED, scope.addRoomsAndWalls.bind(scope)); + scope.floorplan.addEventListener(EVENT_NEW_ROOMS_ADDED, scope.addRoomsAndWalls.bind(scope)); + scope.floorplan.addEventListener(EVENT_EXTERNAL_FLOORPLAN_LOADED, scope.addExternalRoomsAndWalls.bind(scope)); + + this.controls.addEventListener('change', () => { scope.needsUpdate = true; }); + + + scope.dragcontrols.addEventListener(EVENT_ITEM_SELECTED, this.__roomItemSelectedEvent); + scope.dragcontrols.addEventListener(EVENT_ITEM_MOVE, this.__roomItemDraggedEvent); + scope.dragcontrols.addEventListener(EVENT_ITEM_MOVE_FINISH, this.__roomItemDragFinishEvent); + scope.dragcontrols.addEventListener(EVENT_NO_ITEM_SELECTED, this.__roomItemUnselectedEvent); + + scope.dragcontrols.addEventListener(EVENT_WALL_CLICKED, this.__wallSelectedEvent); + scope.dragcontrols.addEventListener(EVENT_ROOM_CLICKED, this.__roomSelectedEvent); + // scope.controls.enabled = false;//To test the drag controls + + //SEt the animation loop + scope.renderer.setAnimationLoop(scope.render.bind(this)); + scope.render(); + } + + __wallSelected(evt) { + this.dispatchEvent(evt); + } + + __roomSelected(evt) { + this.dispatchEvent(evt); + } + + __roomItemSelected(evt) { + if (this.__currentItemSelected) { + this.__currentItemSelected.selected = false; + } + this.__currentItemSelected = evt.item; + this.__currentItemSelected.selected = true; + this.needsUpdate = true; + evt.itemModel = this.__currentItemSelected.itemModel; + this.dispatchEvent(evt); + } + + __roomItemDragged(evt) { + this.controls.enabled = false; + this.needsUpdate = true; + } + + __roomItemDragFinish(evt) { + this.controls.enabled = true; + } + + __roomItemUnselected(evt) { + this.controls.enabled = true; + if (this.__currentItemSelected) { + this.__currentItemSelected.selected = false; + this.__currentItemSelected = null; + this.needsUpdate = true; + } + this.dispatchEvent(evt); + } + + __addNewItem(evt) { + if (!evt.item) { + return; + } + let physicalRoomItem = new Physical3DItem(evt.item, this.__options); + this.add(physicalRoomItem); + this.__physicalRoomItems.push(physicalRoomItem); + this.__roomItemSelected({ type: EVENT_ITEM_SELECTED, item: physicalRoomItem }); + } + + __resetDesign(evt) { + this.addRoomItems(); + this.addRoomsAndWalls(); + this.addExternalRoomsAndWalls(); + } + + addRoomItems(evt) { + let i = 0; + for (; i < this.__physicalRoomItems.length; i++) { + this.__physicalRoomItems[i].dispose(); + this.remove(this.__physicalRoomItems[i]); + } + this.__physicalRoomItems.length = 0; //A cool way to clear an array in javascript + let roomItems = this.model.roomItems; + for (i = 0; i < roomItems.length; i++) { + let physicalRoomItem = new Physical3DItem(roomItems[i], this.__options); + this.add(physicalRoomItem); + this.__physicalRoomItems.push(physicalRoomItem); + } + + } + + + __drawBoundary() { + if (this.__boundaryRegion3D) { + this.__boundaryRegion3D.removeFromScene(); + } + + if (this.floorplan.boundary) { + if (this.floorplan.boundary.isValid) { + this.__boundaryRegion3D = new BoundaryView3D(this, this.floorplan, this.__options, this.floorplan.boundary); + } + } + } + + addRoomsAndWalls() { + let scope = this; + let i = 0; + + // clear scene + scope.floors3d.forEach((floor) => { + floor.destroy(); + floor = null; + }); + + scope.edges3d.forEach((edge3d) => { + edge3d.remove(); + edge3d = null; + }); + + scope.edges3d = []; + scope.floors3d = []; + let wallEdges = scope.floorplan.wallEdges(); + let rooms = scope.floorplan.getRooms(); + + this.__drawBoundary(); + + // draw floors + for (i = 0; i < rooms.length; i++) { + var threeFloor = new Floor3D(scope, rooms[i], scope.controls, this.__options); + scope.floors3d.push(threeFloor); + } + + for (i = 0; i < wallEdges.length; i++) { + let edge3d = new Edge3D(scope, wallEdges[i], scope.controls, this.__options); + scope.edges3d.push(edge3d); + } + + scope.shouldRender = true; + + let floorplanCenter = scope.floorplan.getDimensions(true); + scope.controls.target = floorplanCenter.clone(); + scope.camera.position.set(floorplanCenter.x, 300, floorplanCenter.z * 5); + scope.controls.update(); + } + + + addExternalRoomsAndWalls() { + // console.trace('ADD EXTERNAL ROOMS AND WALLS'); + let scope = this; + let i = 0; + + // clear scene + scope.__externalFloors3d.forEach((floor) => { + floor.destroy(); + floor = null; + }); + + scope.__externalEdges3d.forEach((edge3d) => { + edge3d.remove(); + edge3d = null; + }); + + scope.__externalEdges3d = []; + scope.__externalFloors3d = []; + + let wallEdges = scope.floorplan.externalWallEdges(); + let rooms = scope.floorplan.externalRooms; + + this.__drawBoundary(); + + // draw floors + for (i = 0; i < rooms.length; i++) { + var threeFloor = new Floor3D(scope, rooms[i], scope.controls, this.__options); + scope.__externalFloors3d.push(threeFloor); + } + + for (i = 0; i < wallEdges.length; i++) { + let edge3d = new Edge3D(scope, wallEdges[i], scope.controls, this.__options); + scope.__externalEdges3d.push(edge3d); + } + + scope.shouldRender = true; + + let floorplanCenter = scope.floorplan.getDimensions(true); + scope.controls.target = floorplanCenter.clone(); + scope.camera.position.set(floorplanCenter.x, 300, floorplanCenter.z * 5); + scope.controls.update(); + } + + getARenderer() { + var renderer = new WebGLRenderer({ antialias: true, alpha: true }); + + // scope.renderer.autoClear = false; + renderer.shadowMap.enabled = false; + renderer.shadowMapSoft = true; + renderer.shadowMap.type = PCFSoftShadowMap; + renderer.setClearColor(0xFFFFFF, 1); + renderer.localClippingEnabled = false; + // renderer.gammaOutput = false; + renderer.outputEncoding = sRGBEncoding; + renderer.setPixelRatio(window.devicePixelRatio); + // renderer.sortObjects = false; + return renderer; + } + + updateWindowSize() { + let heightMargin = this.domElement.offsetTop; + let widthMargin = this.domElement.offsetLeft; + let elementWidth = (this.__options.resize) ? window.innerWidth - widthMargin : this.domElement.clientWidth; + let elementHeight = (this.__options.resize) ? window.innerHeight - heightMargin : this.domElement.clientHeight; + + this.camera.aspect = elementWidth / elementHeight; + this.camera.updateProjectionMatrix(); + this.renderer.setSize(elementWidth, elementHeight); + this.needsUpdate = true; + } + + render() { + if (!this.enabled) { + return; + } + let scope = this; + // scope.controls.update(); + if (!scope.needsUpdate) { + return; + } + scope.renderer.render(scope, scope.camera); + scope.lastRender = Date.now(); + this.needsUpdate = false; + } + + exportSceneAsGTLF() { + let scope = this; + let exporter = new GLTFExporter(); + exporter.parse(this, function (gltf) { + scope.dispatchEvent({ type: EVENT_GLTF_READY, gltf: JSON.stringify(gltf) }); + }); + } + + forceRender() { + let scope = this; + scope.renderer.render(scope, scope.camera); + scope.lastRender = Date.now(); + } + + addRoomplanListener(type, listener) { + this.addEventListener(type, listener); + } + + removeRoomplanListener(type, listener) { + this.removeEventListener(type, listener); + } + + get environmentCamera() { + return this.__environmentCamera; + } + + get physicalRoomItems() { + return this.__physicalRoomItems; + } + + get enabled() { + return this.__enabled; + } + + set enabled(flag) { + this.__enabled = flag; + this.controls.enabled = flag; + if (!flag) { + this.dragcontrols.deactivate(); + } else { + this.dragcontrols.activate(); + } + } + +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer3d/edge3d.js b/src/blueprint/scripts/viewer3d/edge3d.js new file mode 100644 index 0000000..ec434ee --- /dev/null +++ b/src/blueprint/scripts/viewer3d/edge3d.js @@ -0,0 +1,419 @@ +import { EventDispatcher, Vector2, Vector3, MeshBasicMaterial, FrontSide, DoubleSide, BackSide, Shape, Path, ShapeGeometry, Mesh, Geometry, Face3, Box3 } from 'three'; +// import { SubdivisionModifier } from 'three/examples/jsm/modifiers/SubdivisionModifier'; +import { Utils } from '../core/utils.js'; +import { EVENT_REDRAW, EVENT_UPDATE_TEXTURES, EVENT_DELETED, EVENT_MODIFY_TEXTURE_ATTRIBUTE } from '../core/events.js'; +import { WallMaterial3D } from '../materials/WallMaterial3D.js'; +import { TEXTURE_PROPERTY_COLOR } from '../core/constants.js'; + +export class Edge3D extends EventDispatcher { + constructor(scene, edge, controls, opts) { + super(); + this.name = 'edge'; + this.scene = scene; + this.edge = edge; + this.controls = controls; + + let options = { occludedWalls: false }; + for (let opt in options) { + if (options.hasOwnProperty(opt) && opts.hasOwnProperty(opt)) { + options[opt] = opts[opt]; + } + } + + this.__options = options; + + + this.wall = edge.wall; + this.front = edge.front; + + this.planes = []; + this.phantomPlanes = []; + this.basePlanes = []; // always visible + + this.__wallPlaneMesh = null; + + //Debug wall intersection planes. Edge.plane is the plane used for intersection + // this.phantomPlanes.push(this.edge.plane);//Enable this line to see the wall planes + + this.fillerColor = 0x000000; //0xdddddd; + this.sideColor = 0x333333; //0xcccccc; + this.baseColor = 0x666666; //0xdddddd; + this.visible = false; + + this.redrawevent = this.__redraw.bind(this); //() => { scope.redraw(); }; + this.visibilityevent = this.__visibility.bind(this); //() => { scope.updateVisibility(); }; + this.showallevent = this.__showAll.bind(this); //() => { scope.showAll(); }; + this.__edgeDeletedEvent = this.__edgeDeleted.bind(this); + + + this.__updateTexturePackEvent = this.__updateTexturePack.bind(this); + + this.visibilityfactor = true; + this.__wallMaterial3D = null; + + this.__updateTexturePack({ type: EVENT_UPDATE_TEXTURES }); + + this.init(); + } + + __updateTexturePack(evt) { + if (evt.type === EVENT_UPDATE_TEXTURES) { + let height = Math.max(this.wall.startElevation, this.wall.endElevation); + let width = this.edge.interiorDistance(); + let texturePack = this.edge.getTexture(); + + if (!this.__wallMaterial3D) { + let side = (this.wall.isLocked || this.__options.occludedWalls) ? DoubleSide : FrontSide; + if (!texturePack.color) { + texturePack.color = '#FF0000'; + } + this.__wallMaterial3D = new WallMaterial3D({ color: texturePack.color, side: side, transparent: true, wireframe: false }, texturePack, this.scene); + } + this.__wallMaterial3D.textureMapPack = texturePack; + this.__wallMaterial3D.dimensions = new Vector2(width, height); + // this.__wallMaterial3D.updateDimensions(width, height); + this.redraw(); + } + else if(evt.type === EVENT_MODIFY_TEXTURE_ATTRIBUTE){ + if(this.__wallMaterial3D){ + let attribute = evt.attribute; + let value = evt.value; + if(attribute === TEXTURE_PROPERTY_COLOR){ + this.__wallMaterial3D.textureColor = value; + } + } + } + this.scene.needsUpdate = true; + } + + __edgeDeleted(evt) { + this.remove(); + } + + __redraw() { + this.redraw(); + } + + __visibility() { + this.updateVisibility(); + } + + __showAll() { + this.__showAll(); + } + + init() { + this.edge.addEventListener(EVENT_DELETED, this.__edgeDeletedEvent); + + this.edge.addEventListener(EVENT_MODIFY_TEXTURE_ATTRIBUTE, this.__updateTexturePackEvent); + this.edge.addEventListener(EVENT_UPDATE_TEXTURES, this.__updateTexturePackEvent); + + this.edge.addEventListener(EVENT_REDRAW, this.redrawevent); + this.controls.addEventListener('change', this.visibilityevent); + + this.updateTexture(); + this.updatePlanes(); + this.addToScene(); + } + + redraw() { + this.removeFromScene(); + this.updateTexture(); + this.updatePlanes(); + this.addToScene(); + } + + removeFromScene() { + // if (this.wall.isLocked) { + // console.trace('REMOVE MYSELF FROM SCENE'); + // } + let scope = this; + scope.planes.forEach((plane) => { + scope.scene.remove(plane); + }); + scope.basePlanes.forEach((plane) => { + scope.scene.remove(plane); + }); + scope.phantomPlanes.forEach((plane) => { + scope.scene.remove(plane); + }); + scope.planes = []; + scope.basePlanes = []; + } + + remove() { + this.edge.removeEventListener(EVENT_DELETED, this.__edgeDeletedEvent); + this.edge.removeEventListener(EVENT_UPDATE_TEXTURES, this.__updateTexturePackEvent); + this.edge.removeEventListener(EVENT_REDRAW, this.redrawevent); + this.controls.removeEventListener('change', this.visibilityevent); + this.removeFromScene(); + } + + addToScene() { + let scope = this; + this.planes.forEach((plane) => { + scope.scene.add(plane); + }); + this.basePlanes.forEach((plane) => { + scope.scene.add(plane); + }); + this.phantomPlanes.forEach((plane) => { + scope.scene.add(plane); + }); + this.updateVisibility(); + } + + showAll() { + let scope = this; + scope.visible = true; + scope.planes.forEach((plane) => { + plane.material.transparent = !scope.visible; + plane.material.opacity = 1.0; + plane.visible = scope.visible; + }); + + this.wall.items.forEach((item) => { + item.updateEdgeVisibility(scope.visible, scope.front); + }); + this.wall.onItems.forEach((item) => { + item.updateEdgeVisibility(scope.visible, scope.front); + }); + } + + switchWireframe(flag) { + let scope = this; + scope.visible = true; + scope.planes.forEach((plane) => { + plane.material.wireframe = flag; + }); + } + + updateVisibility() { + if (this.wall.isLocked || this.__options.occludedWalls) { + return; + } + let scope = this; + // finds the normal from the specified edge + let start = scope.edge.interiorStart(); + let end = scope.edge.interiorEnd(); + let x = end.x - start.x; + let y = end.y - start.y; + // rotate 90 degrees CCW + let normal = new Vector3(-y, 0, x); + normal.normalize(); + + // setup camera: scope.controls.object refers to the camera of the scene + let position = scope.controls.object.position.clone(); + let focus = new Vector3((start.x + end.x) / 2.0, 0, (start.y + end.y) / 2.0); + let direction = position.sub(focus).normalize(); + + // find dot + let dot = normal.dot(direction); + // update visible + scope.visible = (dot >= 0); + // show or hide planes + scope.planes.forEach((plane) => { + // plane.material.transparent = !scope.visible; + // plane.material.opacity = (scope.visible) ? 1.0 : 0.1; + plane.visible = scope.visible; + }); + scope.updateObjectVisibility(); + } + + updateObjectVisibility() { + let scope = this; + + function itemVisibility(item, visibility) { + if (scope.front) { + item.frontVisible = visibility; + } else { + item.backVisible = visibility; + } + return (item.frontVisible || item.backVisible); + } + this.wall.inWallItems.forEach((item) => { + let visibility = itemVisibility(item, scope.visible); + item.visible = visibility; + }); + this.wall.onWallItems.forEach((item) => { + let visibility = itemVisibility(item, scope.visible); + item.visible = visibility; + }); + } + + updateTexture(callback) { + if (this.edge === null) { + return; + } + let height = Math.max(this.wall.startElevation, this.wall.endElevation); + let width = this.edge.interiorDistance(); + this.__wallMaterial3D.dimensions = new Vector2(width, height); + // this.__wallMaterial3D.updateDimensions(width, height); + } + + updatePlanes() { + let extStartCorner = this.edge.getStart(); + let extEndCorner = this.edge.getEnd(); + + if (extStartCorner === null || extEndCorner === null) { + return; + } + + let interiorStart = this.edge.interiorStart(); + let interiorEnd = this.edge.interiorEnd(); + let exteriorStart = this.edge.exteriorStart(); + let exteriorEnd = this.edge.exteriorEnd(); + + // exterior plane for real exterior walls + //If the walls have corners that have more than one room attached + //Then there is no need to construct an exterior wall + if (this.edge.wall.start.getAttachedRooms().length < 2 || this.edge.wall.end.getAttachedRooms().length < 2) { + // console.log('CONSTRUCT EXTERIOR WALLS'); + let exteriorWall = this.makeWall(exteriorStart, exteriorEnd, this.edge.exteriorTransform, this.edge.invExteriorTransform, this.__wallMaterial3D); + this.planes.push(exteriorWall); + } + // interior plane + // this.planes.push(this.makeWall(interiorStart, interiorEnd, this.edge.interiorTransform, this.edge.invInteriorTransform, wallMaterial)); + this.__wallPlaneMesh = this.makeWall(interiorStart, interiorEnd, this.edge.interiorTransform, this.edge.invInteriorTransform, this.__wallMaterial3D); + this.planes.push(this.__wallPlaneMesh); + // bottom + // put into basePlanes since this is always visible + this.basePlanes.push(this.buildFillerUniformHeight(this.edge, 0, BackSide, this.baseColor)); + // if (this.edge.wall.start.getAttachedRooms().length < 2 || this.edge.wall.end.getAttachedRooms().length < 2) { + this.planes.push(this.buildFillerVaryingHeights(this.edge, DoubleSide, this.fillerColor)); + // } + + // sides + this.planes.push(this.buildSideFillter(this.edge.interiorStart(), this.edge.exteriorStart(), extStartCorner.elevation, this.sideColor)); + this.planes.push(this.buildSideFillter(this.edge.interiorEnd(), this.edge.exteriorEnd(), extEndCorner.elevation, this.sideColor)); + // this.planes.push(this.buildSideFillter(this.edge.interiorStart(), this.edge.exteriorStart(), this.wall.startElevation, this.sideColor)); + // this.planes.push(this.buildSideFillter(this.edge.interiorEnd(), this.edge.exteriorEnd(), extEndCorner.endElevation, this.sideColor)); + } + + // start, end have x and y attributes (i.e. corners) + makeWall(start, end, transform, invTransform, material) { + let v1 = this.toVec3(start); + let v2 = this.toVec3(end); + let v3 = v2.clone(); + let v4 = v1.clone(); + v3.y = this.edge.getEnd().elevation; + v4.y = this.edge.getStart().elevation; + + // v3.y = this.wall.getClosestCorner(end).elevation; + // v4.y = this.wall.getClosestCorner(start).elevation; + + let points = [v1.clone(), v2.clone(), v3.clone(), v4.clone()]; + points.forEach((p) => { + p.applyMatrix4(transform); + }); + + let spoints = [new Vector2(points[0].x, points[0].y), new Vector2(points[1].x, points[1].y), new Vector2(points[2].x, points[2].y), new Vector2(points[3].x, points[3].y)]; + let shape = new Shape(spoints); + + // add holes for each wall item + for (let i = 0; i < this.wall.inWallItems.length; i++) { + let item = this.wall.inWallItems[i]; + let pos = item.position.clone(); + let halfSize = item.halfSize.clone(); + let min = halfSize.clone().negate(); + let max = halfSize.clone(); + let holePoints = null; + + pos.applyMatrix4(transform); + min.add(pos); + max.add(pos); + holePoints = [new Vector2(min.x, min.y), new Vector2(max.x, min.y), new Vector2(max.x, max.y), new Vector2(min.x, max.y)]; + shape.holes.push(new Path(holePoints)); + } + + let geometry = new ShapeGeometry(shape); + geometry.vertices.forEach((v) => { + v.applyMatrix4(invTransform); + }); + + // make UVs + let totalDistance = this.edge.interiorDistance(); //Utils.distance(new Vector2(v1.x, v1.z), new Vector2(v2.x, v2.z)); + + let height = Math.max(this.wall.startElevation, this.wall.endElevation); + geometry.faceVertexUvs[0] = []; + + geometry.faces.forEach((face) => { + let vertA = geometry.vertices[face.a]; + let vertB = geometry.vertices[face.b]; + let vertC = geometry.vertices[face.c]; + geometry.faceVertexUvs[0].push([vertexToUv(vertA), vertexToUv(vertB), vertexToUv(vertC)]); + }); + + geometry.faceVertexUvs[1] = geometry.faceVertexUvs[0]; + geometry.computeFaceNormals(); + geometry.computeVertexNormals(); + + function vertexToUv(vertex) { + let x = Utils.distance(new Vector2(v1.x, v1.z), new Vector2(vertex.x, vertex.z)) / totalDistance; + let y = vertex.y / height; + return new Vector2(x, y); + } + + // let subdivider = new SubdivisionModifier(3, true); + // geometry = subdivider.modify(geometry); + + + let mesh = new Mesh(geometry, material); + mesh.name = 'wall'; + return mesh; + } + + buildSideFillter(p1, p2, height, color) { + let points = [this.toVec3(p1), this.toVec3(p2), this.toVec3(p2, height), this.toVec3(p1, height)]; + + let geometry = new Geometry(); + points.forEach((p) => { + geometry.vertices.push(p); + }); + geometry.faces.push(new Face3(0, 1, 2)); + geometry.faces.push(new Face3(0, 2, 3)); + + let fillerMaterial = new MeshBasicMaterial({ color: color, side: DoubleSide }); + let filler = new Mesh(geometry, fillerMaterial); + return filler; + } + + buildFillerVaryingHeights(edge, side, color) { + let a = this.toVec3(edge.exteriorStart(), this.edge.getStart().elevation); + let b = this.toVec3(edge.exteriorEnd(), this.edge.getEnd().elevation); + let c = this.toVec3(edge.interiorEnd(), this.edge.getEnd().elevation); + let d = this.toVec3(edge.interiorStart(), this.edge.getStart().elevation); + + + let fillerMaterial = new MeshBasicMaterial({ color: color, side: side }); + + let geometry = new Geometry(); + geometry.vertices.push(a, b, c, d); + geometry.faces.push(new Face3(0, 1, 2)); + geometry.faces.push(new Face3(0, 2, 3)); + + let filler = new Mesh(geometry, fillerMaterial); + return filler; + } + + buildFillerUniformHeight(edge, height, side, color) { + let points = [this.toVec2(edge.exteriorStart()), this.toVec2(edge.exteriorEnd()), this.toVec2(edge.interiorEnd()), this.toVec2(edge.interiorStart())]; + + let fillerMaterial = new MeshBasicMaterial({ color: color, side: side }); + let shape = new Shape(points); + let geometry = new ShapeGeometry(shape); + let filler = new Mesh(geometry, fillerMaterial); + filler.rotation.set(Math.PI / 2, 0, 0); + filler.position.y = height; + return filler; + } + + toVec2(pos) { + return new Vector2(pos.x, pos.y); + } + + toVec3(pos, height) { + height = height || 0; + return new Vector3(pos.x, height, pos.y); + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer3d/floor3d.js b/src/blueprint/scripts/viewer3d/floor3d.js new file mode 100644 index 0000000..d477589 --- /dev/null +++ b/src/blueprint/scripts/viewer3d/floor3d.js @@ -0,0 +1,230 @@ +import { EventDispatcher, TextureLoader, RepeatWrapping, MeshBasicMaterial, FrontSide, DoubleSide, Vector2, Vector3, Face3, Geometry, Shape, ShapeGeometry, Mesh } from 'three'; +import { EVENT_CHANGED, EVENT_UPDATE_TEXTURES, EVENT_ROOM_ATTRIBUTES_CHANGED, EVENT_MODIFY_TEXTURE_ATTRIBUTE } from '../core/events.js'; +import { Configuration, configWallHeight } from '../core/configuration.js'; +import { BufferGeometry } from 'three/build/three.module'; +import { FloorMaterial3D } from '../materials/FloorMaterial3D.js'; +import { TEXTURE_PROPERTY_COLOR } from '../core/constants.js'; + +export class Floor3D extends EventDispatcher { + constructor(scene, room, controls, opts) { + super(); + + let options = { occludedRoofs: false }; + for (let opt in options) { + if (options.hasOwnProperty(opt) && opts.hasOwnProperty(opt)) { + options[opt] = opts[opt]; + } + } + this.__options = options; + + this.scene = scene; + this.room = room; + this.controls = controls; + this.floorPlane = null; + this.roofPlane = null; + this.changedevent = this.redraw.bind(this); + this.__materialChangedEvent = this.__updateTexturePack.bind(this); + this.__updateReflectionsEvent = this.__updateReflections.bind(this); + + this.__floorMaterial3D = null; + + this.room.addEventListener(EVENT_ROOM_ATTRIBUTES_CHANGED, this.changedevent); + this.room.addEventListener(EVENT_CHANGED, this.changedevent); + + this.room.addEventListener(EVENT_UPDATE_TEXTURES, this.__materialChangedEvent); + this.room.addEventListener(EVENT_MODIFY_TEXTURE_ATTRIBUTE, this.__materialChangedEvent); + + this.controls.addEventListener('change', this.__updateReflectionsEvent); + this.init(); + } + + __updateReflections() { + if (this.__floorMaterial3D && this.__floorMaterial3D.isReflective && this.scene.enabled) { + let floorSize = this.room.floorRectangleSize.clone(); + this.floorPlane.visible = false; + this.__floorMaterial3D.envMapCamera.clear(this.scene.renderer); + this.__floorMaterial3D.envMapCamera.position.set(floorSize.x, 0, floorSize.y); + this.__floorMaterial3D.envMapCamera.update(this.scene.renderer, this.scene); + this.floorPlane.visible = true; + this.__floorMaterial3D.needsUpdate = true; + } + } + + __updateTexturePack(evt) { + if (evt.type === EVENT_UPDATE_TEXTURES) { + let floorSize = this.room.floorRectangleSize.clone(); + let texturePack = this.room.getTexture(); + if (!this.__floorMaterial3D) { + this.__floorMaterial3D = new FloorMaterial3D({ color: texturePack.color, side: DoubleSide }, texturePack, this.scene); + } + this.__floorMaterial3D.textureMapPack = texturePack; + // this.__floorMaterial3D.updateDimensions(floorSize.x, floorSize.y); + this.__floorMaterial3D.dimensions = floorSize; + } + else if(evt.type === EVENT_MODIFY_TEXTURE_ATTRIBUTE){ + if(this.__floorMaterial3D){ + let attribute = evt.attribute; + let value = evt.value; + if(attribute === TEXTURE_PROPERTY_COLOR){ + this.__floorMaterial3D.textureColor = value; + } + } + } + this.scene.needsUpdate = true; + } + + switchWireframe(flag) { + this.floorPlane.visible = !flag; + this.roofPlane.visible = !flag; + } + + init() { + this.__updateTexturePack({type: EVENT_UPDATE_TEXTURES}); + this.redraw(); + } + + redraw() { + this.removeFromScene(); + this.floorPlane = this.buildFloor(); + this.roofPlane = this.buildRoofVaryingHeight(); + this.addToScene(); + } + + buildFloor() { + let points = []; + this.room.interiorCorners.forEach((corner) => { + points.push(new Vector2(corner.x, corner.y)); + }); + let floorSize = this.room.floorRectangleSize.clone(); + let shape = new Shape(points); + let geometry = new ShapeGeometry(shape); + + geometry.faceVertexUvs[0] = []; + + geometry.faces.forEach((face) => { + let vertA = geometry.vertices[face.a]; + let vertB = geometry.vertices[face.b]; + let vertC = geometry.vertices[face.c]; + geometry.faceVertexUvs[0].push([vertexToUv(vertA), vertexToUv(vertB), vertexToUv(vertC)]); + }); + + function vertexToUv(vertex) { + let x = vertex.x / floorSize.x; + let y = vertex.y / floorSize.y; + return new Vector2(x, y); + } + + geometry.faceVertexUvs[1] = geometry.faceVertexUvs[0]; + geometry.computeFaceNormals(); + geometry.computeVertexNormals(); + geometry.uvsNeedUpdate = true; + let useGeometry = new BufferGeometry().fromGeometry(geometry); + // this.__floorMaterial3D.updateDimensions(floorSize.x, floorSize.y); + + this.__floorMaterial3D.dimensions = floorSize; + if (this.__floorMaterial3D.envMapCamera) { + this.__floorMaterial3D.envMapCamera.position.copy(new Vector3(floorSize.x, 0, floorSize.y)); + } + + let floor = new Mesh(useGeometry, this.__floorMaterial3D); + floor.rotation.set(Math.PI * 0.5, 0, 0); + return floor; + } + + buildRoofVaryingHeight() { + let side = (this.room.isLocked || this.__options.occludedRoofs) ? DoubleSide : FrontSide; + // setup texture + let roofMaterial = new MeshBasicMaterial({ side: side, color: 0xe5e5e5 }); + + let spoints = []; + let shape = null; + let shapeGeometry = null; + let roof = null; + + // this.room.interiorCorners.forEach((corner) => { + // spoints.push(new Vector2(corner.x, corner.y)); + // }); + + this.room.corners.forEach((corner) => { + spoints.push(new Vector2(corner.x, corner.y)); + }); + + shape = new Shape(spoints); + shapeGeometry = new ShapeGeometry(shape); + let cornerIndex = shapeGeometry.vertices.length - 1; + // console.log('==================================='); + // console.log('COUNTS ::: ', this.room.corners.length, shapeGeometry.vertices.length); + for (let i = 0; i < shapeGeometry.vertices.length; i++) { + // let index = (this.room.corners.length-i)-1; + let corner = this.room.corners[cornerIndex]; + let vertex = shapeGeometry.vertices[i]; + vertex.z = vertex.y; + vertex.y = corner.elevation + 0.3; + cornerIndex--; + // console.log('CORNER LOCATION ::: ', corner.location); + // console.log('VERTEX ::: ', vertex); + } + // console.log('==================================='); + roof = new Mesh(shapeGeometry, roofMaterial); + + + // let geometry = new Geometry(); + + // this.room.corners.forEach((corner) => { + // let vertex = new Vector3(corner.x, corner.elevation, corner.y); + // geometry.vertices.push(vertex); + // }); + // for (let i = 2; i < geometry.vertices.length; i++) { + // let face = new Face3(0, i - 1, i); + // geometry.faces.push(face); + // } + // let roof = new Mesh(geometry, roofMaterial); + // roof.rotation.set(Math.PI / 2, 0, 0); + // roof.position.y = Configuration.getNumericValue(configWallHeight); + return roof; + } + + + buildRoofUniformHeight() { + // setup texture + var roofMaterial = new MeshBasicMaterial({ side: FrontSide, color: 0xe5e5e5 }); + var points = []; + this.room.interiorCorners.forEach((corner) => { + points.push(new Vector2(corner.x, corner.y)); + }); + var shape = new Shape(points); + var geometry = new ShapeGeometry(shape); + var roof = new Mesh(geometry, roofMaterial); + roof.rotation.set(Math.PI / 2, 0, 0); + roof.position.y = Configuration.getNumericValue(configWallHeight); + return roof; + } + + addToScene() { + this.scene.add(this.floorPlane); + this.scene.add(this.roofPlane); + //scene.add(roofPlane); + // hack so we can do intersect testing + // this.scene.add(this.room.floorPlane); + // this.scene.add(this.room.roofPlane); + } + + removeFromScene() { + this.scene.remove(this.floorPlane); + this.scene.remove(this.roofPlane); + // this.scene.remove(this.room.floorPlane); + // this.scene.remove(this.room.roofPlane); + } + + showRoof(flag) { + console.log(flag); + // this.roofPlane.visible = flag; + } + + destroy() { + this.room.removeEventListener(EVENT_CHANGED, this.changedevent); + this.room.removeEventListener(EVENT_UPDATE_TEXTURES, this.__materialChangedEvent); + this.controls.removeEventListener('change', this.__updateReflectionsEvent); + this.removeFromScene(); + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer3d/lights3d.js b/src/blueprint/scripts/viewer3d/lights3d.js new file mode 100644 index 0000000..4291e43 --- /dev/null +++ b/src/blueprint/scripts/viewer3d/lights3d.js @@ -0,0 +1,71 @@ +import { EventDispatcher, HemisphereLight, DirectionalLight, AmbientLight, Vector3 } from 'three'; +import { EVENT_UPDATED } from '../core/events.js'; + +export class Lights3D extends EventDispatcher { + constructor(scene, floorplan) { + super(); + this.scene = scene; + this.floorplan = floorplan; + this.tol = 1; + this.height = 1000; // TODO: share with Blueprint.Wall + this.dirLight = null; + this.updatedroomsevent = () => { this.updateShadowCamera(); }; + this.init(); + } + + getDirLight() { + return this.dirLight; + } + + init() { + var light = new HemisphereLight(0xffffff, 0x888888, 0.75); + light.position.set(0, this.height, 0); + + this.dirLight = new DirectionalLight(0xffffff, 1.5); + // this.dirLight.color.setHSL(1, 1, 0.1); + + this.ambLight = new AmbientLight(0x404040); // soft white light + this.ambLight.intensity = 0.5; + + this.dirLight.castShadow = true; + + this.dirLight.shadow.mapSize.width = 1024; + this.dirLight.shadow.mapSize.height = 1024; + + this.dirLight.shadow.camera.far = this.height + this.tol; + this.dirLight.shadow.bias = -0.0001; + this.dirLight.visible = true; + this.dirLight.intensity = 0.15; + + this.scene.add(light); + // this.scene.add(this.dirLight); + // this.scene.add(this.dirLight.target); + this.scene.add(this.ambLight); + + // this.floorplan.addEventListener(EVENT_UPDATED, this.updatedroomsevent); + + } + + updateShadowCamera() { + var size = this.floorplan.getSize(); + var d = (Math.max(size.z, size.x) + this.tol) / 2.0; + var center = this.floorplan.getCenter(); + var pos = new Vector3(center.x, this.height, center.z); + this.dirLight.position.copy(pos); + this.dirLight.target.position.copy(center); + //dirLight.updateMatrix(); + //dirLight.updateWorldMatrix() + this.dirLight.shadow.camera.left = -d; + this.dirLight.shadow.camera.right = d; + this.dirLight.shadow.camera.top = d; + this.dirLight.shadow.camera.bottom = -d; + // this is necessary for updates + if (this.dirLight.shadowCamera) { + this.dirLight.shadow.camera.left = this.dirLight.shadowCameraLeft; + this.dirLight.shadow.camera.right = this.dirLight.shadowCameraRight; + this.dirLight.shadow.camera.top = this.dirLight.shadowCameraTop; + this.dirLight.shadow.camera.bottom = this.dirLight.shadowCameraBottom; + this.dirLight.shadowCamera.updateProjectionMatrix(); + } + } +} \ No newline at end of file diff --git a/src/blueprint/scripts/viewer3d/skybox.js b/src/blueprint/scripts/viewer3d/skybox.js new file mode 100644 index 0000000..446c22e --- /dev/null +++ b/src/blueprint/scripts/viewer3d/skybox.js @@ -0,0 +1,112 @@ +import { EventDispatcher, SphereGeometry, ShaderMaterial, Mesh, TextureLoader, Color, DoubleSide } from 'three'; +import { AxesHelper } from 'three'; +import { GridHelper } from 'three'; +import { Configuration, gridSpacing, viewBounds } from '../core/configuration'; +import { EVENT_CHANGED } from '../core/events'; + +export class Skybox extends EventDispatcher { + constructor(scene, renderer) { + super(); + + this.defaultEnvironment = 'rooms/textures/envs/Garden.png'; + this.useEnvironment = false; + this.topColor = 0x92b2ce; //0xe9e9e9; //0xf9f9f9;//0x565e63 + this.bottomColor = 0xffffff; //0xD8ECF9 + this.verticalOffset = 400; + this.exponent = 0.5; + + var uniforms = { topColor: { type: 'c', value: new Color(this.topColor) }, bottomColor: { type: 'c', value: new Color(this.bottomColor) }, offset: { type: 'f', value: this.verticalOffset }, exponent: { type: 'f', value: this.exponent } }; + + this.scene = scene; + this.renderer = renderer; + + this.sphereRadius = 4000; + this.__gridSize = Configuration.getNumericValue(viewBounds)*5.0;//10000; + this.widthSegments = 32; + this.heightSegments = 15; + this.sky = null; + + this.__fineGridFloor = null; + this.__coarseGridFloor = null; + + this.plainVertexShader = ['varying vec3 vWorldPosition;', 'void main() {', 'vec4 worldPosition = modelMatrix * vec4( position, 1.0 );', 'vWorldPosition = worldPosition.xyz;', 'gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0 );', '}'].join('\n'); + this.plainFragmentShader = ['uniform vec3 bottomColor;', 'uniform vec3 topColor;', 'uniform float offset;', 'uniform float exponent;', 'varying vec3 vWorldPosition;', 'void main() {', ' float h = normalize( vWorldPosition + offset ).y;', ' gl_FragColor = vec4( mix( bottomColor, topColor, max( pow( max(h, 0.0 ), exponent ), 0.0 ) ), 1.0 );', '}'].join('\n'); + + this.vertexShader = ['varying vec2 vUV;', 'void main() {', ' vUV=uv;', ' vec4 pos = vec4(position, 1.0);', ' gl_Position = projectionMatrix * modelViewMatrix * pos;', '}'].join('\n'); + this.fragmentShader = ['uniform sampler2D texture;', 'varying vec2 vUV;', 'void main() { ', 'vec4 sample = texture2D(texture, vUV);', 'gl_FragColor = vec4(sample.xyz, sample.w);', '}'].join('\n'); + + this.texture = new TextureLoader(); + this.plainSkyMat = new ShaderMaterial({ vertexShader: this.plainVertexShader, fragmentShader: this.plainFragmentShader, uniforms: uniforms, side: DoubleSide }); + this.plainSkyMat.name = 'PlainSkyMaterial'; + this.skyMat = undefined; + + this.skyGeo = new SphereGeometry(this.sphereRadius, this.widthSegments, this.heightSegments); + this.sky = new Mesh(this.skyGeo, this.skyMat); + // this.sky.position.x += this.sphereRadius*0.5; + + let axesHelper = new AxesHelper(1000); + this.scene.add(axesHelper); + // axesHelper.visible = false; + + this.__createGridFloors(); + this.init(); + Configuration.getInstance().addEventListener(EVENT_CHANGED, this.__updateGrid.bind(this)); + } + + __createGridFloors(){ + if(this.__fineGridFloor){ + this.scene.remove(this.__fineGridFloor); + this.scene.remove(this.__coarseGridFloor); + } + this.__fineGridFloor = new GridHelper(this.__gridSize, Math.round(this.__gridSize / Configuration.getNumericValue(gridSpacing)), 0x0F0F0F, 0x808080); + this.__coarseGridFloor = new GridHelper(this.__gridSize, Math.round(this.__gridSize / (Configuration.getNumericValue(gridSpacing)*5)), 0x0F0F0F, 0x303030); + + this.__fineGridFloor.position.y = this.__coarseGridFloor.position.y = -10; + + this.scene.add(this.__fineGridFloor); + this.scene.add(this.__coarseGridFloor); + + this.scene.needsUpdate = true; + } + + + __updateGrid(evt) { + this.__gridSize = Configuration.getNumericValue(viewBounds)*5.0;//10000; + this.__createGridFloors(); + } + + toggleEnvironment(flag) { + this.useEnvironment = flag; + if (!flag) { + this.__fineGridFloor.visible = true; + this.sky.material = this.plainSkyMat; + this.sky.material.needsUpdate = true; + } else { + this.__fineGridFloor.visible = false; + if (!this.skyMat) { + this.setEnvironmentMap(this.defaultEnvironment); + } else { + this.sky.material = this.skyMat; + } + this.sky.visible = true; + } + this.scene.needsUpdate = true; + } + + setEnvironmentMap(url) { + var scope = this; + scope.texture.load(url, function(t) { + var textureUniform = { type: 't', value: t }; + var uniforms = { texture: textureUniform }; + scope.skyMat = new ShaderMaterial({ vertexShader: scope.vertexShader, fragmentShader: scope.fragmentShader, uniforms: uniforms, side: DoubleSide }); + scope.skyMat.name = 'SkyMaterial'; + scope.toggleEnvironment(scope.useEnvironment); + }, undefined, function() { + console.log('ERROR LOADEING FILE'); + }); + } + + init() { + this.toggleEnvironment(false); + } +} \ No newline at end of file diff --git a/src/blueprint3d/blueprint3d.ts b/src/blueprint3d/blueprint3d.ts new file mode 100644 index 0000000..eb5a388 --- /dev/null +++ b/src/blueprint3d/blueprint3d.ts @@ -0,0 +1,48 @@ +import { Floorplanner } from "./floorplanner"; +import { Model } from "./model"; + + +/** + * 启动选项 +*/ +export interface Options { + /** */ + widget?: boolean; + + /** */ + threeElement?: string; + + /** */ + threeCanvasElement?: string; + + /** */ + floorplannerElement?: string; + + /** 材质目录 */ + textureDir?: string; +} + +/** Blueprint3D core application. */ +export class Blueprint3d { + + private model: Model; + + private three: any; // Three.Main; + + private floorplanner: Floorplanner; + + /** Creates an instance. + * @param options The initialization options. + */ + constructor(options: Options) { + this.model = new Model(options.textureDir); + this.three = new Three.Main(this.model, options.threeElement, options.threeCanvasElement, {}); + + if (!options.widget) { + this.floorplanner = new Floorplanner(options.floorplannerElement, this.model.floorplan); + } + else { + this.three.getController().enabled = false; + } + } +} diff --git a/src/blueprint3d/core/configuration.ts b/src/blueprint3d/core/configuration.ts new file mode 100644 index 0000000..a390efa --- /dev/null +++ b/src/blueprint3d/core/configuration.ts @@ -0,0 +1,53 @@ +/// + +module BP3D.Core { + // GENERAL: + + /** The dimensioning unit for 2D floorplan measurements. */ + export const configDimUnit = "dimUnit"; + + // WALL: + + /** The initial wall height in cm. */ + export const configWallHeight = "wallHeight"; + + /** The initial wall thickness in cm. */ + export const configWallThickness = "wallThickness"; + + /** Global configuration to customize the whole system. */ + export class Configuration { + /** Configuration data loaded from/stored to extern. */ + private static data: {[key: string]: any} = { + dimUnit: dimInch, + + wallHeight: 250, + wallThickness: 10 + }; + + /** Set a configuration parameter. */ + public static setValue(key: string, value: string | number) { + this.data[key] = value; + } + + /** Get a string configuration parameter. */ + public static getStringValue(key: string): string { + switch (key) { + case configDimUnit: + return this.data[key]; + default: + throw new Error("Invalid string configuration parameter: " + key); + } + } + + /** Get a numeric configuration parameter. */ + public static getNumericValue(key: string): number { + switch (key) { + case configWallHeight: + case configWallThickness: + return this.data[key]; + default: + throw new Error("Invalid numeric configuration parameter: " + key); + } + } + } +} \ No newline at end of file diff --git a/src/blueprint3d/core/dimensioning.ts b/src/blueprint3d/core/dimensioning.ts new file mode 100644 index 0000000..2a8ea45 --- /dev/null +++ b/src/blueprint3d/core/dimensioning.ts @@ -0,0 +1,40 @@ +/// + +module BP3D.Core { + + /** Dimensioning in Inch. */ + export const dimInch: string = "inch"; + + /** Dimensioning in Meter. */ + export const dimMeter: string = "m"; + + /** Dimensioning in Centi Meter. */ + export const dimCentiMeter: string = "cm"; + + /** Dimensioning in Milli Meter. */ + export const dimMilliMeter: string = "mm"; + + /** Dimensioning functions. */ + export class Dimensioning { + /** Converts cm to dimensioning string. + * @param cm Centi meter value to be converted. + * @returns String representation. + */ + public static cmToMeasure(cm: number): string { + switch (Core.Configuration.getStringValue(Core.configDimUnit)) { + case dimInch: + var realFeet = ((cm * 0.393700) / 12); + var feet = Math.floor(realFeet); + var inches = Math.round((realFeet - feet) * 12); + return feet + "'" + inches + '"'; + case dimMilliMeter: + return "" + Math.round(10 * cm) + " mm"; + case dimCentiMeter: + return "" + Math.round(10 * cm) / 10 + " cm"; + case dimMeter: + default: + return "" + Math.round(10 * cm) / 1000 + " m"; + } + } + } +} \ No newline at end of file diff --git a/src/blueprint3d/core/log.ts b/src/blueprint3d/core/log.ts new file mode 100644 index 0000000..eab6201 --- /dev/null +++ b/src/blueprint3d/core/log.ts @@ -0,0 +1,88 @@ +module BP3D.Core { + + /** Enumeration of log contexts. */ + export enum ELogContext { + /** Log nothing. */ + None, + + /** Log all. */ + All, + + /** 2D interaction */ + Interaction2d, + + /** Interior items */ + Item, + + /** Wall (connectivity) */ + Wall, + + /** Room(s) */ + Room + } + + /** Enumeration of log levels. */ + export enum ELogLevel { + /** An information. */ + Information, + + /** A warning. */ + Warning, + + /** An error. */ + Error, + + /** A fatal error. */ + Fatal, + + /** A debug message. */ + Debug + } + + /** The current log context. To be set when initializing the Application. */ + export var logContext: ELogContext = ELogContext.None; + + /** Pre-check if logging for specified context and/or level is enabled. + * This may be used to avoid compilation of complex logs. + * @param context The log context to be verified. + * @param level The log level to be verified. + * @returns If this context/levels is currently logged. + */ + export function isLogging(context: ELogContext, level: ELogLevel) { + return logContext === ELogContext.All || logContext == context + || level === ELogLevel.Warning || level === ELogLevel.Error + || level === ELogLevel.Fatal + } + + /** Log the passed message in the context and with given level. + * @param context The context in which the message should be logged. + * @param level The level of the message. + * @param message The messages to be logged. + */ + export function log(context: ELogContext, level: ELogLevel, message: string) { + if (isLogging(context, level) === false) { + return; + } + + var tPrefix = ""; + switch (level) { + case ELogLevel.Information: + tPrefix = "[INFO_] "; + break; + case ELogLevel.Warning: + tPrefix = "[WARNG] "; + break; + case ELogLevel.Error: + tPrefix = "[ERROR] "; + break; + case ELogLevel.Fatal: + tPrefix = "[FATAL] "; + break; + case ELogLevel.Debug: + tPrefix = "[DEBUG] "; + break; + } + + console.log(tPrefix + message); + } +} \ No newline at end of file diff --git a/src/blueprint3d/core/utils.ts b/src/blueprint3d/core/utils.ts new file mode 100644 index 0000000..55187a3 --- /dev/null +++ b/src/blueprint3d/core/utils.ts @@ -0,0 +1,366 @@ +module BP3D.Core { + + /** Collection of utility functions. */ + export class Utils { + + /** Determines the distance of a point from a line. + * @param x Point's x coordinate. + * @param y Point's y coordinate. + * @param x1 Line-Point 1's x coordinate. + * @param y1 Line-Point 1's y coordinate. + * @param x2 Line-Point 2's x coordinate. + * @param y2 Line-Point 2's y coordinate. + * @returns The distance. + */ + public static pointDistanceFromLine(x: number, y: number, x1: number, y1: number, x2: number, y2: number): number { + var tPoint = Utils.closestPointOnLine(x, y, x1, y1, x2, y2); + var tDx = x - tPoint.x; + var tDy = y - tPoint.y; + return Math.sqrt(tDx * tDx + tDy * tDy); + } + + /** Gets the projection of a point onto a line. + * @param x Point's x coordinate. + * @param y Point's y coordinate. + * @param x1 Line-Point 1's x coordinate. + * @param y1 Line-Point 1's y coordinate. + * @param x2 Line-Point 2's x coordinate. + * @param y2 Line-Point 2's y coordinate. + * @returns The point. + */ + static closestPointOnLine(x: number, y: number, x1: number, y1: number, x2: number, y2: number): { x: number, y: number } { + // Inspired by: http://stackoverflow.com/a/6853926 + var tA = x - x1; + var tB = y - y1; + var tC = x2 - x1; + var tD = y2 - y1; + + var tDot = tA * tC + tB * tD; + var tLenSq = tC * tC + tD * tD; + var tParam = tDot / tLenSq; + + var tXx, tYy; + + if (tParam < 0 || (x1 == x2 && y1 == y2)) { + tXx = x1; + tYy = y1; + } + else if (tParam > 1) { + tXx = x2; + tYy = y2; + } + else { + tXx = x1 + tParam * tC; + tYy = y1 + tParam * tD; + } + + return { + x: tXx, + y: tYy + } + } + + /** Gets the distance of two points. + * @param x1 X part of first point. + * @param y1 Y part of first point. + * @param x2 X part of second point. + * @param y2 Y part of second point. + * @returns The distance. + */ + static distance(x1: number, y1: number, x2: number, y2: number): number { + return Math.sqrt( + Math.pow(x2 - x1, 2) + + Math.pow(y2 - y1, 2)); + } + + /** Gets the angle between 0,0 -> x1,y1 and 0,0 -> x2,y2 (-pi to pi) + * @returns The angle. + */ + static angle(x1: number, y1: number, x2: number, y2: number): number { + var tDot = x1 * x2 + y1 * y2; + var tDet = x1 * y2 - y1 * x2; + var tAngle = -Math.atan2(tDet, tDot); + return tAngle; + } + + /** shifts angle to be 0 to 2pi */ + static angle2pi(x1: number, y1: number, x2: number, y2: number) { + var tTheta = Utils.angle(x1, y1, x2, y2); + if (tTheta < 0) { + tTheta += 2 * Math.PI; + } + return tTheta; + } + + /** Checks if an array of points is clockwise. + * @param points Is array of points with x,y attributes + * @returns True if clockwise. + */ + static isClockwise(points): boolean { + // make positive + let tSubX = Math.min(0, Math.min.apply(null, Utils.map(points, function (p) { + return p.x; + }))) + let tSubY = Math.min(0, Math.min.apply(null, Utils.map(points, function (p) { + return p.x; + }))) + + var tNewPoints = Utils.map(points, function (p) { + return { + x: p.x - tSubX, + y: p.y - tSubY + } + }) + + // determine CW/CCW, based on: + // http://stackoverflow.com/questions/1165647 + var tSum = 0; + for (var tI = 0; tI < tNewPoints.length; tI++) { + var tC1 = tNewPoints[tI]; + var tC2: any; + if (tI == tNewPoints.length - 1) { + tC2 = tNewPoints[0]; + } + else { + tC2 = tNewPoints[tI + 1]; + } + tSum += (tC2.x - tC1.x) * (tC2.y + tC1.y); + } + return (tSum >= 0); + } + + /** Creates a Guid. + * @returns A new Guid. + */ + static guid(): /* () => */ string { + var tS4 = function () { + return Math.floor((1 + Math.random()) * 0x10000) + .toString(16) + .substring(1); + } + + return tS4() + tS4() + '-' + tS4() + '-' + tS4() + '-' + + tS4() + '-' + tS4() + tS4() + tS4(); + } + + /** both arguments are arrays of corners with x,y attributes */ + static polygonPolygonIntersect(firstCorners, secondCorners): boolean { + for (var tI = 0; tI < firstCorners.length; tI++) { + var tFirstCorner = firstCorners[tI], + tSecondCorner; + + if (tI == firstCorners.length - 1) { + tSecondCorner = firstCorners[0]; + } + else { + tSecondCorner = firstCorners[tI + 1]; + } + + if (Utils.linePolygonIntersect( + tFirstCorner.x, tFirstCorner.y, + tSecondCorner.x, tSecondCorner.y, + secondCorners)) { + return true; + } + } + return false; + } + + /** Corners is an array of points with x,y attributes */ + static linePolygonIntersect(x1: number, y1: number, x2: number, y2: number, corners): boolean { + for (var tI = 0; tI < corners.length; tI++) { + var tFirstCorner = corners[tI], + tSecondCorner; + if (tI == corners.length - 1) { + tSecondCorner = corners[0]; + } + else { + tSecondCorner = corners[tI + 1]; + } + + if (Utils.lineLineIntersect(x1, y1, x2, y2, + tFirstCorner.x, tFirstCorner.y, + tSecondCorner.x, tSecondCorner.y)) { + return true; + } + } + return false; + } + + /** */ + static lineLineIntersect(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number): boolean { + function tCCW(p1, p2, p3) { + var tA = p1.x, + tB = p1.y, + tC = p2.x, + tD = p2.y, + tE = p3.x, + tF = p3.y; + return (tF - tB) * (tC - tA) > (tD - tB) * (tE - tA); + } + + var tP1 = { x: x1, y: y1 }, + tP2 = { x: x2, y: y2 }, + tP3 = { x: x3, y: y3 }, + tP4 = { x: x4, y: y4 }; + return (tCCW(tP1, tP3, tP4) != tCCW(tP2, tP3, tP4)) && (tCCW(tP1, tP2, tP3) != tCCW(tP1, tP2, tP4)); + } + + /** + @param corners Is an array of points with x,y attributes + @param startX X start coord for raycast + @param startY Y start coord for raycast + */ + static pointInPolygon(x: number, y: number, corners, startX?: number, startY?: number): boolean { + startX = startX || 0; + startY = startY || 0; + + //ensure that point(startX, startY) is outside the polygon consists of corners + var tMinX = 0, + tMinY = 0; + + if (startX === undefined || startY === undefined) { + for (var tI = 0; tI < corners.length; tI++) { + tMinX = Math.min(tMinX, corners[tI].x); + tMinY = Math.min(tMinX, corners[tI].y); + } + startX = tMinX - 10; + startY = tMinY - 10; + } + + var tIntersects = 0; + for (var tI = 0; tI < corners.length; tI++) { + var tFirstCorner = corners[tI], + tSecondCorner; + if (tI == corners.length - 1) { + tSecondCorner = corners[0]; + } + else { + tSecondCorner = corners[tI + 1]; + } + + if (Utils.lineLineIntersect(startX, startY, x, y, + tFirstCorner.x, tFirstCorner.y, + tSecondCorner.x, tSecondCorner.y)) { + tIntersects++; + } + } + // odd intersections means the point is in the polygon + return ((tIntersects % 2) == 1); + } + + /** Checks if all corners of insideCorners are inside the polygon described by outsideCorners */ + static polygonInsidePolygon(insideCorners, outsideCorners, startX: number, startY: number): boolean { + startX = startX || 0; + startY = startY || 0; + + for (var tI = 0; tI < insideCorners.length; tI++) { + if (!Utils.pointInPolygon( + insideCorners[tI].x, insideCorners[tI].y, + outsideCorners, + startX, startY)) { + return false; + } + } + return true; + } + + /** Checks if any corners of firstCorners is inside the polygon described by secondCorners */ + static polygonOutsidePolygon(insideCorners, outsideCorners, startX: number, startY: number): boolean { + startX = startX || 0; + startY = startY || 0; + + for (var tI = 0; tI < insideCorners.length; tI++) { + if (Utils.pointInPolygon( + insideCorners[tI].x, insideCorners[tI].y, + outsideCorners, + startX, startY)) { + return false; + } + } + return true; + } + + // arrays + + static forEach(array, action) { + for (var tI = 0; tI < array.length; tI++) { + action(array[tI]); + } + } + + static forEachIndexed(array, action) { + for (var tI = 0; tI < array.length; tI++) { + action(tI, array[tI]); + } + } + + static map(array, func) { + var tResult = []; + array.forEach((element) => { + tResult.push(func(element)); + }); + return tResult; + } + + /** Remove elements in array if func(element) returns true */ + static removeIf(array, func) { + var tResult = []; + array.forEach((element) => { + if (!func(element)) { + tResult.push(element); + } + }); + return tResult; + } + + /** Shift the items in an array by shift (positive integer) */ + static cycle(arr, shift) { + var tReturn = arr.slice(0); + for (var tI = 0; tI < shift; tI++) { + var tmp = tReturn.shift(); + tReturn.push(tmp); + } + return tReturn; + } + + /** Returns in the unique elemnts in arr */ + static unique(arr, hashFunc) { + var tResults = []; + var tMap = {}; + for (var tI = 0; tI < arr.length; tI++) { + if (!tMap.hasOwnProperty(arr[tI])) { + tResults.push(arr[tI]); + tMap[hashFunc(arr[tI])] = true; + } + } + return tResults; + } + + /** Remove value from array, if it is present */ + static removeValue(array, value) { + for (var tI = array.length - 1; tI >= 0; tI--) { + if (array[tI] === value) { + array.splice(tI, 1); + } + } + } + + /** Checks if value is in array */ + static hasValue = function (array, value): boolean { + for (var tI = 0; tI < array.length; tI++) { + if (array[tI] === value) { + return true; + } + } + return false; + } + + /** Subtracts the elements in subArray from array */ + static subtract(array, subArray) { + return Utils.removeIf(array, function (el) { + return Utils.hasValue(subArray, el); + }); + } + } +} diff --git a/src/blueprint3d/core/version.ts b/src/blueprint3d/core/version.ts new file mode 100644 index 0000000..2ae9e2a --- /dev/null +++ b/src/blueprint3d/core/version.ts @@ -0,0 +1,17 @@ +module BP3D.Core { + /** Version information. */ + export class Version { + /** The informal version. */ + public static getInformalVersion(): string { + return "1.0 Beta 1"; + } + + /** The technical version. */ + public static getTechnicalVersion(): string { + return "1.0.0.1" + } + } +} + +console.log("Blueprint3D " + BP3D.Core.Version.getInformalVersion() + + " (" + BP3D.Core.Version.getTechnicalVersion() + ")") \ No newline at end of file diff --git a/src/blueprint3d/floorplanner/floorplanner.ts b/src/blueprint3d/floorplanner/floorplanner.ts new file mode 100644 index 0000000..98401ef --- /dev/null +++ b/src/blueprint3d/floorplanner/floorplanner.ts @@ -0,0 +1,298 @@ +/// +/// +/// + +module BP3D.Floorplanner { + /** how much will we move a corner to make a wall axis aligned (cm) */ + const snapTolerance = 25; + + /** + * The Floorplanner implements an interactive tool for creation of floorplans. + */ + export class Floorplanner { + + /** */ + public mode = 0; + + /** */ + public activeWall = null; + + /** */ + public activeCorner = null; + + /** */ + public originX = 0; + + /** */ + public originY = 0; + + /** drawing state */ + public targetX = 0; + + /** drawing state */ + public targetY = 0; + + /** drawing state */ + public lastNode = null; + + /** */ + private wallWidth: number; + + /** */ + private modeResetCallbacks = $.Callbacks(); + + /** */ + private canvasElement; + + /** */ + private view: FloorplannerView; + + /** */ + private mouseDown = false; + + /** */ + private mouseMoved = false; + + /** in ThreeJS coords */ + private mouseX = 0; + + /** in ThreeJS coords */ + private mouseY = 0; + + /** in ThreeJS coords */ + private rawMouseX = 0; + + /** in ThreeJS coords */ + private rawMouseY = 0; + + /** mouse position at last click */ + private lastX = 0; + + /** mouse position at last click */ + private lastY = 0; + + /** */ + private cmPerPixel: number; + + /** */ + private pixelsPerCm: number; + + /** */ + constructor(canvas: string, private floorplan: Model.Floorplan) { + + this.canvasElement = $("#" + canvas); + + this.view = new FloorplannerView(this.floorplan, this, canvas); + + var cmPerFoot = 30.48; + var pixelsPerFoot = 15.0; + this.cmPerPixel = cmPerFoot * (1.0 / pixelsPerFoot); + this.pixelsPerCm = 1.0 / this.cmPerPixel; + + this.wallWidth = 10.0 * this.pixelsPerCm; + + // Initialization: + + this.setMode(floorplannerModes.MOVE); + + var scope = this; + + this.canvasElement.mousedown(() => { + scope.mousedown(); + }); + this.canvasElement.mousemove((event) => { + scope.mousemove(event); + }); + this.canvasElement.mouseup(() => { + scope.mouseup(); + }); + this.canvasElement.mouseleave(() => { + scope.mouseleave(); + }); + + $(document).keyup((e) => { + if (e.keyCode == 27) { + scope.escapeKey(); + } + }); + + floorplan.roomLoadedCallbacks.add(() => { + scope.reset() + }); + } + + /** */ + private escapeKey() { + this.setMode(floorplannerModes.MOVE); + } + + /** */ + private updateTarget() { + if (this.mode == floorplannerModes.DRAW && this.lastNode) { + if (Math.abs(this.mouseX - this.lastNode.x) < snapTolerance) { + this.targetX = this.lastNode.x; + } else { + this.targetX = this.mouseX; + } + if (Math.abs(this.mouseY - this.lastNode.y) < snapTolerance) { + this.targetY = this.lastNode.y; + } else { + this.targetY = this.mouseY; + } + } else { + this.targetX = this.mouseX; + this.targetY = this.mouseY; + } + + this.view.draw(); + } + + /** */ + private mousedown() { + this.mouseDown = true; + this.mouseMoved = false; + this.lastX = this.rawMouseX; + this.lastY = this.rawMouseY; + + // delete + if (this.mode == floorplannerModes.DELETE) { + if (this.activeCorner) { + this.activeCorner.removeAll(); + } else if (this.activeWall) { + this.activeWall.remove(); + } else { + this.setMode(floorplannerModes.MOVE); + } + } + } + + /** */ + private mousemove(event) { + this.mouseMoved = true; + + // update mouse + this.rawMouseX = event.clientX; + this.rawMouseY = event.clientY; + + this.mouseX = (event.clientX - this.canvasElement.offset().left) * this.cmPerPixel + this.originX * this.cmPerPixel; + this.mouseY = (event.clientY - this.canvasElement.offset().top) * this.cmPerPixel + this.originY * this.cmPerPixel; + + // update target (snapped position of actual mouse) + if (this.mode == floorplannerModes.DRAW || (this.mode == floorplannerModes.MOVE && this.mouseDown)) { + this.updateTarget(); + } + + // update object target + if (this.mode != floorplannerModes.DRAW && !this.mouseDown) { + var hoverCorner = this.floorplan.overlappedCorner(this.mouseX, this.mouseY); + var hoverWall = this.floorplan.overlappedWall(this.mouseX, this.mouseY); + var draw = false; + if (hoverCorner != this.activeCorner) { + this.activeCorner = hoverCorner; + draw = true; + } + // corner takes precendence + if (this.activeCorner == null) { + if (hoverWall != this.activeWall) { + this.activeWall = hoverWall; + draw = true; + } + } else { + this.activeWall = null; + } + if (draw) { + this.view.draw(); + } + } + + // panning + if (this.mouseDown && !this.activeCorner && !this.activeWall) { + this.originX += (this.lastX - this.rawMouseX); + this.originY += (this.lastY - this.rawMouseY); + this.lastX = this.rawMouseX; + this.lastY = this.rawMouseY; + this.view.draw(); + } + + // dragging + if (this.mode == floorplannerModes.MOVE && this.mouseDown) { + if (this.activeCorner) { + this.activeCorner.move(this.mouseX, this.mouseY); + this.activeCorner.snapToAxis(snapTolerance); + } else if (this.activeWall) { + this.activeWall.relativeMove( + (this.rawMouseX - this.lastX) * this.cmPerPixel, + (this.rawMouseY - this.lastY) * this.cmPerPixel + ); + this.activeWall.snapToAxis(snapTolerance); + this.lastX = this.rawMouseX; + this.lastY = this.rawMouseY; + } + this.view.draw(); + } + } + + /** */ + private mouseup() { + this.mouseDown = false; + + // drawing + if (this.mode == floorplannerModes.DRAW && !this.mouseMoved) { + var corner = this.floorplan.newCorner(this.targetX, this.targetY); + if (this.lastNode != null) { + this.floorplan.newWall(this.lastNode, corner); + } + if (corner.mergeWithIntersected() && this.lastNode != null) { + this.setMode(floorplannerModes.MOVE); + } + this.lastNode = corner; + } + } + + /** */ + private mouseleave() { + this.mouseDown = false; + //scope.setMode(scope.modes.MOVE); + } + + /** */ + private reset() { + this.resizeView(); + this.setMode(floorplannerModes.MOVE); + this.resetOrigin(); + this.view.draw(); + } + + /** */ + private resizeView() { + this.view.handleWindowResize(); + } + + /** */ + private setMode(mode: number) { + this.lastNode = null; + this.mode = mode; + this.modeResetCallbacks.fire(mode); + this.updateTarget(); + } + + /** Sets the origin so that floorplan is centered */ + private resetOrigin() { + var centerX = this.canvasElement.innerWidth() / 2.0; + var centerY = this.canvasElement.innerHeight() / 2.0; + var centerFloorplan = this.floorplan.getCenter(); + this.originX = centerFloorplan.x * this.pixelsPerCm - centerX; + this.originY = centerFloorplan.z * this.pixelsPerCm - centerY; + } + + /** Convert from THREEjs coords to canvas coords. */ + public convertX(x: number): number { + return (x - this.originX * this.cmPerPixel) * this.pixelsPerCm; + } + + /** Convert from THREEjs coords to canvas coords. */ + public convertY(y: number): number { + return (y - this.originY * this.cmPerPixel) * this.pixelsPerCm; + } + } +} \ No newline at end of file diff --git a/src/blueprint3d/floorplanner/floorplanner_view.ts b/src/blueprint3d/floorplanner/floorplanner_view.ts new file mode 100644 index 0000000..e660ba4 --- /dev/null +++ b/src/blueprint3d/floorplanner/floorplanner_view.ts @@ -0,0 +1,312 @@ +/// +/// +/// +/// +/// +/// +/// +/// +/// + +module BP3D.Floorplanner { + /** */ + export const floorplannerModes = { + MOVE: 0, + DRAW: 1, + DELETE: 2 + }; + + // grid parameters + const gridSpacing = 20; // pixels + const gridWidth = 1; + const gridColor = "#f1f1f1"; + + // room config + const roomColor = "#f9f9f9"; + + // wall config + const wallWidth = 5; + const wallWidthHover = 7; + const wallColor = "#dddddd" + const wallColorHover = "#008cba" + const edgeColor = "#888888" + const edgeColorHover = "#008cba" + const edgeWidth = 1 + + const deleteColor = "#ff0000"; + + // corner config + const cornerRadius = 0 + const cornerRadiusHover = 7 + const cornerColor = "#cccccc" + const cornerColorHover = "#008cba" + + /** + * The View to be used by a Floorplanner to render in/interact with. + */ + export class FloorplannerView { + + /** The canvas element. */ + private canvasElement: HTMLCanvasElement; + + /** The 2D context. */ + private context; + + /** */ + constructor(private floorplan: Model.Floorplan, private viewmodel: Floorplanner, private canvas: string) { + this.canvasElement = document.getElementById(canvas); + this.context = this.canvasElement.getContext('2d'); + + var scope = this; + $(window).resize(() => { + scope.handleWindowResize(); + }); + this.handleWindowResize(); + } + + /** */ + public handleWindowResize() { + var canvasSel = $("#" + this.canvas); + var parent = canvasSel.parent(); + canvasSel.height(parent.innerHeight()); + canvasSel.width(parent.innerWidth()); + this.canvasElement.height = parent.innerHeight(); + this.canvasElement.width = parent.innerWidth(); + this.draw(); + } + + /** */ + public draw() { + this.context.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height); + + this.drawGrid(); + + this.floorplan.getRooms().forEach((room) => { + this.drawRoom(room); + }) + + this.floorplan.getWalls().forEach((wall) => { + this.drawWall(wall); + }); + + this.floorplan.getCorners().forEach((corner) => { + this.drawCorner(corner); + }); + + if (this.viewmodel.mode == floorplannerModes.DRAW) { + this.drawTarget(this.viewmodel.targetX, this.viewmodel.targetY, this.viewmodel.lastNode); + } + + this.floorplan.getWalls().forEach((wall) => { + this.drawWallLabels(wall); + }); + } + + /** */ + private drawWallLabels(wall: Model.Wall) { + // we'll just draw the shorter label... idk + if (wall.backEdge && wall.frontEdge) { + if (wall.backEdge.interiorDistance < wall.frontEdge.interiorDistance) { + this.drawEdgeLabel(wall.backEdge); + } else { + this.drawEdgeLabel(wall.frontEdge); + } + } else if (wall.backEdge) { + this.drawEdgeLabel(wall.backEdge); + } else if (wall.frontEdge) { + this.drawEdgeLabel(wall.frontEdge); + } + } + + /** */ + private drawWall(wall: Model.Wall) { + var hover = (wall === this.viewmodel.activeWall); + var color = wallColor; + if (hover && this.viewmodel.mode == floorplannerModes.DELETE) { + color = deleteColor; + } else if (hover) { + color = wallColorHover; + } + this.drawLine( + this.viewmodel.convertX(wall.getStartX()), + this.viewmodel.convertY(wall.getStartY()), + this.viewmodel.convertX(wall.getEndX()), + this.viewmodel.convertY(wall.getEndY()), + hover ? wallWidthHover : wallWidth, + color + ); + if (!hover && wall.frontEdge) { + this.drawEdge(wall.frontEdge, hover); + } + if (!hover && wall.backEdge) { + this.drawEdge(wall.backEdge, hover); + } + } + + /** */ + private drawEdgeLabel(edge: Model.HalfEdge) { + var pos = edge.interiorCenter(); + var length = edge.interiorDistance(); + if (length < 60) { + // dont draw labels on walls this short + return; + } + this.context.font = "normal 12px Arial"; + this.context.fillStyle = "#000000"; + this.context.textBaseline = "middle"; + this.context.textAlign = "center"; + this.context.strokeStyle = "#ffffff"; + this.context.lineWidth = 4; + + this.context.strokeText(Core.Dimensioning.cmToMeasure(length), + this.viewmodel.convertX(pos.x), + this.viewmodel.convertY(pos.y)); + this.context.fillText(Core.Dimensioning.cmToMeasure(length), + this.viewmodel.convertX(pos.x), + this.viewmodel.convertY(pos.y)); + } + + /** */ + private drawEdge(edge: Model.HalfEdge, hover) { + var color = edgeColor; + if (hover && this.viewmodel.mode == floorplannerModes.DELETE) { + color = deleteColor; + } else if (hover) { + color = edgeColorHover; + } + var corners = edge.corners(); + + var scope = this; + this.drawPolygon( + Core.Utils.map(corners, function (corner) { + return scope.viewmodel.convertX(corner.x); + }), + Core.Utils.map(corners, function (corner) { + return scope.viewmodel.convertY(corner.y); + }), + false, + null, + true, + color, + edgeWidth + ); + } + + /** */ + private drawRoom(room: Model.Room) { + var scope = this; + this.drawPolygon( + Core.Utils.map(room.corners, (corner: Model.Corner) => { + return scope.viewmodel.convertX(corner.x); + }), + Core.Utils.map(room.corners, (corner: Model.Corner) => { + return scope.viewmodel.convertY(corner.y); + }), + true, + roomColor + ); + } + + /** */ + private drawCorner(corner: Model.Corner) { + var hover = (corner === this.viewmodel.activeCorner); + var color = cornerColor; + if (hover && this.viewmodel.mode == floorplannerModes.DELETE) { + color = deleteColor; + } else if (hover) { + color = cornerColorHover; + } + this.drawCircle( + this.viewmodel.convertX(corner.x), + this.viewmodel.convertY(corner.y), + hover ? cornerRadiusHover : cornerRadius, + color + ); + } + + /** */ + private drawTarget(x: number, y: number, lastNode) { + this.drawCircle( + this.viewmodel.convertX(x), + this.viewmodel.convertY(y), + cornerRadiusHover, + cornerColorHover + ); + if (this.viewmodel.lastNode) { + this.drawLine( + this.viewmodel.convertX(lastNode.x), + this.viewmodel.convertY(lastNode.y), + this.viewmodel.convertX(x), + this.viewmodel.convertY(y), + wallWidthHover, + wallColorHover + ); + } + } + + /** */ + private drawLine(startX: number, startY: number, endX: number, endY: number, width: number, color) { + // width is an integer + // color is a hex string, i.e. #ff0000 + this.context.beginPath(); + this.context.moveTo(startX, startY); + this.context.lineTo(endX, endY); + this.context.lineWidth = width; + this.context.strokeStyle = color; + this.context.stroke(); + } + + /** */ + private drawPolygon(xArr, yArr, fill, fillColor, stroke?, strokeColor?, strokeWidth?) { + // fillColor is a hex string, i.e. #ff0000 + fill = fill || false; + stroke = stroke || false; + this.context.beginPath(); + this.context.moveTo(xArr[0], yArr[0]); + for (var i = 1; i < xArr.length; i++) { + this.context.lineTo(xArr[i], yArr[i]); + } + this.context.closePath(); + if (fill) { + this.context.fillStyle = fillColor; + this.context.fill(); + } + if (stroke) { + this.context.lineWidth = strokeWidth; + this.context.strokeStyle = strokeColor; + this.context.stroke(); + } + } + + /** */ + private drawCircle(centerX, centerY, radius, fillColor) { + this.context.beginPath(); + this.context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false); + this.context.fillStyle = fillColor; + this.context.fill(); + } + + /** returns n where -gridSize/2 < n <= gridSize/2 */ + private calculateGridOffset(n) { + if (n >= 0) { + return (n + gridSpacing / 2.0) % gridSpacing - gridSpacing / 2.0; + } else { + return (n - gridSpacing / 2.0) % gridSpacing + gridSpacing / 2.0; + } + } + + /** */ + private drawGrid() { + var offsetX = this.calculateGridOffset(-this.viewmodel.originX); + var offsetY = this.calculateGridOffset(-this.viewmodel.originY); + var width = this.canvasElement.width; + var height = this.canvasElement.height; + for (var x = 0; x <= (width / gridSpacing); x++) { + this.drawLine(gridSpacing * x + offsetX, 0, gridSpacing * x + offsetX, height, gridWidth, gridColor); + } + for (var y = 0; y <= (height / gridSpacing); y++) { + this.drawLine(0, gridSpacing * y + offsetY, width, gridSpacing * y + offsetY, gridWidth, gridColor); + } + } + } +} \ No newline at end of file diff --git a/src/blueprint3d/floorplanner/index.ts b/src/blueprint3d/floorplanner/index.ts new file mode 100644 index 0000000..addbd1e --- /dev/null +++ b/src/blueprint3d/floorplanner/index.ts @@ -0,0 +1 @@ +export class Floorplanner extends BP3D.Floorplanner.Floorplanner { } \ No newline at end of file diff --git a/src/blueprint3d/items/factory.ts b/src/blueprint3d/items/factory.ts new file mode 100644 index 0000000..41108dc --- /dev/null +++ b/src/blueprint3d/items/factory.ts @@ -0,0 +1,26 @@ +/// +/// +/// +/// +/// +/// + +module BP3D.Items { + /** Enumeration of item types. */ + const item_types = { + 1: Items.FloorItem, + 2: Items.WallItem, + 3: Items.InWallItem, + 7: Items.InWallFloorItem, + 8: Items.OnFloorItem, + 9: Items.WallFloorItem + }; + + /** Factory class to create items. */ + export class Factory { + /** Gets the class for the specified item. */ + public static getClass(itemType) { + return item_types[itemType] + } + } +} \ No newline at end of file diff --git a/src/blueprint3d/items/floor_item.ts b/src/blueprint3d/items/floor_item.ts new file mode 100644 index 0000000..2095ca3 --- /dev/null +++ b/src/blueprint3d/items/floor_item.ts @@ -0,0 +1,80 @@ +/// +/// +/// +/// + +module BP3D.Items { + /** + * A Floor Item is an entity to be placed related to a floor. + */ + export abstract class FloorItem extends Item { + constructor(model: Model.Model, metadata: Metadata, geometry: THREE.Geometry, material: THREE.MeshFaceMaterial, position: THREE.Vector3, rotation: number, scale: THREE.Vector3) { + super(model, metadata, geometry, material, position, rotation, scale); + }; + + /** */ + public placeInRoom() { + if (!this.position_set) { + var center = this.model.floorplan.getCenter(); + this.position.x = center.x; + this.position.z = center.z; + this.position.y = 0.5 * (this.geometry.boundingBox.max.y - this.geometry.boundingBox.min.y); + } + }; + + /** Take action after a resize */ + public resized() { + this.position.y = this.halfSize.y; + } + + /** */ + public moveToPosition(vec3, intersection) { + // keeps the position in the room and on the floor + if (!this.isValidPosition(vec3)) { + this.showError(vec3); + return; + } else { + this.hideError(); + vec3.y = this.position.y; // keep it on the floor! + this.position.copy(vec3); + } + } + + /** */ + public isValidPosition(vec3): boolean { + var corners = this.getCorners('x', 'z', vec3); + + // check if we are in a room + var rooms = this.model.floorplan.getRooms(); + var isInARoom = false; + for (var i = 0; i < rooms.length; i++) { + if (Core.Utils.pointInPolygon(vec3.x, vec3.z, rooms[i].interiorCorners) && + !Core.Utils.polygonPolygonIntersect(corners, rooms[i].interiorCorners)) { + isInARoom = true; + } + } + if (!isInARoom) { + //console.log('object not in a room'); + return false; + } + + // check if we are outside all other objects + /* + if (this.obstructFloorMoves) { + var objects = this.model.items.getItems(); + for (var i = 0; i < objects.length; i++) { + if (objects[i] === this || !objects[i].obstructFloorMoves) { + continue; + } + if (!utils.polygonOutsidePolygon(corners, objects[i].getCorners('x', 'z')) || + utils.polygonPolygonIntersect(corners, objects[i].getCorners('x', 'z'))) { + //console.log('object not outside other objects'); + return false; + } + } + }*/ + + return true; + } + } +} \ No newline at end of file diff --git a/src/blueprint3d/items/in_wall_floor_item.ts b/src/blueprint3d/items/in_wall_floor_item.ts new file mode 100644 index 0000000..0073dc2 --- /dev/null +++ b/src/blueprint3d/items/in_wall_floor_item.ts @@ -0,0 +1,14 @@ +/// +/// +/// +/// + +module BP3D.Items { + /** */ + export abstract class InWallFloorItem extends InWallItem { + constructor(model: Model.Model, metadata: Metadata, geometry: THREE.Geometry, material: THREE.MeshFaceMaterial, position: THREE.Vector3, rotation: number, scale: THREE.Vector3) { + super(model, metadata, geometry, material, position, rotation, scale); + this.boundToFloor = true; + }; + } +} \ No newline at end of file diff --git a/src/blueprint3d/items/in_wall_item.ts b/src/blueprint3d/items/in_wall_item.ts new file mode 100644 index 0000000..2d89fe3 --- /dev/null +++ b/src/blueprint3d/items/in_wall_item.ts @@ -0,0 +1,20 @@ +/// +/// +/// +/// + +module BP3D.Items { + /** */ + export abstract class InWallItem extends WallItem { + constructor(model: Model.Model, metadata: Metadata, geometry: THREE.Geometry, material: THREE.MeshFaceMaterial, position: THREE.Vector3, rotation: number, scale: THREE.Vector3) { + super(model, metadata, geometry, material, position, rotation, scale); + this.addToWall = true; + }; + + /** */ + public getWallOffset() { + // fudge factor so it saves to the right wall + return -this.currentWallEdge.offset + 0.5; + } + } +} \ No newline at end of file diff --git a/src/blueprint3d/items/item.ts b/src/blueprint3d/items/item.ts new file mode 100644 index 0000000..5399aa6 --- /dev/null +++ b/src/blueprint3d/items/item.ts @@ -0,0 +1,357 @@ +/// +/// +/// +/// + +module BP3D.Items { + /** + * An Item is an abstract entity for all things placed in the scene, + * e.g. at walls or on the floor. + */ + export abstract class Item extends THREE.Mesh { + + /** */ + private scene: Model.Scene; + + /** */ + private errorGlow = new THREE.Mesh(); + + /** */ + private hover = false; + + /** */ + private selected = false; + + /** */ + private highlighted = false; + + /** */ + private error = false; + + /** */ + private emissiveColor = 0x444444; + + /** */ + private errorColor = 0xff0000; + + /** */ + private resizable: boolean; + + /** Does this object affect other floor items */ + protected obstructFloorMoves = true; + + /** */ + protected position_set: boolean; + + /** Show rotate option in context menu */ + protected allowRotate = true; + + /** */ + public fixed = false; + + /** dragging */ + private dragOffset = new THREE.Vector3(); + + /** */ + protected halfSize: THREE.Vector3; + + /** Constructs an item. + * @param model TODO + * @param metadata TODO + * @param geometry TODO + * @param material TODO + * @param position TODO + * @param rotation TODO + * @param scale TODO + */ + constructor(protected model: Model.Model, public metadata: Metadata, geometry: THREE.Geometry, material: THREE.MeshFaceMaterial, position: THREE.Vector3, rotation: number, scale: THREE.Vector3) { + super(); + + this.scene = this.model.scene; + this.geometry = geometry; + this.material = material; + + this.errorColor = 0xff0000; + + this.resizable = metadata.resizable; + + this.castShadow = true; + this.receiveShadow = false; + + this.geometry = geometry; + this.material = material; + + if (position) { + this.position.copy(position); + this.position_set = true; + } else { + this.position_set = false; + } + + // center in its boundingbox + this.geometry.computeBoundingBox(); + this.geometry.applyMatrix(new THREE.Matrix4().makeTranslation( + - 0.5 * (this.geometry.boundingBox.max.x + this.geometry.boundingBox.min.x), + - 0.5 * (this.geometry.boundingBox.max.y + this.geometry.boundingBox.min.y), + - 0.5 * (this.geometry.boundingBox.max.z + this.geometry.boundingBox.min.z) + )); + this.geometry.computeBoundingBox(); + this.halfSize = this.objectHalfSize(); + + if (rotation) { + this.rotation.y = rotation; + } + + if (scale != null) { + this.setScale(scale.x, scale.y, scale.z); + } + }; + + /** */ + public remove() { + this.scene.removeItem(this); + }; + + /** */ + public resize(height: number, width: number, depth: number) { + var x = width / this.getWidth(); + var y = height / this.getHeight(); + var z = depth / this.getDepth(); + this.setScale(x, y, z); + } + + /** */ + public setScale(x: number, y: number, z: number) { + var scaleVec = new THREE.Vector3(x, y, z); + this.halfSize.multiply(scaleVec); + scaleVec.multiply(this.scale) + this.scale.set(scaleVec.x, scaleVec.y, scaleVec.z); + this.resized(); + this.scene.needsUpdate = true; + }; + + /** */ + public setFixed(fixed: boolean) { + this.fixed = fixed; + } + + /** Subclass can define to take action after a resize. */ + protected abstract resized(); + + /** */ + public getHeight = function () { + return this.halfSize.y * 2.0; + } + + /** */ + public getWidth = function () { + return this.halfSize.x * 2.0; + } + + /** */ + public getDepth = function () { + return this.halfSize.z * 2.0; + } + + /** */ + public abstract placeInRoom(); + + /** */ + public initObject = function () { + this.placeInRoom(); + // select and stuff + this.scene.needsUpdate = true; + }; + + /** */ + public removed() { + } + + /** on is a bool */ + public updateHighlight() { + var on = this.hover || this.selected; + this.highlighted = on; + var hex = on ? this.emissiveColor : 0x000000; + (this.material).materials.forEach((material) => { + // TODO_Ekki emissive doesn't exist anymore? + (material).emissive.setHex(hex); + }); + } + + /** */ + public mouseOver() { + this.hover = true; + this.updateHighlight(); + }; + + /** */ + public mouseOff() { + this.hover = false; + this.updateHighlight(); + }; + + /** */ + public setSelected() { + this.selected = true; + this.updateHighlight(); + }; + + /** */ + public setUnselected() { + this.selected = false; + this.updateHighlight(); + }; + + /** intersection has attributes point (vec3) and object (THREE.Mesh) */ + public clickPressed(intersection) { + this.dragOffset.copy(intersection.point).sub(this.position); + }; + + /** */ + public clickDragged(intersection) { + if (intersection) { + this.moveToPosition( + intersection.point.sub(this.dragOffset), + intersection); + } + }; + + /** */ + public rotate(intersection) { + if (intersection) { + var angle = Core.Utils.angle( + 0, + 1, + intersection.point.x - this.position.x, + intersection.point.z - this.position.z); + + var snapTolerance = Math.PI / 16.0; + + // snap to intervals near Math.PI/2 + for (var i = -4; i <= 4; i++) { + if (Math.abs(angle - (i * (Math.PI / 2))) < snapTolerance) { + angle = i * (Math.PI / 2); + break; + } + } + + this.rotation.y = angle; + } + } + + /** */ + public moveToPosition(vec3, intersection) { + this.position.copy(vec3); + } + + /** */ + public clickReleased() { + if (this.error) { + this.hideError(); + } + }; + + /** + * Returns an array of planes to use other than the ground plane + * for passing intersection to clickPressed and clickDragged + */ + public customIntersectionPlanes() { + return []; + } + + /** + * returns the 2d corners of the bounding polygon + * + * offset is Vector3 (used for getting corners of object at a new position) + * + * TODO: handle rotated objects better! + */ + public getCorners(xDim, yDim, position) { + + position = position || this.position; + + var halfSize = this.halfSize.clone(); + + var c1 = new THREE.Vector3(-halfSize.x, 0, -halfSize.z); + var c2 = new THREE.Vector3(halfSize.x, 0, -halfSize.z); + var c3 = new THREE.Vector3(halfSize.x, 0, halfSize.z); + var c4 = new THREE.Vector3(-halfSize.x, 0, halfSize.z); + + var transform = new THREE.Matrix4(); + //console.log(this.rotation.y); + transform.makeRotationY(this.rotation.y); // + Math.PI/2) + + c1.applyMatrix4(transform); + c2.applyMatrix4(transform); + c3.applyMatrix4(transform); + c4.applyMatrix4(transform); + + c1.add(position); + c2.add(position); + c3.add(position); + c4.add(position); + + //halfSize.applyMatrix4(transform); + + //var min = position.clone().sub(halfSize); + //var max = position.clone().add(halfSize); + + var corners = [ + { x: c1.x, y: c1.z }, + { x: c2.x, y: c2.z }, + { x: c3.x, y: c3.z }, + { x: c4.x, y: c4.z } + ]; + + return corners; + } + + /** */ + public abstract isValidPosition(vec3): boolean; + + /** */ + public showError(vec3) { + vec3 = vec3 || this.position; + if (!this.error) { + this.error = true; + this.errorGlow = this.createGlow(this.errorColor, 0.8, true); + this.scene.add(this.errorGlow); + } + this.errorGlow.position.copy(vec3); + } + + /** */ + public hideError() { + if (this.error) { + this.error = false; + this.scene.remove(this.errorGlow); + } + } + + /** */ + private objectHalfSize(): THREE.Vector3 { + var objectBox = new THREE.Box3(); + objectBox.setFromObject(this); + return objectBox.max.clone().sub(objectBox.min).divideScalar(2); + } + + /** */ + public createGlow(color, opacity, ignoreDepth): THREE.Mesh { + ignoreDepth = ignoreDepth || false + opacity = opacity || 0.2; + var glowMaterial = new THREE.MeshBasicMaterial({ + color: color, + blending: THREE.AdditiveBlending, + opacity: 0.2, + transparent: true, + depthTest: !ignoreDepth + }); + + var glow = new THREE.Mesh(this.geometry.clone(), glowMaterial); + glow.position.copy(this.position); + glow.rotation.copy(this.rotation); + glow.scale.copy(this.scale); + return glow; + }; + } +} diff --git a/src/blueprint3d/items/metadata.ts b/src/blueprint3d/items/metadata.ts new file mode 100644 index 0000000..93699d2 --- /dev/null +++ b/src/blueprint3d/items/metadata.ts @@ -0,0 +1,16 @@ +module BP3D.Items { + /** Meta data for items. */ + export interface Metadata { + /** Name of the item. */ + itemName?: string; + + /** Type of the item. */ + itemType?: number; + + /** Url of the model. */ + modelUrl?: string; + + /** Resizeable or not */ + resizable?: boolean; + } +} \ No newline at end of file diff --git a/src/blueprint3d/items/on_floor_item.ts b/src/blueprint3d/items/on_floor_item.ts new file mode 100644 index 0000000..0093086 --- /dev/null +++ b/src/blueprint3d/items/on_floor_item.ts @@ -0,0 +1,15 @@ +/// +/// +/// +/// + +module BP3D.Items { + /** */ + export abstract class OnFloorItem extends FloorItem { + constructor(model: Model.Model, metadata: Metadata, geometry: THREE.Geometry, material: THREE.MeshFaceMaterial, position: THREE.Vector3, rotation: number, scale: THREE.Vector3) { + super(model, metadata, geometry, material, position, rotation, scale); + this.obstructFloorMoves = false; + this.receiveShadow = true; + }; + } +} \ No newline at end of file diff --git a/src/blueprint3d/items/wall_floor_item.ts b/src/blueprint3d/items/wall_floor_item.ts new file mode 100644 index 0000000..9895f5a --- /dev/null +++ b/src/blueprint3d/items/wall_floor_item.ts @@ -0,0 +1,14 @@ +/// +/// +/// +/// + +module BP3D.Items { + /** */ + export abstract class WallFloorItem extends WallItem { + constructor(model: Model.Model, metadata: Metadata, geometry: THREE.Geometry, material: THREE.MeshFaceMaterial, position: THREE.Vector3, rotation: number, scale: THREE.Vector3) { + super(model, metadata, geometry, material, position, rotation, scale); + this.boundToFloor = true; + }; + } +} diff --git a/src/blueprint3d/items/wall_item.ts b/src/blueprint3d/items/wall_item.ts new file mode 100644 index 0000000..0919fac --- /dev/null +++ b/src/blueprint3d/items/wall_item.ts @@ -0,0 +1,221 @@ +/// +/// +/// +/// +/// +/// + +namespace BP3D.Items { + /** + * A Wall Item is an entity to be placed related to a wall. + */ + export abstract class WallItem extends Item { + /** The currently applied wall edge. */ + protected currentWallEdge: Model.HalfEdge = null; + /* TODO: + This caused a huge headache. + HalfEdges get destroyed/created every time floorplan is edited. + This item should store a reference to a wall and front/back, + and grab its edge reference dynamically whenever it needs it. + */ + + /** used for finding rotations */ + private refVec = new THREE.Vector2(0, 1.0); + + /** */ + private wallOffsetScalar = 0; + + /** */ + private sizeX = 0; + + /** */ + private sizeY = 0; + + /** */ + protected addToWall = false; + + /** */ + protected boundToFloor = false; + + /** */ + protected frontVisible = false; + + /** */ + protected backVisible = false; + + constructor(model: Model.Model, metadata: Metadata, geometry: THREE.Geometry, material: THREE.MeshFaceMaterial, position: THREE.Vector3, rotation: number, scale: THREE.Vector3) { + super(model, metadata, geometry, material, position, rotation, scale); + + this.allowRotate = false; + }; + + /** Get the closet wall edge. + * @returns The wall edge. + */ + public closestWallEdge(): Model.HalfEdge { + + var wallEdges = this.model.floorplan.wallEdges(); + + var wallEdge = null; + var minDistance = null; + + var itemX = this.position.x; + var itemZ = this.position.z; + + wallEdges.forEach((edge: Model.HalfEdge) => { + var distance = edge.distanceTo(itemX, itemZ); + if (minDistance === null || distance < minDistance) { + minDistance = distance; + wallEdge = edge; + } + }); + + return wallEdge; + } + + /** */ + public removed() { + if (this.currentWallEdge != null && this.addToWall) { + Core.Utils.removeValue(this.currentWallEdge.wall.items, this); + this.redrawWall(); + } + } + + /** */ + private redrawWall() { + if (this.addToWall) { + this.currentWallEdge.wall.fireRedraw(); + } + } + + /** */ + private updateEdgeVisibility(visible: boolean, front: boolean) { + if (front) { + this.frontVisible = visible; + } else { + this.backVisible = visible; + } + this.visible = (this.frontVisible || this.backVisible); + } + + /** */ + private updateSize() { + this.wallOffsetScalar = (this.geometry.boundingBox.max.z - this.geometry.boundingBox.min.z) * this.scale.z / 2.0; + this.sizeX = (this.geometry.boundingBox.max.x - this.geometry.boundingBox.min.x) * this.scale.x; + this.sizeY = (this.geometry.boundingBox.max.y - this.geometry.boundingBox.min.y) * this.scale.y; + } + + /** */ + public resized() { + if (this.boundToFloor) { + this.position.y = 0.5 * (this.geometry.boundingBox.max.y - this.geometry.boundingBox.min.y) * this.scale.y + 0.01; + } + + this.updateSize(); + this.redrawWall(); + } + + /** */ + public placeInRoom() { + var closestWallEdge = this.closestWallEdge(); + this.changeWallEdge(closestWallEdge); + this.updateSize(); + + if (!this.position_set) { + // position not set + var center = closestWallEdge.interiorCenter(); + var newPos = new THREE.Vector3( + center.x, + closestWallEdge.wall.height / 2.0, + center.y); + this.boundMove(newPos); + this.position.copy(newPos); + this.redrawWall(); + } + }; + + /** */ + public moveToPosition(vec3, intersection) { + this.changeWallEdge(intersection.object.edge); + this.boundMove(vec3); + this.position.copy(vec3); + this.redrawWall(); + } + + /** */ + protected getWallOffset() { + return this.wallOffsetScalar; + } + + /** */ + private changeWallEdge(wallEdge) { + if (this.currentWallEdge != null) { + if (this.addToWall) { + Core.Utils.removeValue(this.currentWallEdge.wall.items, this); + this.redrawWall(); + } else { + Core.Utils.removeValue(this.currentWallEdge.wall.onItems, this); + } + } + + // handle subscription to wall being removed + if (this.currentWallEdge != null) { + this.currentWallEdge.wall.dontFireOnDelete(this.remove.bind(this)); + } + wallEdge.wall.fireOnDelete(this.remove.bind(this)); + + // find angle between wall normals + var normal2 = new THREE.Vector2(); + var normal3 = wallEdge.plane.geometry.faces[0].normal; + normal2.x = normal3.x; + normal2.y = normal3.z; + + var angle = Core.Utils.angle( + this.refVec.x, this.refVec.y, + normal2.x, normal2.y); + this.rotation.y = angle; + + // update currentWall + this.currentWallEdge = wallEdge; + if (this.addToWall) { + wallEdge.wall.items.push(this); + this.redrawWall(); + } else { + wallEdge.wall.onItems.push(this); + } + } + + /** Returns an array of planes to use other than the ground plane + * for passing intersection to clickPressed and clickDragged */ + public customIntersectionPlanes() { + return this.model.floorplan.wallEdgePlanes(); + } + + /** takes the move vec3, and makes sure object stays bounded on plane */ + private boundMove(vec3) { + var tolerance = 1; + var edge = this.currentWallEdge; + vec3.applyMatrix4(edge.interiorTransform); + + if (vec3.x < this.sizeX / 2.0 + tolerance) { + vec3.x = this.sizeX / 2.0 + tolerance; + } else if (vec3.x > (edge.interiorDistance() - this.sizeX / 2.0 - tolerance)) { + vec3.x = edge.interiorDistance() - this.sizeX / 2.0 - tolerance; + } + + if (this.boundToFloor) { + vec3.y = 0.5 * (this.geometry.boundingBox.max.y - this.geometry.boundingBox.min.y) * this.scale.y + 0.01; + } else { + if (vec3.y < this.sizeY / 2.0 + tolerance) { + vec3.y = this.sizeY / 2.0 + tolerance; + } else if (vec3.y > edge.height - this.sizeY / 2.0 - tolerance) { + vec3.y = edge.height - this.sizeY / 2.0 - tolerance; + } + } + + vec3.z = this.getWallOffset(); + + vec3.applyMatrix4(edge.invInteriorTransform); + } + } +} diff --git a/src/blueprint3d/model/corner.ts b/src/blueprint3d/model/corner.ts new file mode 100644 index 0000000..91f147d --- /dev/null +++ b/src/blueprint3d/model/corner.ts @@ -0,0 +1,344 @@ +/// +/// +/// +/// + +module BP3D.Model { + /** */ + const cornerTolerance: number = 20; + + /** + * Corners are used to define Walls. + */ + export class Corner { + + /** Array of start walls. */ + private wallStarts: Wall[] = []; + + /** Array of end walls. */ + private wallEnds: Wall[] = []; + + /** Callbacks to be fired on movement. */ + private moved_callbacks = $.Callbacks(); + + /** Callbacks to be fired on removal. */ + private deleted_callbacks = $.Callbacks(); + + /** Callbacks to be fired in case of action. */ + private action_callbacks = $.Callbacks(); + + /** Constructs a corner. + * @param floorplan The associated floorplan. + * @param x X coordinate. + * @param y Y coordinate. + * @param id An optional unique id. If not set, created internally. + */ + constructor(private floorplan: Floorplan, public x: number, public y: number, public id?: string) { + this.id = id || Core.Utils.guid(); + } + + /** Add function to moved callbacks. + * @param func The function to be added. + */ + public fireOnMove(func) { + this.moved_callbacks.add(func); + } + + /** Add function to deleted callbacks. + * @param func The function to be added. + */ + public fireOnDelete(func) { + this.deleted_callbacks.add(func); + } + + /** Add function to action callbacks. + * @param func The function to be added. + */ + public fireOnAction(func) { + this.action_callbacks.add(func); + } + + /** + * @returns + * @deprecated + */ + public getX(): number { + return this.x; + } + + /** + * @returns + * @deprecated + */ + public getY(): number { + return this.y; + } + + /** + * + */ + public snapToAxis(tolerance: number): { x: boolean, y: boolean } { + // try to snap this corner to an axis + var snapped = { + x: false, + y: false + }; + + var scope = this; + + this.adjacentCorners().forEach((corner) => { + if (Math.abs(corner.x - scope.x) < tolerance) { + scope.x = corner.x; + snapped.x = true; + } + if (Math.abs(corner.y - scope.y) < tolerance) { + scope.y = corner.y; + snapped.y = true; + } + }); + return snapped; + } + + /** Moves corner relatively to new position. + * @param dx The delta x. + * @param dy The delta y. + */ + public relativeMove(dx: number, dy: number) { + this.move(this.x + dx, this.y + dy); + } + + private fireAction(action) { + this.action_callbacks.fire(action) + } + + /** Remove callback. Fires the delete callbacks. */ + public remove() { + this.deleted_callbacks.fire(this); + } + + /** Removes all walls. */ + private removeAll() { + for (var i = 0; i < this.wallStarts.length; i++) { + this.wallStarts[i].remove(); + } + for (var i = 0; i < this.wallEnds.length; i++) { + this.wallEnds[i].remove(); + } + this.remove() + } + + /** Moves corner to new position. + * @param newX The new x position. + * @param newY The new y position. + */ + private move(newX: number, newY: number) { + this.x = newX; + this.y = newY; + this.mergeWithIntersected(); + this.moved_callbacks.fire(this.x, this.y); + + this.wallStarts.forEach((wall) => { + wall.fireMoved(); + }); + + this.wallEnds.forEach((wall) => { + wall.fireMoved(); + }); + } + + /** Gets the adjacent corners. + * @returns Array of corners. + */ + public adjacentCorners(): Corner[] { + var retArray = []; + for (var i = 0; i < this.wallStarts.length; i++) { + retArray.push(this.wallStarts[i].getEnd()); + } + for (var i = 0; i < this.wallEnds.length; i++) { + retArray.push(this.wallEnds[i].getStart()); + } + return retArray; + } + + /** Checks if a wall is connected. + * @param wall A wall. + * @returns True in case of connection. + */ + private isWallConnected(wall: Wall): boolean { + for (var i = 0; i < this.wallStarts.length; i++) { + if (this.wallStarts[i] == wall) { + return true; + } + } + for (var i = 0; i < this.wallEnds.length; i++) { + if (this.wallEnds[i] == wall) { + return true; + } + } + return false; + } + + /** + * + */ + public distanceFrom(x: number, y: number): number { + var distance = Core.Utils.distance(x, y, this.x, this.y); + //console.log('x,y ' + x + ',' + y + ' to ' + this.getX() + ',' + this.getY() + ' is ' + distance); + return distance; + } + + /** Gets the distance from a wall. + * @param wall A wall. + * @returns The distance. + */ + public distanceFromWall(wall: Wall): number { + return wall.distanceFrom(this.x, this.y); + } + + /** Gets the distance from a corner. + * @param corner A corner. + * @returns The distance. + */ + public distanceFromCorner(corner: Corner): number { + return this.distanceFrom(corner.x, corner.y); + } + + /** Detaches a wall. + * @param wall A wall. + */ + public detachWall(wall: Wall) { + Core.Utils.removeValue(this.wallStarts, wall); + Core.Utils.removeValue(this.wallEnds, wall); + if (this.wallStarts.length == 0 && this.wallEnds.length == 0) { + this.remove(); + } + } + + /** Attaches a start wall. + * @param wall A wall. + */ + public attachStart(wall: Wall) { + this.wallStarts.push(wall) + } + + /** Attaches an end wall. + * @param wall A wall. + */ + public attachEnd(wall: Wall) { + this.wallEnds.push(wall) + } + + /** Get wall to corner. + * @param corner A corner. + * @return The associated wall or null. + */ + public wallTo(corner: Corner): Wall { + for (var i = 0; i < this.wallStarts.length; i++) { + if (this.wallStarts[i].getEnd() === corner) { + return this.wallStarts[i]; + } + } + return null; + } + + /** Get wall from corner. + * @param corner A corner. + * @return The associated wall or null. + */ + public wallFrom(corner: Corner): Wall { + for (var i = 0; i < this.wallEnds.length; i++) { + if (this.wallEnds[i].getStart() === corner) { + return this.wallEnds[i]; + } + } + return null; + } + + /** Get wall to or from corner. + * @param corner A corner. + * @return The associated wall or null. + */ + public wallToOrFrom(corner: Corner): Wall { + return this.wallTo(corner) || this.wallFrom(corner); + } + + /** + * + */ + private combineWithCorner(corner: Corner) { + // update position to other corner's + this.x = corner.x; + this.y = corner.y; + // absorb the other corner's wallStarts and wallEnds + for (var i = corner.wallStarts.length - 1; i >= 0; i--) { + corner.wallStarts[i].setStart(this); + } + for (var i = corner.wallEnds.length - 1; i >= 0; i--) { + corner.wallEnds[i].setEnd(this); + } + // delete the other corner + corner.removeAll(); + this.removeDuplicateWalls(); + this.floorplan.update(); + } + + public mergeWithIntersected(): boolean { + //console.log('mergeWithIntersected for object: ' + this.type); + // check corners + for (var i = 0; i < this.floorplan.getCorners().length; i++) { + var corner = this.floorplan.getCorners()[i]; + if (this.distanceFromCorner(corner) < cornerTolerance && corner != this) { + this.combineWithCorner(corner); + return true; + } + } + // check walls + for (var i = 0; i < this.floorplan.getWalls().length; i++) { + var wall = this.floorplan.getWalls()[i]; + if (this.distanceFromWall(wall) < cornerTolerance && !this.isWallConnected(wall)) { + // update position to be on wall + var intersection = Core.Utils.closestPointOnLine(this.x, this.y, + wall.getStart().x, wall.getStart().y, + wall.getEnd().x, wall.getEnd().y); + this.x = intersection.x; + this.y = intersection.y; + // merge this corner into wall by breaking wall into two parts + this.floorplan.newWall(this, wall.getEnd()); + wall.setEnd(this); + this.floorplan.update(); + return true; + } + } + return false; + } + + /** Ensure we do not have duplicate walls (i.e. same start and end points) */ + private removeDuplicateWalls() { + // delete the wall between these corners, if it exists + var wallEndpoints = {}; + var wallStartpoints = {}; + for (var i = this.wallStarts.length - 1; i >= 0; i--) { + if (this.wallStarts[i].getEnd() === this) { + // remove zero length wall + this.wallStarts[i].remove(); + } else if (this.wallStarts[i].getEnd().id in wallEndpoints) { + // remove duplicated wall + this.wallStarts[i].remove(); + } else { + wallEndpoints[this.wallStarts[i].getEnd().id] = true; + } + } + for (var i = this.wallEnds.length - 1; i >= 0; i--) { + if (this.wallEnds[i].getStart() === this) { + // removed zero length wall + this.wallEnds[i].remove(); + } else if (this.wallEnds[i].getStart().id in wallStartpoints) { + // removed duplicated wall + this.wallEnds[i].remove(); + } else { + wallStartpoints[this.wallEnds[i].getStart().id] = true; + } + } + } + } +} diff --git a/src/blueprint3d/model/floorplan.ts b/src/blueprint3d/model/floorplan.ts new file mode 100644 index 0000000..12304cb --- /dev/null +++ b/src/blueprint3d/model/floorplan.ts @@ -0,0 +1,496 @@ +/// +/// +/// +/// +/// +/// +/// + +module BP3D.Model { + /** */ + const defaultFloorPlanTolerance = 10.0; + + /** + * A Floorplan represents a number of Walls, Corners and Rooms. + */ + export class Floorplan { + + /** */ + private walls: Wall[] = []; + + /** */ + private corners: Corner[] = []; + + /** */ + private rooms: Room[] = []; + + /** */ + private new_wall_callbacks = $.Callbacks(); + + /** */ + private new_corner_callbacks = $.Callbacks(); + + /** */ + private redraw_callbacks = $.Callbacks(); + + /** */ + private updated_rooms = $.Callbacks(); + + /** */ + public roomLoadedCallbacks = $.Callbacks(); + + /** + * Floor textures are owned by the floorplan, because room objects are + * destroyed and created each time we change the floorplan. + * floorTextures is a map of room UUIDs (string) to a object with + * url and scale attributes. + */ + private floorTextures = {}; + + /** Constructs a floorplan. */ + constructor() { + } + + // hack + public wallEdges(): HalfEdge[] { + var edges = [] + + this.walls.forEach((wall) => { + if (wall.frontEdge) { + edges.push(wall.frontEdge); + } + if (wall.backEdge) { + edges.push(wall.backEdge); + } + }); + return edges; + } + + // hack + public wallEdgePlanes(): THREE.Mesh[] { + var planes = [] + this.walls.forEach((wall) => { + if (wall.frontEdge) { + planes.push(wall.frontEdge.plane); + } + if (wall.backEdge) { + planes.push(wall.backEdge.plane); + } + }); + return planes; + } + + private floorPlanes(): THREE.Mesh[] { + return Core.Utils.map(this.rooms, (room: Room) => { + return room.floorPlane; + }); + } + + public fireOnNewWall(callback) { + this.new_wall_callbacks.add(callback); + } + + public fireOnNewCorner(callback) { + this.new_corner_callbacks.add(callback); + } + + public fireOnRedraw(callback) { + this.redraw_callbacks.add(callback); + } + + public fireOnUpdatedRooms(callback) { + this.updated_rooms.add(callback); + } + + /** + * Creates a new wall. + * @param start The start corner. + * @param end he end corner. + * @returns The new wall. + */ + public newWall(start: Corner, end: Corner): Wall { + var wall = new Wall(start, end); + this.walls.push(wall) + var scope = this; + wall.fireOnDelete(() => { + scope.removeWall(wall); + }); + this.new_wall_callbacks.fire(wall); + this.update(); + return wall; + } + + /** Removes a wall. + * @param wall The wall to be removed. + */ + private removeWall(wall: Wall) { + Core.Utils.removeValue(this.walls, wall); + this.update(); + } + + /** + * Creates a new corner. + * @param x The x coordinate. + * @param y The y coordinate. + * @param id An optional id. If unspecified, the id will be created internally. + * @returns The new corner. + */ + public newCorner(x: number, y: number, id?: string): Corner { + var corner = new Corner(this, x, y, id); + this.corners.push(corner); + corner.fireOnDelete(() => { + this.removeCorner; + }); + this.new_corner_callbacks.fire(corner); + return corner; + } + + /** Removes a corner. + * @param corner The corner to be removed. + */ + private removeCorner(corner: Corner) { + Core.Utils.removeValue(this.corners, corner); + } + + /** Gets the walls. */ + public getWalls(): Wall[] { + return this.walls; + } + + /** Gets the corners. */ + public getCorners(): Corner[] { + return this.corners; + } + + /** Gets the rooms. */ + public getRooms(): Room[] { + return this.rooms; + } + + public overlappedCorner(x: number, y: number, tolerance?: number): Corner { + tolerance = tolerance || defaultFloorPlanTolerance; + for (var i = 0; i < this.corners.length; i++) { + if (this.corners[i].distanceFrom(x, y) < tolerance) { + return this.corners[i]; + } + } + return null; + } + + public overlappedWall(x: number, y: number, tolerance?: number): Wall { + tolerance = tolerance || defaultFloorPlanTolerance; + for (var i = 0; i < this.walls.length; i++) { + if (this.walls[i].distanceFrom(x, y) < tolerance) { + return this.walls[i]; + } + } + return null; + } + + // import and export -- cleanup + + public saveFloorplan() { + var floorplan = { + corners: {}, + walls: [], + wallTextures: [], + floorTextures: {}, + newFloorTextures: {} + } + + this.corners.forEach((corner) => { + floorplan.corners[corner.id] = { + 'x': corner.x, + 'y': corner.y + }; + }); + + this.walls.forEach((wall) => { + floorplan.walls.push({ + 'corner1': wall.getStart().id, + 'corner2': wall.getEnd().id, + 'frontTexture': wall.frontTexture, + 'backTexture': wall.backTexture + }); + }); + floorplan.newFloorTextures = this.floorTextures; + return floorplan; + } + + public loadFloorplan(floorplan) { + this.reset(); + + var corners = {}; + if (floorplan == null || !('corners' in floorplan) || !('walls' in floorplan)) { + return + } + for (var id in floorplan.corners) { + var corner = floorplan.corners[id]; + corners[id] = this.newCorner(corner.x, corner.y, id); + } + var scope = this; + floorplan.walls.forEach((wall) => { + var newWall = scope.newWall( + corners[wall.corner1], corners[wall.corner2]); + if (wall.frontTexture) { + newWall.frontTexture = wall.frontTexture; + } + if (wall.backTexture) { + newWall.backTexture = wall.backTexture; + } + }); + + if ('newFloorTextures' in floorplan) { + this.floorTextures = floorplan.newFloorTextures; + } + + this.update(); + this.roomLoadedCallbacks.fire(); + } + + public getFloorTexture(uuid: string) { + if (uuid in this.floorTextures) { + return this.floorTextures[uuid]; + } else { + return null; + } + } + + public setFloorTexture(uuid: string, url: string, scale: number) { + this.floorTextures[uuid] = { + url: url, + scale: scale + } + } + + /** clear out obsolete floor textures */ + private updateFloorTextures() { + var uuids = Core.Utils.map(this.rooms, function (room) { + return room.getUuid(); + }); + for (var uuid in this.floorTextures) { + if (!Core.Utils.hasValue(uuids, uuid)) { + delete this.floorTextures[uuid] + } + } + } + + /** */ + private reset() { + var tmpCorners = this.corners.slice(0); + var tmpWalls = this.walls.slice(0); + tmpCorners.forEach((corner) => { + corner.remove(); + }) + tmpWalls.forEach((wall) => { + wall.remove(); + }) + this.corners = []; + this.walls = []; + } + + /** + * Update rooms + */ + public update() { + this.walls.forEach((wall) => { + wall.resetFrontBack(); + }); + + var roomCorners = this.findRooms(this.corners); + this.rooms = []; + var scope = this; + roomCorners.forEach((corners) => { + scope.rooms.push(new Room(scope, corners)); + }); + this.assignOrphanEdges(); + + this.updateFloorTextures(); + this.updated_rooms.fire(); + } + + /** + * Returns the center of the floorplan in the y plane + */ + public getCenter() { + return this.getDimensions(true); + } + + public getSize() { + return this.getDimensions(false); + } + + public getDimensions(center) { + center = center || false; // otherwise, get size + + var xMin = Infinity; + var xMax = -Infinity; + var zMin = Infinity; + var zMax = -Infinity; + this.corners.forEach((corner) => { + if (corner.x < xMin) xMin = corner.x; + if (corner.x > xMax) xMax = corner.x; + if (corner.y < zMin) zMin = corner.y; + if (corner.y > zMax) zMax = corner.y; + }); + var ret; + if (xMin == Infinity || xMax == -Infinity || zMin == Infinity || zMax == -Infinity) { + ret = new THREE.Vector3(); + } else { + if (center) { + // center + ret = new THREE.Vector3((xMin + xMax) * 0.5, 0, (zMin + zMax) * 0.5); + } else { + // size + ret = new THREE.Vector3((xMax - xMin), 0, (zMax - zMin)); + } + } + return ret; + } + + private assignOrphanEdges() { + // kinda hacky + // find orphaned wall segments (i.e. not part of rooms) and + // give them edges + var orphanWalls = [] + this.walls.forEach((wall) => { + if (!wall.backEdge && !wall.frontEdge) { + wall.orphan = true; + var back = new HalfEdge(null, wall, false); + back.generatePlane(); + var front = new HalfEdge(null, wall, true); + front.generatePlane(); + orphanWalls.push(wall); + } + }); + + } + + /* + * Find the "rooms" in our planar straight-line graph. + * Rooms are set of the smallest (by area) possible cycles in this graph. + * @param corners The corners of the floorplan. + * @returns The rooms, each room as an array of corners. + */ + public findRooms(corners: Corner[]): Corner[][] { + + function _calculateTheta(previousCorner: Corner, currentCorner: Corner, nextCorner: Corner) { + var theta = Core.Utils.angle2pi( + previousCorner.x - currentCorner.x, + previousCorner.y - currentCorner.y, + nextCorner.x - currentCorner.x, + nextCorner.y - currentCorner.y); + return theta; + } + + function _removeDuplicateRooms(roomArray: Corner[][]): Corner[][] { + var results: Corner[][] = []; + var lookup = {}; + var hashFunc = function (corner) { + return corner.id + }; + var sep = '-'; + for (var i = 0; i < roomArray.length; i++) { + // rooms are cycles, shift it around to check uniqueness + var add = true; + var room = roomArray[i]; + for (var j = 0; j < room.length; j++) { + var roomShift = Core.Utils.cycle(room, j); + var str = Core.Utils.map(roomShift, hashFunc).join(sep); + if (lookup.hasOwnProperty(str)) { + add = false; + } + } + if (add) { + results.push(roomArray[i]); + lookup[str] = true; + } + } + return results; + } + + function _findTightestCycle(firstCorner: Corner, secondCorner: Corner): Corner[] { + var stack: { + corner: Corner, + previousCorners: Corner[] + }[] = []; + + var next = { + corner: secondCorner, + previousCorners: [firstCorner] + }; + var visited = {}; + visited[firstCorner.id] = true; + + while (next) { + // update previous corners, current corner, and visited corners + var currentCorner = next.corner; + visited[currentCorner.id] = true; + + // did we make it back to the startCorner? + if (next.corner === firstCorner && currentCorner !== secondCorner) { + return next.previousCorners; + } + + var addToStack: Corner[] = []; + var adjacentCorners = next.corner.adjacentCorners(); + for (var i = 0; i < adjacentCorners.length; i++) { + var nextCorner = adjacentCorners[i]; + + // is this where we came from? + // give an exception if its the first corner and we aren't at the second corner + if (nextCorner.id in visited && + !(nextCorner === firstCorner && currentCorner !== secondCorner)) { + continue; + } + + // nope, throw it on the queue + addToStack.push(nextCorner); + } + + var previousCorners = next.previousCorners.slice(0); + previousCorners.push(currentCorner); + if (addToStack.length > 1) { + // visit the ones with smallest theta first + var previousCorner = next.previousCorners[next.previousCorners.length - 1]; + addToStack.sort(function (a, b) { + return (_calculateTheta(previousCorner, currentCorner, b) - + _calculateTheta(previousCorner, currentCorner, a)); + }); + } + + if (addToStack.length > 0) { + // add to the stack + addToStack.forEach((corner) => { + stack.push({ + corner: corner, + previousCorners: previousCorners + }); + }); + } + + // pop off the next one + next = stack.pop(); + } + return []; + } + + // find tightest loops, for each corner, for each adjacent + // TODO: optimize this, only check corners with > 2 adjacents, or isolated cycles + var loops: Corner[][] = []; + + corners.forEach((firstCorner) => { + firstCorner.adjacentCorners().forEach((secondCorner) => { + loops.push(_findTightestCycle(firstCorner, secondCorner)); + }); + }); + + // remove duplicates + var uniqueLoops = _removeDuplicateRooms(loops); + //remove CW loops + var uniqueCCWLoops = Core.Utils.removeIf(uniqueLoops, Core.Utils.isClockwise); + + return uniqueCCWLoops; + } + } +} diff --git a/src/blueprint3d/model/half_edge.ts b/src/blueprint3d/model/half_edge.ts new file mode 100644 index 0000000..bb2ed19 --- /dev/null +++ b/src/blueprint3d/model/half_edge.ts @@ -0,0 +1,296 @@ +/// +/// +/// + +module BP3D.Model { + /** + * Half Edges are created by Room. + * + * Once rooms have been identified, Half Edges are created for each interior wall. + * + * A wall can have two half edges if it is visible from both sides. + */ + export class HalfEdge { + + /** The successor edge in CCW ??? direction. */ + public next: HalfEdge; + + /** The predecessor edge in CCW ??? direction. */ + public prev: HalfEdge; + + /** */ + public offset: number; + + /** */ + public height: number; + + /** used for intersection testing... not convinced this belongs here */ + public plane: THREE.Mesh = null; + + /** transform from world coords to wall planes (z=0) */ + public interiorTransform = new THREE.Matrix4(); + + /** transform from world coords to wall planes (z=0) */ + public invInteriorTransform = new THREE.Matrix4(); + + /** transform from world coords to wall planes (z=0) */ + private exteriorTransform = new THREE.Matrix4(); + + /** transform from world coords to wall planes (z=0) */ + private invExteriorTransform = new THREE.Matrix4(); + + /** */ + public redrawCallbacks = $.Callbacks(); + + /** + * Constructs a half edge. + * @param room The associated room. + * @param wall The corresponding wall. + * @param front True if front side. + */ + constructor(private room: Room, public wall: Wall, private front: boolean) { + this.front = front || false; + + this.offset = wall.thickness / 2.0; + this.height = wall.height; + + if (this.front) { + this.wall.frontEdge = this; + } else { + this.wall.backEdge = this; + } + } + + /** + * + */ + public getTexture() { + if (this.front) { + return this.wall.frontTexture; + } else { + return this.wall.backTexture; + } + } + + /** + * + */ + public setTexture(textureUrl: string, textureStretch: boolean, textureScale: number) { + var texture = { + url: textureUrl, + stretch: textureStretch, + scale: textureScale + } + if (this.front) { + this.wall.frontTexture = texture; + } else { + this.wall.backTexture = texture; + } + this.redrawCallbacks.fire(); + } + + /** + * this feels hacky, but need wall items + */ + public generatePlane = function () { + + function transformCorner(corner) { + return new THREE.Vector3(corner.x, 0, corner.y); + } + + var v1 = transformCorner(this.interiorStart()); + var v2 = transformCorner(this.interiorEnd()); + var v3 = v2.clone(); + v3.y = this.wall.height; + var v4 = v1.clone(); + v4.y = this.wall.height; + + var geometry = new THREE.Geometry(); + geometry.vertices = [v1, v2, v3, v4]; + + geometry.faces.push(new THREE.Face3(0, 1, 2)); + geometry.faces.push(new THREE.Face3(0, 2, 3)); + geometry.computeFaceNormals(); + geometry.computeBoundingBox(); + + this.plane = new THREE.Mesh(geometry, + new THREE.MeshBasicMaterial()); + this.plane.visible = false; + this.plane.edge = this; // js monkey patch + + this.computeTransforms( + this.interiorTransform, this.invInteriorTransform, + this.interiorStart(), this.interiorEnd()); + this.computeTransforms( + this.exteriorTransform, this.invExteriorTransform, + this.exteriorStart(), this.exteriorEnd()); + } + + public interiorDistance(): number { + var start = this.interiorStart(); + var end = this.interiorEnd(); + return Core.Utils.distance(start.x, start.y, end.x, end.y); + } + + private computeTransforms(transform, invTransform, start, end) { + + var v1 = start; + var v2 = end; + + var angle = Core.Utils.angle(1, 0, v2.x - v1.x, v2.y - v1.y); + + var tt = new THREE.Matrix4(); + tt.makeTranslation(-v1.x, 0, -v1.y); + var tr = new THREE.Matrix4(); + tr.makeRotationY(-angle); + transform.multiplyMatrices(tr, tt); + invTransform.getInverse(transform); + } + + /** Gets the distance from specified point. + * @param x X coordinate of the point. + * @param y Y coordinate of the point. + * @returns The distance. + */ + public distanceTo(x: number, y: number): number { + // x, y, x1, y1, x2, y2 + return Core.Utils.pointDistanceFromLine(x, y, + this.interiorStart().x, + this.interiorStart().y, + this.interiorEnd().x, + this.interiorEnd().y); + } + + private getStart() { + if (this.front) { + return this.wall.getStart(); + } else { + return this.wall.getEnd(); + } + } + + private getEnd() { + if (this.front) { + return this.wall.getEnd(); + } else { + return this.wall.getStart(); + } + } + + private getOppositeEdge(): HalfEdge { + if (this.front) { + return this.wall.backEdge; + } else { + return this.wall.frontEdge; + } + } + + // these return an object with attributes x, y + public interiorEnd(): {x: number, y: number} { + var vec = this.halfAngleVector(this, this.next); + return { + x: this.getEnd().x + vec.x, + y: this.getEnd().y + vec.y + } + } + + public interiorStart(): {x: number, y: number} { + var vec = this.halfAngleVector(this.prev, this); + return { + x: this.getStart().x + vec.x, + y: this.getStart().y + vec.y + } + } + + public interiorCenter(): {x: number, y: number} { + return { + x: (this.interiorStart().x + this.interiorEnd().x) / 2.0, + y: (this.interiorStart().y + this.interiorEnd().y) / 2.0, + } + } + + public exteriorEnd(): {x: number, y: number} { + var vec = this.halfAngleVector(this, this.next); + return { + x: this.getEnd().x - vec.x, + y: this.getEnd().y - vec.y + } + } + + public exteriorStart(): {x: number, y: number} { + var vec = this.halfAngleVector(this.prev, this); + return { + x: this.getStart().x - vec.x, + y: this.getStart().y - vec.y + } + } + + /** Get the corners of the half edge. + * @returns An array of x,y pairs. + */ + public corners(): {x: number, y: number}[] { + return [this.interiorStart(), this.interiorEnd(), + this.exteriorEnd(), this.exteriorStart()]; + } + + /** + * Gets CCW angle from v1 to v2 + */ + private halfAngleVector(v1: HalfEdge, v2: HalfEdge): { x: number, y: number } { + // make the best of things if we dont have prev or next + if (!v1) { + var v1startX = v2.getStart().x - (v2.getEnd().x - v2.getStart().x); + var v1startY = v2.getStart().y - (v2.getEnd().y - v2.getStart().y); + var v1endX = v2.getStart().x; + var v1endY = v2.getStart().y; + } else { + var v1startX = v1.getStart().x; + var v1startY = v1.getStart().y; + var v1endX = v1.getEnd().x; + var v1endY = v1.getEnd().y; + } + + if (!v2) { + var v2startX = v1.getEnd().x; + var v2startY = v1.getEnd().y; + var v2endX = v1.getEnd().x + (v1.getEnd().x - v1.getStart().x); + var v2endY = v1.getEnd().y + (v1.getEnd().y - v1.getStart().y); + } else { + var v2startX = v2.getStart().x; + var v2startY = v2.getStart().y; + var v2endX = v2.getEnd().x; + var v2endY = v2.getEnd().y; + } + + // CCW angle between edges + var theta = Core.Utils.angle2pi( + v1startX - v1endX, + v1startY - v1endY, + v2endX - v1endX, + v2endY - v1endY); + + // cosine and sine of half angle + var cs = Math.cos(theta / 2.0); + var sn = Math.sin(theta / 2.0); + + // rotate v2 + var v2dx = v2endX - v2startX; + var v2dy = v2endY - v2startY; + + var vx = v2dx * cs - v2dy * sn; + var vy = v2dx * sn + v2dy * cs; + + // normalize + var mag = Core.Utils.distance(0, 0, vx, vy); + var desiredMag = (this.offset) / sn; + var scalar = desiredMag / mag; + + var halfAngleVector = { + x: vx * scalar, + y: vy * scalar + } + + return halfAngleVector; + } + } +} \ No newline at end of file diff --git a/src/blueprint3d/model/index.ts b/src/blueprint3d/model/index.ts new file mode 100644 index 0000000..2f5567f --- /dev/null +++ b/src/blueprint3d/model/index.ts @@ -0,0 +1,4 @@ + +export class Model extends BP3D.Model.Model { } + +export class Corner extends BP3D.Model.Corner { } \ No newline at end of file diff --git a/src/blueprint3d/model/model.ts b/src/blueprint3d/model/model.ts new file mode 100644 index 0000000..e78c4c2 --- /dev/null +++ b/src/blueprint3d/model/model.ts @@ -0,0 +1,109 @@ +/// +/// +/// +/// + +module BP3D.Model { + /** + * A Model connects a Floorplan and a Scene. + */ + export class Model { + + /** */ + public floorplan: Floorplan; + + /** */ + public scene: Scene; + + /** */ + private roomLoadingCallbacks = $.Callbacks(); + + /** */ + private roomLoadedCallbacks = $.Callbacks(); + + /** name */ + private roomSavedCallbacks = $.Callbacks(); + + /** success (bool), copy (bool) */ + private roomDeletedCallbacks = $.Callbacks(); + + /** Constructs a new model. + * @param textureDir The directory containing the textures. + */ + constructor(textureDir: string) { + this.floorplan = new Floorplan(); + this.scene = new Scene(this, textureDir); + } + + private loadSerialized(json: string) { + // TODO: better documentation on serialization format. + // TODO: a much better serialization format. + this.roomLoadingCallbacks.fire(); + + var data = JSON.parse(json) + this.newRoom( + data.floorplan, + data.items + ); + + this.roomLoadedCallbacks.fire(); + } + + private exportSerialized(): string { + var items_arr = []; + var objects = this.scene.getItems(); + for (var i = 0; i < objects.length; i++) { + var object = objects[i]; + items_arr[i] = { + item_name: object.metadata.itemName, + item_type: object.metadata.itemType, + model_url: object.metadata.modelUrl, + xpos: object.position.x, + ypos: object.position.y, + zpos: object.position.z, + rotation: object.rotation.y, + scale_x: object.scale.x, + scale_y: object.scale.y, + scale_z: object.scale.z, + fixed: object.fixed + }; + } + + var room = { + floorplan: (this.floorplan.saveFloorplan()), + items: items_arr + }; + + return JSON.stringify(room); + } + + private newRoom(floorplan: string, items) { + this.scene.clearItems(); + this.floorplan.loadFloorplan(floorplan); + items.forEach((item) => { + var position = new THREE.Vector3( + item.xpos, item.ypos, item.zpos); + var metadata = { + itemName: item.item_name, + resizable: item.resizable, + itemType: item.item_type, + modelUrl: item.model_url + }; + var scale = new THREE.Vector3( + item.scale_x, + item.scale_y, + item.scale_z + ); + this.scene.addItem( + item.item_type, + item.model_url, + metadata, + position, + item.rotation, + scale, + item.fixed); + }); + } + } +} + diff --git a/src/blueprint3d/model/room.ts b/src/blueprint3d/model/room.ts new file mode 100644 index 0000000..5fccfae --- /dev/null +++ b/src/blueprint3d/model/room.ts @@ -0,0 +1,162 @@ +/// +/// +/// +/// +/// +/// + +/* +TODO +var Vec2 = require('vec2') +var segseg = require('segseg') +var Polygon = require('polygon') +*/ + +module BP3D.Model { + + /** Default texture to be used if nothing is provided. */ + const defaultRoomTexture = { + url: "rooms/textures/hardwood.png", + scale: 400 + } + + /** + * A Room is the combination of a Floorplan with a floor plane. + */ + export class Room { + + /** */ + public interiorCorners: Corner[] = []; + + /** */ + private edgePointer = null; + + /** floor plane for intersection testing */ + public floorPlane: THREE.Mesh = null; + + /** */ + private customTexture = false; + + /** */ + private floorChangeCallbacks = $.Callbacks(); + + /** + * ordered CCW + */ + constructor(private floorplan: Floorplan, public corners: Corner[]) { + this.updateWalls(); + this.updateInteriorCorners(); + this.generatePlane(); + } + + private getUuid(): string { + var cornerUuids = Core.Utils.map(this.corners, function (c) { + return c.id; + }); + cornerUuids.sort(); + return cornerUuids.join(); + } + + public fireOnFloorChange(callback) { + this.floorChangeCallbacks.add(callback); + } + + private getTexture() { + var uuid = this.getUuid(); + var tex = this.floorplan.getFloorTexture(uuid); + return tex || defaultRoomTexture; + } + + /** + * textureStretch always true, just an argument for consistency with walls + */ + private setTexture(textureUrl: string, textureStretch, textureScale: number) { + var uuid = this.getUuid(); + this.floorplan.setFloorTexture(uuid, textureUrl, textureScale); + this.floorChangeCallbacks.fire(); + } + + private generatePlane() { + var points = []; + this.interiorCorners.forEach((corner) => { + points.push(new THREE.Vector2( + corner.x, + corner.y)); + }); + var shape = new THREE.Shape(points); + var geometry = new THREE.ShapeGeometry(shape); + this.floorPlane = new THREE.Mesh(geometry, + new THREE.MeshBasicMaterial({ + side: THREE.DoubleSide + })); + this.floorPlane.visible = false; + this.floorPlane.rotation.set(Math.PI / 2, 0, 0); + (this.floorPlane).room = this; // js monkey patch + } + + private cycleIndex(index) { + if (index < 0) { + return index += this.corners.length; + } else { + return index % this.corners.length; + } + } + + private updateInteriorCorners() { + var edge = this.edgePointer; + while (true) { + this.interiorCorners.push(edge.interiorStart()); + edge.generatePlane(); + if (edge.next === this.edgePointer) { + break; + } else { + edge = edge.next; + } + } + } + + /** + * Populates each wall's half edge relating to this room + * this creates a fancy doubly connected edge list (DCEL) + */ + private updateWalls() { + + var prevEdge = null; + var firstEdge = null; + + for (var i = 0; i < this.corners.length; i++) { + + var firstCorner = this.corners[i]; + var secondCorner = this.corners[(i + 1) % this.corners.length]; + + // find if wall is heading in that direction + var wallTo = firstCorner.wallTo(secondCorner); + var wallFrom = firstCorner.wallFrom(secondCorner); + + if (wallTo) { + var edge = new HalfEdge(this, wallTo, true); + } else if (wallFrom) { + var edge = new HalfEdge(this, wallFrom, false); + } else { + // something horrible has happened + console.log("corners arent connected by a wall, uh oh"); + } + + if (i == 0) { + firstEdge = edge; + } else { + edge.prev = prevEdge; + prevEdge.next = edge; + if (i + 1 == this.corners.length) { + firstEdge.prev = edge; + edge.next = firstEdge; + } + } + prevEdge = edge; + } + + // hold on to an edge reference + this.edgePointer = firstEdge; + } + } +} diff --git a/src/blueprint3d/model/scene.ts b/src/blueprint3d/model/scene.ts new file mode 100644 index 0000000..7738369 --- /dev/null +++ b/src/blueprint3d/model/scene.ts @@ -0,0 +1,143 @@ +/// +/// +/// +/// + +module BP3D.Model { + /** + * The Scene is a manager of Items and also links to a ThreeJS scene. + */ + export class Scene { + + /** The associated ThreeJS scene. */ + private scene: THREE.Scene; + + /** */ + private items: Items.Item[] = []; + + /** */ + public needsUpdate = false; + + /** The Json loader. */ + private loader: THREE.JSONLoader; + + /** */ + private itemLoadingCallbacks = $.Callbacks(); + + /** Item */ + private itemLoadedCallbacks = $.Callbacks(); + + /** Item */ + private itemRemovedCallbacks = $.Callbacks(); + + /** + * Constructs a scene. + * @param model The associated model. + * @param textureDir The directory from which to load the textures. + */ + constructor(private model: Model, private textureDir: string) { + this.scene = new THREE.Scene(); + + // init item loader + this.loader = new THREE.JSONLoader(); + this.loader.crossOrigin = ""; + } + + /** Adds a non-item, basically a mesh, to the scene. + * @param mesh The mesh to be added. + */ + public add(mesh: THREE.Mesh) { + this.scene.add(mesh); + } + + /** Removes a non-item, basically a mesh, from the scene. + * @param mesh The mesh to be removed. + */ + public remove(mesh: THREE.Mesh) { + this.scene.remove(mesh); + Core.Utils.removeValue(this.items, mesh); + } + + /** Gets the scene. + * @returns The scene. + */ + public getScene(): THREE.Scene { + return this.scene; + } + + /** Gets the items. + * @returns The items. + */ + public getItems(): Items.Item[] { + return this.items; + } + + /** Gets the count of items. + * @returns The count. + */ + public itemCount(): number { + return this.items.length + } + + /** Removes all items. */ + public clearItems() { + var items_copy = this.items + var scope = this; + this.items.forEach((item) => { + scope.removeItem(item, true); + }); + this.items = [] + } + + /** + * Removes an item. + * @param item The item to be removed. + * @param dontRemove If not set, also remove the item from the items list. + */ + public removeItem(item: Items.Item, dontRemove?: boolean) { + dontRemove = dontRemove || false; + // use this for item meshes + this.itemRemovedCallbacks.fire(item); + item.removed(); + this.scene.remove(item); + if (!dontRemove) { + Core.Utils.removeValue(this.items, item); + } + } + + /** + * Creates an item and adds it to the scene. + * @param itemType The type of the item given by an enumerator. + * @param fileName The name of the file to load. + * @param metadata TODO + * @param position The initial position. + * @param rotation The initial rotation around the y axis. + * @param scale The initial scaling. + * @param fixed True if fixed. + */ + public addItem(itemType: number, fileName: string, metadata, position: THREE.Vector3, rotation: number, scale: THREE.Vector3, fixed: boolean) { + itemType = itemType || 1; + var scope = this; + var loaderCallback = function (geometry: THREE.Geometry, materials: THREE.Material[]) { + var item = new (Items.Factory.getClass(itemType))( + scope.model, + metadata, geometry, + new THREE.MeshFaceMaterial(materials), + position, rotation, scale + ); + item.fixed = fixed || false; + scope.items.push(item); + scope.add(item); + item.initObject(); + scope.itemLoadedCallbacks.fire(item); + } + + this.itemLoadingCallbacks.fire(); + this.loader.load( + fileName, + loaderCallback, + undefined // TODO_Ekki + ); + } + } +} diff --git a/src/blueprint3d/model/wall.ts b/src/blueprint3d/model/wall.ts new file mode 100644 index 0000000..e3af69b --- /dev/null +++ b/src/blueprint3d/model/wall.ts @@ -0,0 +1,193 @@ +/// +/// +/// +/// +/// +/// +/// + +module BP3D.Model { + /** The default wall texture. */ + const defaultWallTexture = { + url: "rooms/textures/wallmap.png", + stretch: true, + scale: 0 + } + + /** + * A Wall is the basic element to create Rooms. + * + * Walls consists of two half edges. + */ + export class Wall { + + /** The unique id of each wall. */ + private id: string; + + /** Front is the plane from start to end. */ + public frontEdge: HalfEdge = null; + + /** Back is the plane from end to start. */ + public backEdge: HalfEdge = null; + + /** */ + public orphan = false; + + /** Items attached to this wall */ + public items: Items.Item[] = []; + + /** */ + public onItems: Items.Item[] = []; + + /** The front-side texture. */ + public frontTexture = defaultWallTexture; + + /** The back-side texture. */ + public backTexture = defaultWallTexture; + + /** Wall thickness. */ + public thickness = Core.Configuration.getNumericValue(Core.configWallThickness); + + /** Wall height. */ + public height = Core.Configuration.getNumericValue(Core.configWallHeight); + + /** Actions to be applied after movement. */ + private moved_callbacks = $.Callbacks(); + + /** Actions to be applied on removal. */ + private deleted_callbacks = $.Callbacks(); + + /** Actions to be applied explicitly. */ + private action_callbacks = $.Callbacks(); + + /** + * Constructs a new wall. + * @param start Start corner. + * @param end End corner. + */ + constructor(private start: Corner, private end: Corner) { + this.id = this.getUuid(); + + this.start.attachStart(this) + this.end.attachEnd(this); + } + + private getUuid(): string { + return [this.start.id, this.end.id].join(); + } + + public resetFrontBack() { + this.frontEdge = null; + this.backEdge = null; + this.orphan = false; + } + + private snapToAxis(tolerance: number) { + // order here is important, but unfortunately arbitrary + this.start.snapToAxis(tolerance); + this.end.snapToAxis(tolerance); + } + + public fireOnMove(func) { + this.moved_callbacks.add(func); + } + + public fireOnDelete(func) { + this.deleted_callbacks.add(func); + } + + public dontFireOnDelete(func) { + this.deleted_callbacks.remove(func); + } + + public fireOnAction(func) { + this.action_callbacks.add(func) + } + + public fireAction(action) { + this.action_callbacks.fire(action) + } + + private relativeMove(dx: number, dy: number) { + this.start.relativeMove(dx, dy); + this.end.relativeMove(dx, dy); + } + + public fireMoved() { + this.moved_callbacks.fire(); + } + + public fireRedraw() { + if (this.frontEdge) { + this.frontEdge.redrawCallbacks.fire(); + } + if (this.backEdge) { + this.backEdge.redrawCallbacks.fire(); + } + } + + public getStart(): Corner { + return this.start; + } + + public getEnd(): Corner { + return this.end; + } + + public getStartX(): number { + return this.start.getX(); + } + + public getEndX(): number { + return this.end.getX(); + } + + public getStartY(): number { + return this.start.getY(); + } + + public getEndY(): number { + return this.end.getY(); + } + + public remove() { + this.start.detachWall(this); + this.end.detachWall(this); + this.deleted_callbacks.fire(this); + } + + public setStart(corner: Corner) { + this.start.detachWall(this); + corner.attachStart(this); + this.start = corner; + this.fireMoved(); + } + + public setEnd(corner: Corner) { + this.end.detachWall(this); + corner.attachEnd(this); + this.end = corner; + this.fireMoved(); + } + + public distanceFrom(x: number, y: number): number { + return Core.Utils.pointDistanceFromLine(x, y, + this.getStartX(), this.getStartY(), + this.getEndX(), this.getEndY()); + } + + /** Return the corner opposite of the one provided. + * @param corner The given corner. + * @returns The opposite corner. + */ + private oppositeCorner(corner: Corner): Corner { + if (this.start === corner) { + return this.end; + } else if (this.end === corner) { + return this.start; + } else { + console.log('Wall does not connect to corner'); + } + } + } +} diff --git a/src/blueprint3d/three/controller.ts b/src/blueprint3d/three/controller.ts new file mode 100644 index 0000000..cb381f4 --- /dev/null +++ b/src/blueprint3d/three/controller.ts @@ -0,0 +1,448 @@ +/// +/// +/// + +module BP3D.Three { + export var Controller = function (three, model, camera, element, controls, hud) { + + var scope = this; + + this.enabled = true; + + var three = three; + var model = model; + var scene = model.scene; + var element = element; + var camera = camera; + var controls = controls; + var hud = hud; + + var plane; // ground plane used for intersection testing + + var mouse; + var intersectedObject; + var mouseoverObject; + var selectedObject; + + var mouseDown = false; + var mouseMoved = false; // has mouse moved since down click + + var rotateMouseOver = false; + + var states = { + UNSELECTED: 0, // no object selected + SELECTED: 1, // selected but inactive + DRAGGING: 2, // performing an action while mouse depressed + ROTATING: 3, // rotating with mouse down + ROTATING_FREE: 4, // rotating with mouse up + PANNING: 5 + }; + var state = states.UNSELECTED; + + this.needsUpdate = true; + + function init() { + element.mousedown(mouseDownEvent); + element.mouseup(mouseUpEvent); + element.mousemove(mouseMoveEvent); + + mouse = new THREE.Vector2(); + + scene.itemRemovedCallbacks.add(itemRemoved); + scene.itemLoadedCallbacks.add(itemLoaded); + setGroundPlane(); + } + + // invoked via callback when item is loaded + function itemLoaded(item) { + if (!item.position_set) { + scope.setSelectedObject(item); + switchState(states.DRAGGING); + var pos = item.position.clone(); + pos.y = 0; + var vec = three.projectVector(pos); + clickPressed(vec); + } + item.position_set = true; + } + + function clickPressed(vec2?) { + vec2 = vec2 || mouse; + var intersection = scope.itemIntersection(mouse, selectedObject); + if (intersection) { + selectedObject.clickPressed(intersection); + } + } + + function clickDragged(vec2?) { + vec2 = vec2 || mouse; + var intersection = scope.itemIntersection(mouse, selectedObject); + if (intersection) { + if (scope.isRotating()) { + selectedObject.rotate(intersection); + } else { + selectedObject.clickDragged(intersection); + } + } + } + + function itemRemoved(item) { + // invoked as a callback to event in Scene + if (item === selectedObject) { + selectedObject.setUnselected(); + selectedObject.mouseOff(); + scope.setSelectedObject(null); + } + } + + function setGroundPlane() { + // ground plane used to find intersections + var size = 10000; + plane = new THREE.Mesh( + new THREE.PlaneGeometry(size, size), + new THREE.MeshBasicMaterial()); + plane.rotation.x = -Math.PI / 2; + plane.visible = false; + scene.add(plane); + } + + function checkWallsAndFloors(event?) { + + // double click on a wall or floor brings up texture change modal + if (state == states.UNSELECTED && mouseoverObject == null) { + // check walls + var wallEdgePlanes = model.floorplan.wallEdgePlanes(); + var wallIntersects = scope.getIntersections( + mouse, wallEdgePlanes, true); + if (wallIntersects.length > 0) { + var wall = wallIntersects[0].object.edge; + three.wallClicked.fire(wall); + return; + } + + // check floors + var floorPlanes = model.floorplan.floorPlanes(); + var floorIntersects = scope.getIntersections( + mouse, floorPlanes, false); + if (floorIntersects.length > 0) { + var room = floorIntersects[0].object.room; + three.floorClicked.fire(room); + return; + } + + three.nothingClicked.fire(); + } + + } + + function mouseMoveEvent(event) { + if (scope.enabled) { + event.preventDefault(); + + mouseMoved = true; + + mouse.x = event.clientX; + mouse.y = event.clientY; + + if (!mouseDown) { + updateIntersections(); + } + + switch (state) { + case states.UNSELECTED: + updateMouseover(); + break; + case states.SELECTED: + updateMouseover(); + break; + case states.DRAGGING: + case states.ROTATING: + case states.ROTATING_FREE: + clickDragged(); + hud.update(); + scope.needsUpdate = true; + break; + } + } + } + + this.isRotating = function () { + return (state == states.ROTATING || state == states.ROTATING_FREE); + } + + function mouseDownEvent(event) { + if (scope.enabled) { + event.preventDefault(); + + mouseMoved = false; + mouseDown = true; + + switch (state) { + case states.SELECTED: + if (rotateMouseOver) { + switchState(states.ROTATING); + } else if (intersectedObject != null) { + scope.setSelectedObject(intersectedObject); + if (!intersectedObject.fixed) { + switchState(states.DRAGGING); + } + } + break; + case states.UNSELECTED: + if (intersectedObject != null) { + scope.setSelectedObject(intersectedObject); + if (!intersectedObject.fixed) { + switchState(states.DRAGGING); + } + } + break; + case states.DRAGGING: + case states.ROTATING: + break; + case states.ROTATING_FREE: + switchState(states.SELECTED); + break; + } + } + } + + function mouseUpEvent(event) { + if (scope.enabled) { + mouseDown = false; + + switch (state) { + case states.DRAGGING: + selectedObject.clickReleased(); + switchState(states.SELECTED); + break; + case states.ROTATING: + if (!mouseMoved) { + switchState(states.ROTATING_FREE); + } else { + switchState(states.SELECTED); + } + break; + case states.UNSELECTED: + if (!mouseMoved) { + checkWallsAndFloors(); + } + break; + case states.SELECTED: + if (intersectedObject == null && !mouseMoved) { + switchState(states.UNSELECTED); + checkWallsAndFloors(); + } + break; + case states.ROTATING_FREE: + break; + } + } + } + + function switchState(newState) { + if (newState != state) { + onExit(state); + onEntry(newState); + } + state = newState; + hud.setRotating(scope.isRotating()); + } + + function onEntry(state) { + switch (state) { + case states.UNSELECTED: + scope.setSelectedObject(null); + case states.SELECTED: + controls.enabled = true; + break; + case states.ROTATING: + case states.ROTATING_FREE: + controls.enabled = false; + break; + case states.DRAGGING: + three.setCursorStyle("move"); + clickPressed(); + controls.enabled = false; + break; + } + } + + function onExit(state) { + switch (state) { + case states.UNSELECTED: + case states.SELECTED: + break; + case states.DRAGGING: + if (mouseoverObject) { + three.setCursorStyle("pointer"); + } else { + three.setCursorStyle("auto"); + } + break; + case states.ROTATING: + case states.ROTATING_FREE: + break; + } + } + + this.selectedObject = function () { + return selectedObject; + } + + // updates the vector of the intersection with the plane of a given + // mouse position, and the intersected object + // both may be set to null if no intersection found + function updateIntersections() { + + // check the rotate arrow + var hudObject = hud.getObject(); + if (hudObject != null) { + var hudIntersects = scope.getIntersections( + mouse, + hudObject, + false, false, true); + if (hudIntersects.length > 0) { + rotateMouseOver = true; + hud.setMouseover(true); + intersectedObject = null; + return; + } + } + rotateMouseOver = false; + hud.setMouseover(false); + + // check objects + var items = model.scene.getItems(); + var intersects = scope.getIntersections( + mouse, + items, + false, true); + + if (intersects.length > 0) { + intersectedObject = intersects[0].object; + } else { + intersectedObject = null; + } + } + + // sets coords to -1 to 1 + function normalizeVector2(vec2) { + var retVec = new THREE.Vector2(); + retVec.x = ((vec2.x - three.widthMargin) / (window.innerWidth - three.widthMargin)) * 2 - 1; + retVec.y = -((vec2.y - three.heightMargin) / (window.innerHeight - three.heightMargin)) * 2 + 1; + return retVec; + } + + // + function mouseToVec3(vec2) { + var normVec2 = normalizeVector2(vec2) + var vector = new THREE.Vector3( + normVec2.x, normVec2.y, 0.5); + vector.unproject(camera); + return vector; + } + + // returns the first intersection object + this.itemIntersection = function (vec2, item) { + var customIntersections = item.customIntersectionPlanes(); + var intersections = null; + if (customIntersections && customIntersections.length > 0) { + intersections = this.getIntersections(vec2, customIntersections, true); + } else { + intersections = this.getIntersections(vec2, plane); + } + if (intersections.length > 0) { + return intersections[0]; + } else { + return null; + } + } + + // filter by normals will only return objects facing the camera + // objects can be an array of objects or a single object + this.getIntersections = function (vec2, objects, filterByNormals, onlyVisible, recursive, linePrecision) { + + var vector = mouseToVec3(vec2); + + onlyVisible = onlyVisible || false; + filterByNormals = filterByNormals || false; + recursive = recursive || false; + linePrecision = linePrecision || 20; + + + var direction = vector.sub(camera.position).normalize(); + var raycaster = new THREE.Raycaster( + camera.position, + direction); + raycaster.linePrecision = linePrecision; + var intersections; + if (objects instanceof Array) { + intersections = raycaster.intersectObjects(objects, recursive); + } else { + intersections = raycaster.intersectObject(objects, recursive); + } + // filter by visible, if true + if (onlyVisible) { + intersections = Core.Utils.removeIf(intersections, function (intersection) { + return !intersection.object.visible; + }); + } + + // filter by normals, if true + if (filterByNormals) { + intersections = Core.Utils.removeIf(intersections, function (intersection) { + var dot = intersection.face.normal.dot(direction); + return (dot > 0) + }); + } + return intersections; + } + + // manage the selected object + this.setSelectedObject = function (object) { + if (state === states.UNSELECTED) { + switchState(states.SELECTED); + } + if (selectedObject != null) { + selectedObject.setUnselected(); + } + if (object != null) { + selectedObject = object; + selectedObject.setSelected(); + three.itemSelectedCallbacks.fire(object); + } else { + selectedObject = null; + three.itemUnselectedCallbacks.fire(); + } + this.needsUpdate = true; + } + + // TODO: there MUST be simpler logic for expressing this + function updateMouseover() { + if (intersectedObject != null) { + if (mouseoverObject != null) { + if (mouseoverObject !== intersectedObject) { + mouseoverObject.mouseOff(); + mouseoverObject = intersectedObject; + mouseoverObject.mouseOver(); + scope.needsUpdate = true; + } else { + // do nothing, mouseover already set + } + } else { + mouseoverObject = intersectedObject; + mouseoverObject.mouseOver(); + three.setCursorStyle("pointer"); + scope.needsUpdate = true; + } + } else if (mouseoverObject != null) { + mouseoverObject.mouseOff(); + three.setCursorStyle("auto"); + mouseoverObject = null; + scope.needsUpdate = true; + } + } + + init(); + } +} diff --git a/src/blueprint3d/three/controls.ts b/src/blueprint3d/three/controls.ts new file mode 100644 index 0000000..b193663 --- /dev/null +++ b/src/blueprint3d/three/controls.ts @@ -0,0 +1,518 @@ +/** +This file is a modified version of THREE.OrbitControls +Contributors: + * @author qiao / https://github.com/qiao + * @author mrdoob / http://mrdoob.com + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author erich666 / http://erichaines.com + */ + +/// +/// + +module BP3D.Three { + export var Controls = function (object, domElement) { + + this.object = object; + this.domElement = (domElement !== undefined) ? domElement : document; + + // Set to false to disable this control + this.enabled = true; + + // "target" sets the location of focus, where the control orbits around + // and where it pans with respect to. + this.target = new THREE.Vector3(); + // center is old, deprecated; use "target" instead + this.center = this.target; + + // This option actually enables dollying in and out; left as "zoom" for + // backwards compatibility + this.noZoom = false; + this.zoomSpeed = 1.0; + // Limits to how far you can dolly in and out + this.minDistance = 0; + this.maxDistance = 1500; //Infinity; + + // Set to true to disable this control + this.noRotate = false; + this.rotateSpeed = 1.0; + + // Set to true to disable this control + this.noPan = false; + this.keyPanSpeed = 40.0; // pixels moved per arrow key push + + // Set to true to automatically rotate around the target + this.autoRotate = false; + this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 + + // How far you can orbit vertically, upper and lower limits. + // Range is 0 to Math.PI radians. + this.minPolarAngle = 0; // radians + this.maxPolarAngle = Math.PI / 2; // radians + + // Set to true to disable use of the keys + this.noKeys = false; + // The four arrow keys + this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; + + this.cameraMovedCallbacks = $.Callbacks(); + + this.needsUpdate = true; + + // internals + + var scope = this; + + var EPS = 0.000001; + + var rotateStart = new THREE.Vector2(); + var rotateEnd = new THREE.Vector2(); + var rotateDelta = new THREE.Vector2(); + + var panStart = new THREE.Vector2(); + var panEnd = new THREE.Vector2(); + var panDelta = new THREE.Vector2(); + + var dollyStart = new THREE.Vector2(); + var dollyEnd = new THREE.Vector2(); + var dollyDelta = new THREE.Vector2(); + + var phiDelta = 0; + var thetaDelta = 0; + var scale = 1; + var pan = new THREE.Vector3(); + + var STATE = { NONE: -1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY: 4, TOUCH_PAN: 5 }; + var state = STATE.NONE; + + this.controlsActive = function () { + return (state === STATE.NONE); + } + + this.setPan = function (vec3) { + pan = vec3; + }; + + this.panTo = function (vec3) { + var newTarget = new THREE.Vector3(vec3.x, scope.target.y, vec3.z); + var delta = scope.target.clone().sub(newTarget); + pan.sub(delta); + scope.update(); + }; + + this.rotateLeft = function (angle) { + if (angle === undefined) { + angle = getAutoRotationAngle(); + } + thetaDelta -= angle; + }; + + this.rotateUp = function (angle) { + if (angle === undefined) { + angle = getAutoRotationAngle(); + } + phiDelta -= angle; + }; + + // pass in distance in world space to move left + this.panLeft = function (distance) { + + var panOffset = new THREE.Vector3(); + var te = this.object.matrix.elements; + // get X column of matrix + panOffset.set(te[0], 0, te[2]); + panOffset.normalize(); + + panOffset.multiplyScalar(-distance); + + pan.add(panOffset); + + }; + + // pass in distance in world space to move up + this.panUp = function (distance) { + + var panOffset = new THREE.Vector3(); + var te = this.object.matrix.elements; + // get Y column of matrix + panOffset.set(te[4], 0, te[6]); + panOffset.normalize(); + panOffset.multiplyScalar(distance); + + pan.add(panOffset); + }; + + // main entry point; pass in Vector2 of change desired in pixel space, + // right and down are positive + this.pan = function (delta) { + + var element = scope.domElement === document ? scope.domElement.body : scope.domElement; + + if (scope.object.fov !== undefined) { + + // perspective + var position = scope.object.position; + var offset = position.clone().sub(scope.target); + var targetDistance = offset.length(); + + // half of the fov is center to top of screen + targetDistance *= Math.tan((scope.object.fov / 2) * Math.PI / 180.0); + // we actually don't use screenWidth, since perspective camera is fixed to screen height + scope.panLeft(2 * delta.x * targetDistance / element.clientHeight); + scope.panUp(2 * delta.y * targetDistance / element.clientHeight); + } else if (scope.object.top !== undefined) { + + // orthographic + scope.panLeft(delta.x * (scope.object.right - scope.object.left) / element.clientWidth); + scope.panUp(delta.y * (scope.object.top - scope.object.bottom) / element.clientHeight); + } else { + + // camera neither orthographic or perspective - warn user + console.warn('WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.'); + } + + scope.update() + }; + + this.panXY = function (x, y) { + scope.pan(new THREE.Vector2(x, y)); + } + + this.dollyIn = function (dollyScale) { + if (dollyScale === undefined) { + dollyScale = getZoomScale(); + } + + scale /= dollyScale; + }; + + this.dollyOut = function (dollyScale) { + if (dollyScale === undefined) { + dollyScale = getZoomScale(); + } + + scale *= dollyScale; + }; + + this.update = function () { + var position = this.object.position; + var offset = position.clone().sub(this.target); + + // angle from z-axis around y-axis + var theta = Math.atan2(offset.x, offset.z); + + // angle from y-axis + var phi = Math.atan2(Math.sqrt(offset.x * offset.x + offset.z * offset.z), offset.y); + + if (this.autoRotate) { + this.rotateLeft(getAutoRotationAngle()); + } + + theta += thetaDelta; + phi += phiDelta; + + // restrict phi to be between desired limits + phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, phi)); + + // restrict phi to be betwee EPS and PI-EPS + phi = Math.max(EPS, Math.min(Math.PI - EPS, phi)); + + var radius = offset.length() * scale; + + // restrict radius to be between desired limits + radius = Math.max(this.minDistance, Math.min(this.maxDistance, radius)); + + // move target to panned location + this.target.add(pan); + + offset.x = radius * Math.sin(phi) * Math.sin(theta); + offset.y = radius * Math.cos(phi); + offset.z = radius * Math.sin(phi) * Math.cos(theta); + + position.copy(this.target).add(offset); + + this.object.lookAt(this.target); + + thetaDelta = 0; + phiDelta = 0; + scale = 1; + pan.set(0, 0, 0); + + this.cameraMovedCallbacks.fire(); + this.needsUpdate = true; + }; + + function getAutoRotationAngle() { + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + } + + function getZoomScale() { + return Math.pow(0.95, scope.zoomSpeed); + } + + function onMouseDown(event) { + + if (scope.enabled === false) { return; } + event.preventDefault(); + + if (event.button === 0) { + if (scope.noRotate === true) { return; } + + state = STATE.ROTATE; + + rotateStart.set(event.clientX, event.clientY); + + } else if (event.button === 1) { + if (scope.noZoom === true) { return; } + + state = STATE.DOLLY; + + dollyStart.set(event.clientX, event.clientY); + + } else if (event.button === 2) { + if (scope.noPan === true) { return; } + + state = STATE.PAN; + + panStart.set(event.clientX, event.clientY); + } + + // Greggman fix: https://github.com/greggman/three.js/commit/fde9f9917d6d8381f06bf22cdff766029d1761be + scope.domElement.addEventListener('mousemove', onMouseMove, false); + scope.domElement.addEventListener('mouseup', onMouseUp, false); + + } + + function onMouseMove(event) { + + if (scope.enabled === false) return; + + event.preventDefault(); + + var element = scope.domElement === document ? scope.domElement.body : scope.domElement; + + if (state === STATE.ROTATE) { + + if (scope.noRotate === true) return; + + rotateEnd.set(event.clientX, event.clientY); + rotateDelta.subVectors(rotateEnd, rotateStart); + + // rotating across whole screen goes 360 degrees around + scope.rotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed); + // rotating up and down along whole screen attempts to go 360, but limited to 180 + scope.rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed); + + rotateStart.copy(rotateEnd); + + } else if (state === STATE.DOLLY) { + + if (scope.noZoom === true) return; + + dollyEnd.set(event.clientX, event.clientY); + dollyDelta.subVectors(dollyEnd, dollyStart); + + if (dollyDelta.y > 0) { + + scope.dollyIn(); + + } else { + + scope.dollyOut(); + + } + + dollyStart.copy(dollyEnd); + + } else if (state === STATE.PAN) { + + if (scope.noPan === true) return; + + panEnd.set(event.clientX, event.clientY); + panDelta.subVectors(panEnd, panStart); + + scope.pan(panDelta); + + panStart.copy(panEnd); + } + + // Greggman fix: https://github.com/greggman/three.js/commit/fde9f9917d6d8381f06bf22cdff766029d1761be + scope.update(); + } + + function onMouseUp( /* event */) { + if (scope.enabled === false) return; + + // Greggman fix: https://github.com/greggman/three.js/commit/fde9f9917d6d8381f06bf22cdff766029d1761be + scope.domElement.removeEventListener('mousemove', onMouseMove, false); + scope.domElement.removeEventListener('mouseup', onMouseUp, false); + + state = STATE.NONE; + } + + function onMouseWheel(event) { + if (scope.enabled === false || scope.noZoom === true) return; + + var delta = 0; + + if (event.wheelDelta) { // WebKit / Opera / Explorer 9 + delta = event.wheelDelta; + } else if (event.detail) { // Firefox + delta = - event.detail; + } + + if (delta > 0) { + scope.dollyOut(); + + } else { + + scope.dollyIn(); + } + scope.update(); + } + + function onKeyDown(event) { + + if (scope.enabled === false) { return; } + if (scope.noKeys === true) { return; } + if (scope.noPan === true) { return; } + + switch (event.keyCode) { + + case scope.keys.UP: + scope.pan(new THREE.Vector2(0, scope.keyPanSpeed)); + break; + case scope.keys.BOTTOM: + scope.pan(new THREE.Vector2(0, -scope.keyPanSpeed)); + break; + case scope.keys.LEFT: + scope.pan(new THREE.Vector2(scope.keyPanSpeed, 0)); + break; + case scope.keys.RIGHT: + scope.pan(new THREE.Vector2(-scope.keyPanSpeed, 0)); + break; + } + + } + + function touchstart(event) { + + if (scope.enabled === false) { return; } + + switch (event.touches.length) { + + case 1: // one-fingered touch: rotate + if (scope.noRotate === true) { return; } + + state = STATE.TOUCH_ROTATE; + + rotateStart.set(event.touches[0].pageX, event.touches[0].pageY); + break; + + case 2: // two-fingered touch: dolly + if (scope.noZoom === true) { return; } + + state = STATE.TOUCH_DOLLY; + + var dx = event.touches[0].pageX - event.touches[1].pageX; + var dy = event.touches[0].pageY - event.touches[1].pageY; + var distance = Math.sqrt(dx * dx + dy * dy); + dollyStart.set(0, distance); + break; + + case 3: // three-fingered touch: pan + if (scope.noPan === true) { return; } + + state = STATE.TOUCH_PAN; + + panStart.set(event.touches[0].pageX, event.touches[0].pageY); + break; + + default: + state = STATE.NONE; + + } + } + + function touchmove(event) { + + if (scope.enabled === false) { return; } + + event.preventDefault(); + event.stopPropagation(); + + var element = scope.domElement === document ? scope.domElement.body : scope.domElement; + + switch (event.touches.length) { + + case 1: // one-fingered touch: rotate + if (scope.noRotate === true) { return; } + if (state !== STATE.TOUCH_ROTATE) { return; } + + rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY); + rotateDelta.subVectors(rotateEnd, rotateStart); + + // rotating across whole screen goes 360 degrees around + scope.rotateLeft(2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed); + // rotating up and down along whole screen attempts to go 360, but limited to 180 + scope.rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed); + + rotateStart.copy(rotateEnd); + break; + + case 2: // two-fingered touch: dolly + if (scope.noZoom === true) { return; } + if (state !== STATE.TOUCH_DOLLY) { return; } + + var dx = event.touches[0].pageX - event.touches[1].pageX; + var dy = event.touches[0].pageY - event.touches[1].pageY; + var distance = Math.sqrt(dx * dx + dy * dy); + + dollyEnd.set(0, distance); + dollyDelta.subVectors(dollyEnd, dollyStart); + + if (dollyDelta.y > 0) { + scope.dollyOut(); + } else { + scope.dollyIn(); + } + + dollyStart.copy(dollyEnd); + break; + + case 3: // three-fingered touch: pan + if (scope.noPan === true) { return; } + if (state !== STATE.TOUCH_PAN) { return; } + + panEnd.set(event.touches[0].pageX, event.touches[0].pageY); + panDelta.subVectors(panEnd, panStart); + + scope.pan(panDelta); + + panStart.copy(panEnd); + break; + + default: + state = STATE.NONE; + } + } + + function touchend( /* event */) { + if (scope.enabled === false) { + return; + } + state = STATE.NONE; + } + + this.domElement.addEventListener('contextmenu', function (event) { event.preventDefault(); }, false); + this.domElement.addEventListener('mousedown', onMouseDown, false); + this.domElement.addEventListener('mousewheel', onMouseWheel, false); + this.domElement.addEventListener('DOMMouseScroll', onMouseWheel, false); // firefox + this.domElement.addEventListener('touchstart', touchstart, false); + this.domElement.addEventListener('touchend', touchend, false); + this.domElement.addEventListener('touchmove', touchmove, false); + + window.addEventListener('keydown', onKeyDown, false); + }; +} \ No newline at end of file diff --git a/src/blueprint3d/three/edge.ts b/src/blueprint3d/three/edge.ts new file mode 100644 index 0000000..81ac438 --- /dev/null +++ b/src/blueprint3d/three/edge.ts @@ -0,0 +1,318 @@ +/// +/// +/// + +module BP3D.Three { + export var Edge = function (scene, edge, controls) { + var scope = this; + var scene = scene; + var edge = edge; + var controls = controls; + var wall = edge.wall; + var front = edge.front; + + var planes = []; + var basePlanes = []; // always visible + var texture = null; + + var lightMap = THREE.ImageUtils.loadTexture("rooms/textures/walllightmap.png"); + var fillerColor = 0xdddddd; + var sideColor = 0xcccccc; + var baseColor = 0xdddddd; + + this.visible = false; + + this.remove = function () { + edge.redrawCallbacks.remove(redraw); + controls.cameraMovedCallbacks.remove(updateVisibility); + removeFromScene(); + } + + function init() { + edge.redrawCallbacks.add(redraw); + controls.cameraMovedCallbacks.add(updateVisibility); + updateTexture(); + updatePlanes(); + addToScene(); + } + + function redraw() { + removeFromScene(); + updateTexture(); + updatePlanes(); + addToScene(); + } + + function removeFromScene() { + planes.forEach((plane) => { + scene.remove(plane); + }); + basePlanes.forEach((plane) => { + scene.remove(plane); + }); + planes = []; + basePlanes = []; + } + + function addToScene() { + planes.forEach((plane) => { + scene.add(plane); + }); + basePlanes.forEach((plane) => { + scene.add(plane); + }); + updateVisibility(); + } + + function updateVisibility() { + // finds the normal from the specified edge + var start = edge.interiorStart(); + var end = edge.interiorEnd(); + var x = end.x - start.x; + var y = end.y - start.y; + // rotate 90 degrees CCW + var normal = new THREE.Vector3(-y, 0, x); + normal.normalize(); + + // setup camera + var position = controls.object.position.clone(); + var focus = new THREE.Vector3( + (start.x + end.x) / 2.0, + 0, + (start.y + end.y) / 2.0); + var direction = position.sub(focus).normalize(); + + // find dot + var dot = normal.dot(direction); + + // update visible + scope.visible = (dot >= 0); + + // show or hide plans + planes.forEach((plane) => { + plane.visible = scope.visible; + }); + + updateObjectVisibility(); + } + + function updateObjectVisibility() { + wall.items.forEach((item) => { + item.updateEdgeVisibility(scope.visible, front); + }); + wall.onItems.forEach((item) => { + item.updateEdgeVisibility(scope.visible, front); + }); + } + + function updateTexture(callback?) { + // callback is fired when texture loads + callback = callback || function () { + scene.needsUpdate = true; + } + var textureData = edge.getTexture(); + var stretch = textureData.stretch; + var url = textureData.url; + var scale = textureData.scale; + texture = THREE.ImageUtils.loadTexture(url, null, callback); + if (!stretch) { + var height = wall.height; + var width = edge.interiorDistance(); + texture.wrapT = THREE.RepeatWrapping; + texture.wrapS = THREE.RepeatWrapping; + texture.repeat.set(width / scale, height / scale); + texture.needsUpdate = true; + } + } + + function updatePlanes() { + var wallMaterial = new THREE.MeshBasicMaterial({ + color: 0xffffff, + // ambientColor: 0xffffff, TODO_Ekki + //ambient: scope.wall.color, + side: THREE.FrontSide, + map: texture, + // lightMap: lightMap TODO_Ekki + }); + + var fillerMaterial = new THREE.MeshBasicMaterial({ + color: fillerColor, + side: THREE.DoubleSide + }); + + // exterior plane + planes.push(makeWall( + edge.exteriorStart(), + edge.exteriorEnd(), + edge.exteriorTransform, + edge.invExteriorTransform, + fillerMaterial)); + + // interior plane + planes.push(makeWall( + edge.interiorStart(), + edge.interiorEnd(), + edge.interiorTransform, + edge.invInteriorTransform, + wallMaterial)); + + // bottom + // put into basePlanes since this is always visible + basePlanes.push(buildFiller( + edge, 0, + THREE.BackSide, baseColor)); + + // top + planes.push(buildFiller( + edge, wall.height, + THREE.DoubleSide, fillerColor)); + + // sides + planes.push(buildSideFillter( + edge.interiorStart(), edge.exteriorStart(), + wall.height, sideColor)); + + planes.push(buildSideFillter( + edge.interiorEnd(), edge.exteriorEnd(), + wall.height, sideColor)); + } + + // start, end have x and y attributes (i.e. corners) + function makeWall(start, end, transform, invTransform, material) { + var v1 = toVec3(start); + var v2 = toVec3(end); + var v3 = v2.clone(); + v3.y = wall.height; + var v4 = v1.clone(); + v4.y = wall.height; + + var points = [v1.clone(), v2.clone(), v3.clone(), v4.clone()]; + + points.forEach((p) => { + p.applyMatrix4(transform); + }); + + var shape = new THREE.Shape([ + new THREE.Vector2(points[0].x, points[0].y), + new THREE.Vector2(points[1].x, points[1].y), + new THREE.Vector2(points[2].x, points[2].y), + new THREE.Vector2(points[3].x, points[3].y) + ]); + + // add holes for each wall item + wall.items.forEach((item) => { + var pos = item.position.clone(); + pos.applyMatrix4(transform) + var halfSize = item.halfSize; + var min = halfSize.clone().multiplyScalar(-1); + var max = halfSize.clone(); + min.add(pos); + max.add(pos); + + var holePoints = [ + new THREE.Vector2(min.x, min.y), + new THREE.Vector2(max.x, min.y), + new THREE.Vector2(max.x, max.y), + new THREE.Vector2(min.x, max.y) + ]; + + shape.holes.push(new THREE.Path(holePoints)); + }); + + var geometry = new THREE.ShapeGeometry(shape); + + geometry.vertices.forEach((v) => { + v.applyMatrix4(invTransform); + }); + + // make UVs + var totalDistance = Core.Utils.distance(v1.x, v1.z, v2.x, v2.z); + var height = wall.height; + geometry.faceVertexUvs[0] = []; + + function vertexToUv(vertex) { + var x = Core.Utils.distance(v1.x, v1.z, vertex.x, vertex.z) / totalDistance; + var y = vertex.y / height; + return new THREE.Vector2(x, y); + } + + geometry.faces.forEach((face) => { + var vertA = geometry.vertices[face.a]; + var vertB = geometry.vertices[face.b]; + var vertC = geometry.vertices[face.c]; + geometry.faceVertexUvs[0].push([ + vertexToUv(vertA), + vertexToUv(vertB), + vertexToUv(vertC)]); + }); + + geometry.faceVertexUvs[1] = geometry.faceVertexUvs[0]; + + geometry.computeFaceNormals(); + geometry.computeVertexNormals(); + + var mesh = new THREE.Mesh( + geometry, + material); + + return mesh; + } + + function buildSideFillter(p1, p2, height, color) { + var points = [ + toVec3(p1), + toVec3(p2), + toVec3(p2, height), + toVec3(p1, height) + ]; + + var geometry = new THREE.Geometry(); + points.forEach((p) => { + geometry.vertices.push(p); + }); + geometry.faces.push(new THREE.Face3(0, 1, 2)); + geometry.faces.push(new THREE.Face3(0, 2, 3)); + + var fillerMaterial = new THREE.MeshBasicMaterial({ + color: color, + side: THREE.DoubleSide + }); + + var filler = new THREE.Mesh(geometry, fillerMaterial); + return filler; + } + + function buildFiller(edge, height, side, color) { + var points = [ + toVec2(edge.exteriorStart()), + toVec2(edge.exteriorEnd()), + toVec2(edge.interiorEnd()), + toVec2(edge.interiorStart()) + ]; + + var fillerMaterial = new THREE.MeshBasicMaterial({ + color: color, + side: side + }); + + var shape = new THREE.Shape(points); + var geometry = new THREE.ShapeGeometry(shape); + + var filler = new THREE.Mesh(geometry, fillerMaterial); + filler.rotation.set(Math.PI / 2, 0, 0); + filler.position.y = height; + return filler; + } + + function toVec2(pos) { + return new THREE.Vector2(pos.x, pos.y); + } + + function toVec3(pos, height?) { + height = height || 0; + return new THREE.Vector3(pos.x, height, pos.y); + } + + init(); + } +} diff --git a/src/blueprint3d/three/floor.ts b/src/blueprint3d/three/floor.ts new file mode 100644 index 0000000..b8f9bfd --- /dev/null +++ b/src/blueprint3d/three/floor.ts @@ -0,0 +1,103 @@ +/// +/// + +module BP3D.Three { + export var Floor = function (scene, room) { + + var scope = this; + + this.room = room; + var scene = scene; + + var floorPlane = null; + var roofPlane = null; + + init(); + + function init() { + scope.room.fireOnFloorChange(redraw); + floorPlane = buildFloor(); + // roofs look weird, so commented out + //roofPlane = buildRoof(); + } + + function redraw() { + scope.removeFromScene(); + floorPlane = buildFloor(); + scope.addToScene(); + } + + function buildFloor() { + var textureSettings = scope.room.getTexture(); + // setup texture + var floorTexture = THREE.ImageUtils.loadTexture(textureSettings.url); + floorTexture.wrapS = THREE.RepeatWrapping; + floorTexture.wrapT = THREE.RepeatWrapping; + floorTexture.repeat.set(1, 1); + var floorMaterialTop = new THREE.MeshPhongMaterial({ + map: floorTexture, + side: THREE.DoubleSide, + // ambient: 0xffffff, TODO_Ekki + color: 0xcccccc, + specular: 0x0a0a0a + }); + + var textureScale = textureSettings.scale; + // http://stackoverflow.com/questions/19182298/how-to-texture-a-three-js-mesh-created-with-shapegeometry + // scale down coords to fit 0 -> 1, then rescale + + var points = []; + scope.room.interiorCorners.forEach((corner) => { + points.push(new THREE.Vector2( + corner.x / textureScale, + corner.y / textureScale)); + }); + var shape = new THREE.Shape(points); + + var geometry = new THREE.ShapeGeometry(shape); + + var floor = new THREE.Mesh(geometry, floorMaterialTop); + + floor.rotation.set(Math.PI / 2, 0, 0); + floor.scale.set(textureScale, textureScale, textureScale); + floor.receiveShadow = true; + floor.castShadow = false; + return floor; + } + + function buildRoof() { + // setup texture + var roofMaterial = new THREE.MeshBasicMaterial({ + side: THREE.FrontSide, + color: 0xe5e5e5 + }); + + var points = []; + scope.room.interiorCorners.forEach((corner) => { + points.push(new THREE.Vector2( + corner.x, + corner.y)); + }); + var shape = new THREE.Shape(points); + var geometry = new THREE.ShapeGeometry(shape); + var roof = new THREE.Mesh(geometry, roofMaterial); + + roof.rotation.set(Math.PI / 2, 0, 0); + roof.position.y = 250; + return roof; + } + + this.addToScene = function () { + scene.add(floorPlane); + //scene.add(roofPlane); + // hack so we can do intersect testing + scene.add(room.floorPlane); + } + + this.removeFromScene = function () { + scene.remove(floorPlane); + //scene.remove(roofPlane); + scene.remove(room.floorPlane); + } + } +} diff --git a/src/blueprint3d/three/floorplan.ts b/src/blueprint3d/three/floorplan.ts new file mode 100644 index 0000000..d68ccfb --- /dev/null +++ b/src/blueprint3d/three/floorplan.ts @@ -0,0 +1,46 @@ +/// +/// +/// + +module BP3D.Three { + export var Floorplan = function (scene, floorplan, controls) { + + var scope = this; + + this.scene = scene; + this.floorplan = floorplan; + this.controls = controls; + + this.floors = []; + this.edges = []; + + floorplan.fireOnUpdatedRooms(redraw); + + function redraw() { + // clear scene + scope.floors.forEach((floor) => { + floor.removeFromScene(); + }); + + scope.edges.forEach((edge) => { + edge.remove(); + }); + scope.floors = []; + scope.edges = []; + + // draw floors + scope.floorplan.getRooms().forEach((room) => { + var threeFloor = new Three.Floor(scene, room); + scope.floors.push(threeFloor); + threeFloor.addToScene(); + }); + + // draw edges + scope.floorplan.wallEdges().forEach((edge) => { + var threeEdge = new Three.Edge( + scene, edge, scope.controls); + scope.edges.push(threeEdge); + }); + } + } +} diff --git a/src/blueprint3d/three/hud.ts b/src/blueprint3d/three/hud.ts new file mode 100644 index 0000000..cc3c5e9 --- /dev/null +++ b/src/blueprint3d/three/hud.ts @@ -0,0 +1,164 @@ +/// +/// + +module BP3D.Three { + /** + * Drawings on "top" of the scene. e.g. rotate arrows + */ + export var HUD = function (three) { + var scope = this; + var three = three; + var scene = new THREE.Scene(); + + var selectedItem = null; + + var rotating = false; + var mouseover = false; + + var tolerance = 10; + var height = 5; + var distance = 20; + var color = "#ffffff"; + var hoverColor = "#f1c40f"; + + var activeObject = null; + + this.getScene = function () { + return scene; + } + + this.getObject = function () { + return activeObject; + } + + function init() { + three.itemSelectedCallbacks.add(itemSelected); + three.itemUnselectedCallbacks.add(itemUnselected); + } + + function resetSelectedItem() { + selectedItem = null; + if (activeObject) { + scene.remove(activeObject); + activeObject = null; + } + } + + function itemSelected(item) { + if (selectedItem != item) { + resetSelectedItem(); + if (item.allowRotate && !item.fixed) { + selectedItem = item; + activeObject = makeObject(selectedItem); + scene.add(activeObject); + } + } + } + + function itemUnselected() { + resetSelectedItem(); + } + + this.setRotating = function (isRotating) { + rotating = isRotating; + setColor(); + } + + this.setMouseover = function (isMousedOver) { + mouseover = isMousedOver; + setColor(); + } + + function setColor() { + if (activeObject) { + activeObject.children.forEach((obj) => { + obj.material.color.set(getColor()); + }); + } + three.needsUpdate(); + } + + function getColor() { + return (mouseover || rotating) ? hoverColor : color; + } + + this.update = function () { + if (activeObject) { + activeObject.rotation.y = selectedItem.rotation.y; + activeObject.position.x = selectedItem.position.x; + activeObject.position.z = selectedItem.position.z; + } + } + + function makeLineGeometry(item) { + var geometry = new THREE.Geometry(); + + geometry.vertices.push( + new THREE.Vector3(0, 0, 0), + rotateVector(item) + ); + + return geometry; + } + + function rotateVector(item) { + var vec = new THREE.Vector3(0, 0, + Math.max(item.halfSize.x, item.halfSize.z) + 1.4 + distance); + return vec; + } + + function makeLineMaterial(rotating) { + var mat = new THREE.LineBasicMaterial({ + color: getColor(), + linewidth: 3 + }); + return mat; + } + + function makeCone(item) { + var coneGeo = new THREE.CylinderGeometry(5, 0, 10); + var coneMat = new THREE.MeshBasicMaterial({ + color: getColor() + }); + var cone = new THREE.Mesh(coneGeo, coneMat); + cone.position.copy(rotateVector(item)); + + cone.rotation.x = -Math.PI / 2.0; + + return cone; + } + + function makeSphere(item) { + var geometry = new THREE.SphereGeometry(4, 16, 16); + var material = new THREE.MeshBasicMaterial({ + color: getColor() + }); + var sphere = new THREE.Mesh(geometry, material); + return sphere; + } + + function makeObject(item) { + var object = new THREE.Object3D(); + var line = new THREE.Line( + makeLineGeometry(item), + makeLineMaterial(scope.rotating), + THREE.LinePieces); + + var cone = makeCone(item); + var sphere = makeSphere(item); + + object.add(line); + object.add(cone); + object.add(sphere); + + object.rotation.y = item.rotation.y; + object.position.x = item.position.x; + object.position.z = item.position.z; + object.position.y = height; + + return object; + } + + init(); + } +} diff --git a/src/blueprint3d/three/lights.ts b/src/blueprint3d/three/lights.ts new file mode 100644 index 0000000..a25aff4 --- /dev/null +++ b/src/blueprint3d/three/lights.ts @@ -0,0 +1,72 @@ +/// + +module BP3D.Three { + export var Lights = function (scene, floorplan) { + + var scope = this; + var scene = scene; + var floorplan = floorplan; + + var tol = 1; + var height = 300; // TODO: share with Blueprint.Wall + + var dirLight; + + this.getDirLight = function () { + return dirLight; + } + + function init() { + var light = new THREE.HemisphereLight(0xffffff, 0x888888, 1.1); + light.position.set(0, height, 0); + scene.add(light); + + dirLight = new THREE.DirectionalLight(0xffffff, 0); + dirLight.color.setHSL(1, 1, 0.1); + + dirLight.castShadow = true; + + dirLight.shadowMapWidth = 1024; + dirLight.shadowMapHeight = 1024; + + dirLight.shadowCameraFar = height + tol; + dirLight.shadowBias = -0.0001; + dirLight.shadowDarkness = 0.2; + dirLight.visible = true; + dirLight.shadowCameraVisible = false; + + scene.add(dirLight); + scene.add(dirLight.target); + + floorplan.fireOnUpdatedRooms(updateShadowCamera); + } + + function updateShadowCamera() { + + var size = floorplan.getSize(); + var d = (Math.max(size.z, size.x) + tol) / 2.0; + + var center = floorplan.getCenter(); + var pos = new THREE.Vector3( + center.x, height, center.z); + dirLight.position.copy(pos); + dirLight.target.position.copy(center); + //dirLight.updateMatrix(); + //dirLight.updateWorldMatrix() + dirLight.shadowCameraLeft = -d; + dirLight.shadowCameraRight = d; + dirLight.shadowCameraTop = d; + dirLight.shadowCameraBottom = -d; + // this is necessary for updates + if (dirLight.shadowCamera) { + dirLight.shadowCamera.left = dirLight.shadowCameraLeft; + dirLight.shadowCamera.right = dirLight.shadowCameraRight; + dirLight.shadowCamera.top = dirLight.shadowCameraTop; + dirLight.shadowCamera.bottom = dirLight.shadowCameraBottom; + dirLight.shadowCamera.updateProjectionMatrix(); + } + } + + init(); + } +} \ No newline at end of file diff --git a/src/blueprint3d/three/main.ts b/src/blueprint3d/three/main.ts new file mode 100644 index 0000000..441bfa4 --- /dev/null +++ b/src/blueprint3d/three/main.ts @@ -0,0 +1,267 @@ +/// +/// +/// +/// +/// +/// +/// +/// + +module BP3D.Three { + export var Main = function (model, element, canvasElement, opts) { + var scope = this; + + var options = { + resize: true, + pushHref: false, + spin: true, + spinSpeed: .00002, + clickPan: true, + canMoveFixedItems: false + } + + // override with manually set options + for (var opt in options) { + if (options.hasOwnProperty(opt) && opts.hasOwnProperty(opt)) { + options[opt] = opts[opt] + } + } + + var scene = model.scene; + + var model = model; + this.element = $(element); + var domElement; + + var camera; + var renderer; + this.controls; + var canvas; + var controller; + var floorplan; + + //var canvas; + //var canvasElement = canvasElement; + + var needsUpdate = false; + + var lastRender = Date.now(); + var mouseOver = false; + var hasClicked = false; + + var hud; + + this.heightMargin; + this.widthMargin; + this.elementHeight; + this.elementWidth; + + this.itemSelectedCallbacks = $.Callbacks(); // item + this.itemUnselectedCallbacks = $.Callbacks(); + + this.wallClicked = $.Callbacks(); // wall + this.floorClicked = $.Callbacks(); // floor + this.nothingClicked = $.Callbacks(); + + function init() { + THREE.ImageUtils.crossOrigin = ""; + + domElement = scope.element.get(0) // Container + camera = new THREE.PerspectiveCamera(45, 1, 1, 10000); + renderer = new THREE.WebGLRenderer({ + antialias: true, + preserveDrawingBuffer: true // required to support .toDataURL() + }); + renderer.autoClear = false, + renderer.shadowMapEnabled = true; + renderer.shadowMapSoft = true; + renderer.shadowMapType = THREE.PCFSoftShadowMap; + + var skybox = new Three.Skybox(scene); + + scope.controls = new Three.Controls(camera, domElement); + + hud = new Three.HUD(scope); + + controller = new Three.Controller( + scope, model, camera, scope.element, scope.controls, hud); + + domElement.appendChild(renderer.domElement); + + // handle window resizing + scope.updateWindowSize(); + if (options.resize) { + $(window).resize(scope.updateWindowSize); + } + + // setup camera nicely + scope.centerCamera(); + model.floorplan.fireOnUpdatedRooms(scope.centerCamera); + + var lights = new Three.Lights(scene, model.floorplan); + + floorplan = new Three.Floorplan(scene, + model.floorplan, scope.controls); + + animate(); + + scope.element.mouseenter(function () { + mouseOver = true; + }).mouseleave(function () { + mouseOver = false; + }).click(function () { + hasClicked = true; + }); + + //canvas = new ThreeCanvas(canvasElement, scope); + } + + function spin() { + if (options.spin && !mouseOver && !hasClicked) { + var theta = 2 * Math.PI * options.spinSpeed * (Date.now() - lastRender); + scope.controls.rotateLeft(theta); + scope.controls.update() + } + } + + this.dataUrl = function () { + var dataUrl = renderer.domElement.toDataURL("image/png"); + return dataUrl; + } + + this.stopSpin = function () { + hasClicked = true; + } + + this.options = function () { + return options; + } + + this.getModel = function () { + return model; + } + + this.getScene = function () { + return scene; + } + + this.getController = function () { + return controller; + } + + this.getCamera = function () { + return camera; + } + + this.needsUpdate = function () { + needsUpdate = true; + + } + function shouldRender() { + // Do we need to draw a new frame + if (scope.controls.needsUpdate || controller.needsUpdate || needsUpdate || model.scene.needsUpdate) { + scope.controls.needsUpdate = false; + controller.needsUpdate = false; + needsUpdate = false; + model.scene.needsUpdate = false; + return true; + } else { + return false; + } + } + + function render() { + spin(); + if (shouldRender()) { + renderer.clear(); + renderer.render(scene.getScene(), camera); + renderer.clearDepth(); + renderer.render(hud.getScene(), camera); + } + lastRender = Date.now(); + }; + + function animate() { + var delay = 50; + setTimeout(function () { + requestAnimationFrame(animate); + }, delay); + render(); + }; + + this.rotatePressed = function () { + controller.rotatePressed(); + } + + this.rotateReleased = function () { + controller.rotateReleased(); + } + + this.setCursorStyle = function (cursorStyle) { + domElement.style.cursor = cursorStyle; + }; + + this.updateWindowSize = function () { + scope.heightMargin = scope.element.offset().top; + scope.widthMargin = scope.element.offset().left; + + scope.elementWidth = scope.element.innerWidth(); + if (options.resize) { + scope.elementHeight = window.innerHeight - scope.heightMargin; + } else { + scope.elementHeight = scope.element.innerHeight(); + } + + camera.aspect = scope.elementWidth / scope.elementHeight; + camera.updateProjectionMatrix(); + + renderer.setSize(scope.elementWidth, scope.elementHeight); + needsUpdate = true; + } + + this.centerCamera = function () { + var yOffset = 150.0; + + var pan = model.floorplan.getCenter(); + pan.y = yOffset; + + scope.controls.target = pan; + + var distance = model.floorplan.getSize().z * 1.5; + + var offset = pan.clone().add( + new THREE.Vector3(0, distance, distance)); + //scope.controls.setOffset(offset); + camera.position.copy(offset); + + scope.controls.update(); + } + + // projects the object's center point into x,y screen coords + // x,y are relative to top left corner of viewer + this.projectVector = function (vec3, ignoreMargin) { + ignoreMargin = ignoreMargin || false; + + var widthHalf = scope.elementWidth / 2; + var heightHalf = scope.elementHeight / 2; + + var vector = new THREE.Vector3(); + vector.copy(vec3); + vector.project(camera); + + var vec2 = new THREE.Vector2(); + + vec2.x = (vector.x * widthHalf) + widthHalf; + vec2.y = - (vector.y * heightHalf) + heightHalf; + + if (!ignoreMargin) { + vec2.x += scope.widthMargin; + vec2.y += scope.heightMargin; + } + + return vec2; + } + + init(); + } +} \ No newline at end of file diff --git a/src/blueprint3d/three/skybox.ts b/src/blueprint3d/three/skybox.ts new file mode 100644 index 0000000..7f7e785 --- /dev/null +++ b/src/blueprint3d/three/skybox.ts @@ -0,0 +1,69 @@ +/// + +module BP3D.Three { + export var Skybox = function (scene) { + + var scope = this; + + var scene = scene; + + var topColor = 0xffffff;//0xD8ECF9 + var bottomColor = 0xe9e9e9; //0xf9f9f9;//0x565e63 + var verticalOffset = 500 + var sphereRadius = 4000 + var widthSegments = 32 + var heightSegments = 15 + + var vertexShader = [ + "varying vec3 vWorldPosition;", + "void main() {", + " vec4 worldPosition = modelMatrix * vec4( position, 1.0 );", + " vWorldPosition = worldPosition.xyz;", + " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", + "}" + ].join('\n'); + + var fragmentShader = [ + "uniform vec3 topColor;", + "uniform vec3 bottomColor;", + "uniform float offset;", + "varying vec3 vWorldPosition;", + "void main() {", + " float h = normalize( vWorldPosition + offset ).y;", + " gl_FragColor = vec4( mix( bottomColor, topColor, (h + 1.0) / 2.0), 1.0 );", + "}" + ].join('\n'); + + function init() { + + var uniforms = { + topColor: { + type: "c", + value: new THREE.Color(topColor) + }, + bottomColor: { + type: "c", + value: new THREE.Color(bottomColor) + }, + offset: { + type: "f", + value: verticalOffset + } + } + + var skyGeo = new THREE.SphereGeometry( + sphereRadius, widthSegments, heightSegments); + var skyMat = new THREE.ShaderMaterial({ + vertexShader: vertexShader, + fragmentShader: fragmentShader, + uniforms: uniforms, + side: THREE.BackSide + }); + + var sky = new THREE.Mesh(skyGeo, skyMat); + scene.add(sky); + } + + init(); + } +} diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts new file mode 100644 index 0000000..3612073 --- /dev/null +++ b/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 0000000..7b4f817 --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000..997406a Binary files /dev/null and b/src/favicon.ico differ diff --git a/src/fonts/glyphicons-halflings-regular.eot b/src/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 Binary files /dev/null and b/src/fonts/glyphicons-halflings-regular.eot differ diff --git a/src/fonts/glyphicons-halflings-regular.svg b/src/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/src/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/fonts/glyphicons-halflings-regular.ttf b/src/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 Binary files /dev/null and b/src/fonts/glyphicons-halflings-regular.ttf differ diff --git a/src/fonts/glyphicons-halflings-regular.woff b/src/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 Binary files /dev/null and b/src/fonts/glyphicons-halflings-regular.woff differ diff --git a/src/fonts/glyphicons-halflings-regular.woff2 b/src/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 Binary files /dev/null and b/src/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..38e14ef --- /dev/null +++ b/src/index.html @@ -0,0 +1,16 @@ + + + + + BabylonjsWebApp + + + + + + + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..c7b673c --- /dev/null +++ b/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/src/polyfills.ts b/src/polyfills.ts new file mode 100644 index 0000000..d5f67bd --- /dev/null +++ b/src/polyfills.ts @@ -0,0 +1,65 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** + * IE11 requires the following for NgClass support on SVG elements + */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). + */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..35d06b9 --- /dev/null +++ b/src/styles.css @@ -0,0 +1,47 @@ +/* You can add global styles to this file, and also import other style files */ +html { + overflow: hidden; + height: 100%; +} + +body { + margin: 0; + padding: 0; + overflow: hidden; + height: 100%; +} + +div { + margin: 0; + padding: 0; +} + +/* #bp3d-js-app { + overflow: hidden; +} */ + +#bp3djs-viewer2d, +#bp3djs-viewer3d { + position: absolute; + width: 500px; /*100vw;*/ + height: 500px; /*100vh;*/ + top: 0; + left: 0; +} + +#bp3djs-controls { + position: absolute; + top: 0; + left: 0; + z-index: 1; +} + +/** + The below css enables color picker for quicksettings + https://github.com/bit101/quicksettings/issues/57 +*/ +.qs_color { + position: absolute; + left: 5px; + visibility: hidden; +} diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..50193eb --- /dev/null +++ b/src/test.ts @@ -0,0 +1,25 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + keys(): string[]; + (id: string): T; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..82d91dc --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..6117ee8 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,28 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "module": "es2020", + "lib": ["es2020", "dom"], + "types": ["babylonjs", "babylonjs-loaders", "babylonjs-materials"], + "strict": false, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "paths": { + "mini-signals": ["node_modules/resource-loader/typings/mini-signals.d.ts"] + } + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictTemplates": true + } +} diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100644 index 0000000..092345b --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..277c8eb --- /dev/null +++ b/tslint.json @@ -0,0 +1,152 @@ +{ + "extends": "tslint:recommended", + "rulesDirectory": [ + "codelyzer" + ], + "rules": { + "align": { + "options": [ + "parameters", + "statements" + ] + }, + "array-type": false, + "arrow-return-shorthand": true, + "curly": true, + "deprecation": { + "severity": "warning" + }, + "eofline": true, + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "import-spacing": true, + "indent": { + "options": [ + "spaces" + ] + }, + "max-classes-per-file": false, + "max-line-length": [ + true, + 140 + ], + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-empty": false, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-var-requires": false, + "object-literal-key-quotes": [ + true, + "as-needed" + ], + "quotemark": [ + true, + "single" + ], + "semicolon": { + "options": [ + "always" + ] + }, + "space-before-function-paren": { + "options": { + "anonymous": "never", + "asyncArrow": "always", + "constructor": "never", + "method": "never", + "named": "never" + } + }, + "typedef": [ + true, + "call-signature" + ], + "typedef-whitespace": { + "options": [ + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ] + }, + "variable-name": { + "options": [ + "ban-keywords", + "check-format", + "allow-pascal-case" + ] + }, + "whitespace": { + "options": [ + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type", + "check-typecast" + ] + }, + "component-class-suffix": true, + "contextual-lifecycle": true, + "directive-class-suffix": true, + "no-conflicting-lifecycle": true, + "no-host-metadata-property": true, + "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-output-native": true, + "no-output-on-prefix": true, + "no-output-rename": true, + "no-outputs-metadata-property": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "use-lifecycle-interface": true, + "use-pipe-transform-interface": true, + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ] + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..f0b2a68 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,9997 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@angular-devkit/architect@0.1102.10": + version "0.1102.10" + resolved "https://registry.nlark.com/@angular-devkit/architect/download/@angular-devkit/architect-0.1102.10.tgz#09871e499b177cbffd7049b4a521952d075a4c7f" + integrity sha1-CYceSZsXfL/9cEm0pSGVLQdaTH8= + dependencies: + "@angular-devkit/core" "11.2.10" + rxjs "6.6.3" + +"@angular-devkit/build-angular@~0.1102.10": + version "0.1102.10" + resolved "https://registry.nlark.com/@angular-devkit/build-angular/download/@angular-devkit/build-angular-0.1102.10.tgz#b1f4395dd10e54b711f99414d8265c80fd58e429" + integrity sha1-sfQ5XdEOVLcR+ZQU2CZcgP1Y5Ck= + dependencies: + "@angular-devkit/architect" "0.1102.10" + "@angular-devkit/build-optimizer" "0.1102.10" + "@angular-devkit/build-webpack" "0.1102.10" + "@angular-devkit/core" "11.2.10" + "@babel/core" "7.12.10" + "@babel/generator" "7.12.11" + "@babel/plugin-transform-async-to-generator" "7.12.1" + "@babel/plugin-transform-runtime" "7.12.10" + "@babel/preset-env" "7.12.11" + "@babel/runtime" "7.12.5" + "@babel/template" "7.12.7" + "@discoveryjs/json-ext" "0.5.2" + "@jsdevtools/coverage-istanbul-loader" "3.0.5" + "@ngtools/webpack" "11.2.10" + ansi-colors "4.1.1" + autoprefixer "10.2.4" + babel-loader "8.2.2" + browserslist "^4.9.1" + cacache "15.0.5" + caniuse-lite "^1.0.30001032" + circular-dependency-plugin "5.2.2" + copy-webpack-plugin "6.3.2" + core-js "3.8.3" + critters "0.0.7" + css-loader "5.0.1" + cssnano "4.1.11" + file-loader "6.2.0" + find-cache-dir "3.3.1" + glob "7.1.6" + https-proxy-agent "5.0.0" + inquirer "7.3.3" + jest-worker "26.6.2" + karma-source-map-support "1.4.0" + less "4.1.1" + less-loader "7.3.0" + license-webpack-plugin "2.3.11" + loader-utils "2.0.0" + mini-css-extract-plugin "1.3.5" + minimatch "3.0.4" + open "7.4.0" + ora "5.3.0" + parse5-html-rewriting-stream "6.0.1" + pnp-webpack-plugin "1.6.4" + postcss "8.2.4" + postcss-import "14.0.0" + postcss-loader "4.2.0" + raw-loader "4.0.2" + regenerator-runtime "0.13.7" + resolve-url-loader "3.1.2" + rimraf "3.0.2" + rollup "2.38.4" + rxjs "6.6.3" + sass "1.32.6" + sass-loader "10.1.1" + semver "7.3.4" + source-map "0.7.3" + source-map-loader "1.1.3" + source-map-support "0.5.19" + speed-measure-webpack-plugin "1.4.2" + style-loader "2.0.0" + stylus "0.54.8" + stylus-loader "4.3.3" + terser "5.5.1" + terser-webpack-plugin "4.2.3" + text-table "0.2.0" + tree-kill "1.2.2" + webpack "4.44.2" + webpack-dev-middleware "3.7.2" + webpack-dev-server "3.11.2" + webpack-merge "5.7.3" + webpack-sources "2.2.0" + webpack-subresource-integrity "1.5.2" + worker-plugin "5.0.0" + +"@angular-devkit/build-optimizer@0.1102.10": + version "0.1102.10" + resolved "https://registry.nlark.com/@angular-devkit/build-optimizer/download/@angular-devkit/build-optimizer-0.1102.10.tgz#a120f58ef37b93f74f93695de9d943f7c59c2a66" + integrity sha1-oSD1jvN7k/dPk2ld6dlD98WcKmY= + dependencies: + loader-utils "2.0.0" + source-map "0.7.3" + tslib "2.1.0" + typescript "4.1.5" + webpack-sources "2.2.0" + +"@angular-devkit/build-webpack@0.1102.10": + version "0.1102.10" + resolved "https://registry.nlark.com/@angular-devkit/build-webpack/download/@angular-devkit/build-webpack-0.1102.10.tgz#b12c540c3cb376d2ec65cab17afd060cf87e4e3d" + integrity sha1-sSxUDDyzdtLsZcqxev0GDPh+Tj0= + dependencies: + "@angular-devkit/architect" "0.1102.10" + "@angular-devkit/core" "11.2.10" + rxjs "6.6.3" + +"@angular-devkit/core@11.2.10": + version "11.2.10" + resolved "https://registry.nlark.com/@angular-devkit/core/download/@angular-devkit/core-11.2.10.tgz#ddf37ecbac9af8e0d2801c1827e81e9b3431241d" + integrity sha1-3fN+y6ya+ODSgBwYJ+gemzQxJB0= + dependencies: + ajv "6.12.6" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.3" + source-map "0.7.3" + +"@angular-devkit/schematics@11.2.10": + version "11.2.10" + resolved "https://registry.nlark.com/@angular-devkit/schematics/download/@angular-devkit/schematics-11.2.10.tgz#0986e41943d3502e91db239c12109571e51d1585" + integrity sha1-CYbkGUPTUC6R2yOcEhCVceUdFYU= + dependencies: + "@angular-devkit/core" "11.2.10" + ora "5.3.0" + rxjs "6.6.3" + +"@angular/animations@~11.2.11": + version "11.2.11" + resolved "https://registry.nlark.com/@angular/animations/download/@angular/animations-11.2.11.tgz#7681181531a18892b957577303ad7c68123f6700" + integrity sha1-doEYFTGhiJK5V1dzA618aBI/ZwA= + dependencies: + tslib "^2.0.0" + +"@angular/cdk@11.2.13": + version "11.2.13" + resolved "https://registry.nlark.com/@angular/cdk/download/@angular/cdk-11.2.13.tgz#d54c9187e3b8cf3f8ba190b1edddc08ed2b740de" + integrity sha1-1UyRh+O4zz+LoZCx7d3AjtK3QN4= + dependencies: + tslib "^2.0.0" + optionalDependencies: + parse5 "^5.0.0" + +"@angular/cli@~11.2.10": + version "11.2.10" + resolved "https://registry.nlark.com/@angular/cli/download/@angular/cli-11.2.10.tgz#ce9337946980b91dda88a0ef2be872ffa409a1a2" + integrity sha1-zpM3lGmAuR3aiKDvK+hy/6QJoaI= + dependencies: + "@angular-devkit/architect" "0.1102.10" + "@angular-devkit/core" "11.2.10" + "@angular-devkit/schematics" "11.2.10" + "@schematics/angular" "11.2.10" + "@schematics/update" "0.1102.10" + "@yarnpkg/lockfile" "1.1.0" + ansi-colors "4.1.1" + debug "4.3.1" + ini "2.0.0" + inquirer "7.3.3" + jsonc-parser "3.0.0" + npm-package-arg "8.1.0" + npm-pick-manifest "6.1.0" + open "7.4.0" + ora "5.3.0" + pacote "11.2.4" + resolve "1.19.0" + rimraf "3.0.2" + semver "7.3.4" + symbol-observable "3.0.0" + universal-analytics "0.4.23" + uuid "8.3.2" + +"@angular/common@~11.2.11": + version "11.2.11" + resolved "https://registry.nlark.com/@angular/common/download/@angular/common-11.2.11.tgz#9663da4364dbf4bfe6ccfa68f7e4b13e9bc858ff" + integrity sha1-lmPaQ2Tb9L/mzPpo9+SxPpvIWP8= + dependencies: + tslib "^2.0.0" + +"@angular/compiler-cli@~11.2.11": + version "11.2.11" + resolved "https://registry.nlark.com/@angular/compiler-cli/download/@angular/compiler-cli-11.2.11.tgz#e6111d026112c2bdcd381c672aaa01af043bcd7b" + integrity sha1-5hEdAmESwr3NOBxnKqoBrwQ7zXs= + dependencies: + "@babel/core" "^7.8.6" + "@babel/types" "^7.8.6" + canonical-path "1.0.0" + chokidar "^3.0.0" + convert-source-map "^1.5.1" + dependency-graph "^0.7.2" + fs-extra "4.0.2" + magic-string "^0.25.0" + minimist "^1.2.0" + reflect-metadata "^0.1.2" + semver "^6.3.0" + source-map "^0.6.1" + sourcemap-codec "^1.4.8" + tslib "^2.0.0" + yargs "^16.2.0" + +"@angular/compiler@9.0.0": + version "9.0.0" + resolved "https://registry.nlark.com/@angular/compiler/download/@angular/compiler-9.0.0.tgz#87e0bef4c369b6cadae07e3a4295778fc93799d5" + integrity sha1-h+C+9MNptsra4H46QpV3j8k3mdU= + +"@angular/compiler@~11.2.11": + version "11.2.11" + resolved "https://registry.nlark.com/@angular/compiler/download/@angular/compiler-11.2.11.tgz#8dd325e553aeb24b00f2aacbc8657b0206a516ae" + integrity sha1-jdMl5VOusksA8qrLyGV7AgalFq4= + dependencies: + tslib "^2.0.0" + +"@angular/core@9.0.0": + version "9.0.0" + resolved "https://registry.nlark.com/@angular/core/download/@angular/core-9.0.0.tgz#227dc53e1ac81824f998c6e76000b7efc522641e" + integrity sha1-In3FPhrIGCT5mMbnYAC378UiZB4= + +"@angular/core@~11.2.11": + version "11.2.11" + resolved "https://registry.nlark.com/@angular/core/download/@angular/core-11.2.11.tgz#96890c9256bcc3b651ea3cdcf144ef744acda8f3" + integrity sha1-lokMkla8w7ZR6jzc8UTvdErNqPM= + dependencies: + tslib "^2.0.0" + +"@angular/forms@~11.2.11": + version "11.2.11" + resolved "https://registry.nlark.com/@angular/forms/download/@angular/forms-11.2.11.tgz#44b36a84ce702630e8c15432cae4ab11f9cdcc34" + integrity sha1-RLNqhM5wJjDowVQyyuSrEfnNzDQ= + dependencies: + tslib "^2.0.0" + +"@angular/material@11.2.13": + version "11.2.13" + resolved "https://registry.nlark.com/@angular/material/download/@angular/material-11.2.13.tgz#99960316d3ce58aac7497d7bb8b0c05468f502b9" + integrity sha1-mZYDFtPOWKrHSX17uLDAVGj1Ark= + dependencies: + tslib "^2.0.0" + +"@angular/platform-browser-dynamic@~11.2.11": + version "11.2.11" + resolved "https://registry.nlark.com/@angular/platform-browser-dynamic/download/@angular/platform-browser-dynamic-11.2.11.tgz#6ef4803150e50a92c518f4e7079ae52c31374bc5" + integrity sha1-bvSAMVDlCpLFGPTnB5rlLDE3S8U= + dependencies: + tslib "^2.0.0" + +"@angular/platform-browser@~11.2.11": + version "11.2.11" + resolved "https://registry.nlark.com/@angular/platform-browser/download/@angular/platform-browser-11.2.11.tgz#d7a1643d9615e6bbda854e91d7c77ae185583ca0" + integrity sha1-16FkPZYV5rvahU6R18d64YVYPKA= + dependencies: + tslib "^2.0.0" + +"@angular/router@~11.2.11": + version "11.2.11" + resolved "https://registry.nlark.com/@angular/router/download/@angular/router-11.2.11.tgz#fa3a5e1c896b5f9ade7eab658fa0c29dd85d72bf" + integrity sha1-+jpeHIlrX5refqtlj6DCndhdcr8= + dependencies: + tslib "^2.0.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha1-3PyCa+72XnXFDiHTg319lXmN1lg= + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/compat-data@^7.12.7", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.13.8": + version "7.13.15" + resolved "https://registry.nlark.com/@babel/compat-data/download/@babel/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4" + integrity sha1-fo7qQtC2T9orN1si0GxgUiLoSPQ= + +"@babel/core@7.12.10": + version "7.12.10" + resolved "https://registry.nlark.com/@babel/core/download/@babel/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + integrity sha1-t5ouG59w7T2Eu/ttjE74JfYGvM0= + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.10" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.7.5", "@babel/core@^7.8.6": + version "7.13.16" + resolved "https://registry.nlark.com/@babel/core/download/@babel/core-7.13.16.tgz#7756ab24396cc9675f1c3fcd5b79fcce192ea96a" + integrity sha1-d1arJDlsyWdfHD/NW3n8zhkuqWo= + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.16" + "@babel/helper-compilation-targets" "^7.13.16" + "@babel/helper-module-transforms" "^7.13.14" + "@babel/helpers" "^7.13.16" + "@babel/parser" "^7.13.16" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.15" + "@babel/types" "^7.13.16" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@7.12.11": + version "7.12.11" + resolved "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.12.11.tgz?cache=0&sync_timestamp=1618917779874&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + integrity sha1-mKffe4w1jJo3qweiQFaFMBaro68= + dependencies: + "@babel/types" "^7.12.11" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.12.10", "@babel/generator@^7.13.16": + version "7.13.16" + resolved "https://registry.nlark.com/@babel/generator/download/@babel/generator-7.13.16.tgz?cache=0&sync_timestamp=1618917779874&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.13.16.tgz#0befc287031a201d84cdfc173b46b320ae472d14" + integrity sha1-C+/ChwMaIB2EzfwXO0azIK5HLRQ= + dependencies: + "@babel/types" "^7.13.16" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.12.13": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" + integrity sha1-D1jobfxLs7H819uAZXDhd9Q5tqs= + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" + integrity sha1-a8IDYciLCnTQUTemXKyNPL9vYfw= + dependencies: + "@babel/helper-explode-assignable-expression" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/helper-compilation-targets@^7.12.5", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.13.8": + version "7.13.16" + resolved "https://registry.nlark.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" + integrity sha1-bpHczxXj9D5VVt/+MthgEJiHVjw= + dependencies: + "@babel/compat-data" "^7.13.15" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.13.0": + version "7.13.11" + resolved "https://registry.nlark.com/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" + integrity sha1-MNMKAFvKLJU/VlP8JQkaSSF39PY= + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-member-expression-to-functions" "^7.13.0" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-split-export-declaration" "^7.12.13" + +"@babel/helper-create-regexp-features-plugin@^7.12.13": + version "7.12.17" + resolved "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.12.17.tgz?cache=0&sync_timestamp=1613661261586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-create-regexp-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" + integrity sha1-oqyH6eMZJprGVbjUQV6U041mPLc= + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + regexpu-core "^4.7.1" + +"@babel/helper-explode-assignable-expression@^7.12.13": + version "7.13.0" + resolved "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.13.0.tgz?cache=0&sync_timestamp=1614035445198&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-explode-assignable-expression%2Fdownload%2F%40babel%2Fhelper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" + integrity sha1-F7XFn/Rz2flW9A71cM86dsoSZX8= + dependencies: + "@babel/types" "^7.13.0" + +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha1-k61lbbPDwiMlWf17LD29y+DrN3o= + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha1-vGNFHUA6OzCCuX4diz/lvUCR5YM= + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-hoist-variables@^7.13.0": + version "7.13.16" + resolved "https://registry.nlark.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.13.16.tgz?cache=0&sync_timestamp=1618917701165&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-hoist-variables%2Fdownload%2F%40babel%2Fhelper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" + integrity sha1-GxZRJJ6UtR+PDTNDmEPjPjl3WzA= + dependencies: + "@babel/traverse" "^7.13.15" + "@babel/types" "^7.13.16" + +"@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": + version "7.13.12" + resolved "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.13.12.tgz?cache=0&sync_timestamp=1616428120148&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-member-expression-to-functions%2Fdownload%2F%40babel%2Fhelper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" + integrity sha1-3+No8m1CagcpnY1lE4IXaCFubXI= + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.12.5", "@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha1-xqNppvNiHLJdoBQHhoTakZa2GXc= + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.14": + version "7.13.14" + resolved "https://registry.nlark.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" + integrity sha1-5gBlK6SMyxZBd1QTyzLPpOi0le8= + dependencies: + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.14" + +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha1-XALRcbTIYVsecWP4iMHIHDCiquo= + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.13.0" + resolved "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.13.0.tgz?cache=0&sync_timestamp=1614035444776&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-plugin-utils%2Fdownload%2F%40babel%2Fhelper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha1-gGUmzhJa7QM3O8QWqCgyHjpqM68= + +"@babel/helper-remap-async-to-generator@^7.12.1", "@babel/helper-remap-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.13.0.tgz?cache=0&sync_timestamp=1614035447369&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-remap-async-to-generator%2Fdownload%2F%40babel%2Fhelper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" + integrity sha1-N2p2DZ97SyB3qd0Fqpw5J8rbIgk= + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-wrap-function" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": + version "7.13.12" + resolved "https://registry.nlark.com/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" + integrity sha1-ZEL0wa2RJQJIGlZKc4beDHf/OAQ= + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.12" + +"@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.13.12": + version "7.13.12" + resolved "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.13.12.tgz?cache=0&sync_timestamp=1616428103561&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-simple-access%2Fdownload%2F%40babel%2Fhelper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" + integrity sha1-3WxTivthgZ0gWgEsMXkqOcel6vY= + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.nlark.com/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha1-Ri3GOn5DWt6EaDhcY9K4TM5LPL8= + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.12.13.tgz?cache=0&sync_timestamp=1612314645430&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha1-6UML4AuvPoiw4T5vnU6vITY3KwU= + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha1-yaHwIZF9y1zPDU5FPjmQIpgfye0= + +"@babel/helper-validator-option@^7.12.11", "@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.nlark.com/@babel/helper-validator-option/download/@babel/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha1-0fvwEuGnm37rv9xtJwuq+NnrmDE= + +"@babel/helper-wrap-function@^7.13.0": + version "7.13.0" + resolved "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.13.0.tgz?cache=0&sync_timestamp=1614035447022&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-wrap-function%2Fdownload%2F%40babel%2Fhelper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" + integrity sha1-vbXGb9qFJuwjWriUrVOhI1x5/MQ= + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.13.16": + version "7.13.17" + resolved "https://registry.nlark.com/@babel/helpers/download/@babel/helpers-7.13.17.tgz?cache=0&sync_timestamp=1618960866833&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.13.17.tgz#b497c7a00e9719d5b613b8982bda6ed3ee94caf6" + integrity sha1-tJfHoA6XGdW2E7iYK9pu0+6UyvY= + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.17" + "@babel/types" "^7.13.17" + +"@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.13.10.tgz?cache=0&sync_timestamp=1615243550421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha1-qLKmYUj1sn1maxXYF3Q0enMdUtE= + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.10", "@babel/parser@^7.12.13", "@babel/parser@^7.12.7", "@babel/parser@^7.13.16": + version "7.13.16" + resolved "https://registry.nlark.com/@babel/parser/download/@babel/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37" + integrity sha1-DxgXmwRI5pObHz9cTDVaOpvN/Tc= + +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.13.15" + resolved "https://registry.nlark.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.13.15.tgz#80e549df273a3b3050431b148c892491df1bcc5b" + integrity sha1-gOVJ3yc6OzBQQxsUjIkkkd8bzFs= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.12.1": + version "7.13.0" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" + integrity sha1-FGN2AAuU79AB5XpAqIpSWvqrnzc= + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-proposal-dynamic-import@^7.12.1": + version "7.13.8" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" + integrity sha1-h2ofaWbh3sMy6MlFGv2jvrzfLh0= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" + integrity sha1-OTvkekrNA/oq9uPN6bBuM94bRG0= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.1": + version "7.13.8" + resolved "https://registry.nlark.com/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" + integrity sha1-vx+zYlRwda/aNjTtMVccWQGv73s= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.13.8" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.13.8.tgz?cache=0&sync_timestamp=1614383433248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-logical-assignment-operators%2Fdownload%2F%40babel%2Fplugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" + integrity sha1-k/p41jhXxAzjyMMxUiD9AL+7Tho= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.13.8" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz?cache=0&sync_timestamp=1614383433058&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator%2Fdownload%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" + integrity sha1-NzCjHa/TwQ2MzRBkjtgKKsVHLvM= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" + integrity sha1-vZ2jGI54e1EgtPnUZagmHOZ+0ds= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1": + version "7.13.8" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" + integrity sha1-XSEKTXJ9bOOxj53oLMmaOWTu1go= + dependencies: + "@babel/compat-data" "^7.13.8" + "@babel/helper-compilation-targets" "^7.13.8" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.13.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.12.1": + version "7.13.8" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" + integrity sha1-Ota9WQFQbqmW/DG9zzzPor7XEQc= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.12.7": + version "7.13.12" + resolved "https://registry.nlark.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866" + integrity sha1-up/rYB1CLgrepnYMK9a7t7/sSGY= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.12.1": + version "7.13.0" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" + integrity sha1-BL1MbUD25rv6L1fi2AlLrZAO94c= + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" + integrity sha1-vr3lEzm+gpwXqqrO0YZB3rYrObo= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha1-qYP7Gusuw/btBCohD2QOkOeG/g0= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.1": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz?cache=0&sync_timestamp=1607126741224&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-dynamic-import%2Fdownload%2F%40babel%2Fplugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha1-AolkqbqA28CUyRXEh618TnpmRlo= + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.nlark.com/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha1-ypHvRjA1MESLkGZSusLp/plB9pk= + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.nlark.com/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c= + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha1-YRGiZbz7Ag6579D9/X0mQCue1sE= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.12.1": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.12.13.tgz?cache=0&sync_timestamp=1612314769908&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-top-level-await%2Fdownload%2F%40babel%2Fplugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" + integrity sha1-xfD6biSfW3OXJ/kjVAz3qAYTAXg= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-arrow-functions@^7.12.1": + version "7.13.0" + resolved "https://registry.nlark.com/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.13.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-arrow-functions%2Fdownload%2F%40babel%2Fplugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" + integrity sha1-EKWb661S1jegJ6+mkujVzv9ePa4= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-async-to-generator@7.12.1": + version "7.12.1" + resolved "https://registry.nlark.com/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha1-OEmknMKiLpdDy9a1KSbTAzcimvE= + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + +"@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.13.0" + resolved "https://registry.nlark.com/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" + integrity sha1-jhEr9ncbgr8el05eJoBsXJmqUW8= + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + +"@babel/plugin-transform-block-scoped-functions@^7.12.1": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" + integrity sha1-qb8YNvKjm062zwmWdzneKepL9MQ= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-block-scoping@^7.12.11": + version "7.13.16" + resolved "https://registry.nlark.com/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.13.16.tgz#a9c0f10794855c63b1d629914c7dcfeddd185892" + integrity sha1-qcDxB5SFXGOx1imRTH3P7d0YWJI= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-classes@^7.12.1": + version "7.13.0" + resolved "https://registry.nlark.com/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" + integrity sha1-AmUVUHXEKRi/TTpAUxNBdq2bUzs= + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-split-export-declaration" "^7.12.13" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.12.1": + version "7.13.0" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.13.0.tgz?cache=0&sync_timestamp=1614035446130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-computed-properties%2Fdownload%2F%40babel%2Fplugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" + integrity sha1-hFxui5u1U3ax+guS7wvcjqBmRO0= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-destructuring@^7.12.1": + version "7.13.17" + resolved "https://registry.nlark.com/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.13.17.tgz?cache=0&sync_timestamp=1618960864725&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-destructuring%2Fdownload%2F%40babel%2Fplugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27" + integrity sha1-Z42WV2Y4wZ1bNrMyUE0/1uBt6ic= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" + integrity sha1-PxYBzCmQW/y2f1ORDxl66v67Ja0= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-duplicate-keys@^7.12.1": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" + integrity sha1-bwa4eouAP9ko5UuBwljwoAM5BN4= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-exponentiation-operator@^7.12.1": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" + integrity sha1-TVI5C5onPmUeSrpq7knvQOgM0KE= + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-for-of@^7.12.1": + version "7.13.0" + resolved "https://registry.nlark.com/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.13.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-for-of%2Fdownload%2F%40babel%2Fplugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" + integrity sha1-x5n4gagJGsJrVIZ6hFw+l9JpYGI= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-function-name@^7.12.1": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" + integrity sha1-uwJEUvmq7YYdN0yOeiQlLOOlAFE= + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-literals@^7.12.1": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" + integrity sha1-LKRbr+SoIBl88xV5Sk0mVg/kvbk= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-member-expression-literals@^7.12.1": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.12.13.tgz?cache=0&sync_timestamp=1612314777089&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-member-expression-literals%2Fdownload%2F%40babel%2Fplugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" + integrity sha1-X/pmzVm54ZExTJ8fgDuTjowIHkA= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-modules-amd@^7.12.1": + version "7.13.0" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.13.0.tgz?cache=0&sync_timestamp=1614035447659&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-amd%2Fdownload%2F%40babel%2Fplugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" + integrity sha1-GfUR1g49h1PMWm1Od106UYSGbMM= + dependencies: + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.13.8" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" + integrity sha1-ewGtfC3PInWwb6F4HgDRPUILPhs= + dependencies: + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-simple-access" "^7.12.13" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.13.8" + resolved "https://registry.nlark.com/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" + integrity sha1-bQZu4r/zx7PWC/KN7Baa2ZODGuM= + dependencies: + "@babel/helper-hoist-variables" "^7.13.0" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-identifier" "^7.12.11" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.12.1": + version "7.13.0" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.13.0.tgz?cache=0&sync_timestamp=1614035447957&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-umd%2Fdownload%2F%40babel%2Fplugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" + integrity sha1-ij2WqX0ZlwW5/QIVgAgq+BwG5ws= + dependencies: + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" + integrity sha1-IhNyWl9bu+NktQw7pZmMlZnFydk= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + +"@babel/plugin-transform-new-target@^7.12.1": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.12.13.tgz?cache=0&sync_timestamp=1612314768286&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-new-target%2Fdownload%2F%40babel%2Fplugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" + integrity sha1-4i2MOvJLFQ3VKMvW5oXnmb8cNRw= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-object-super@^7.12.1": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" + integrity sha1-tEFqLWO4974xTz00m9VanBtRcfc= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-replace-supers" "^7.12.13" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.13.0": + version "7.13.0" + resolved "https://registry.nlark.com/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" + integrity sha1-j6dgPjCX+cC3yhpIIbwvtS6eUAc= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-property-literals@^7.12.1": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.12.13.tgz?cache=0&sync_timestamp=1612314768626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-property-literals%2Fdownload%2F%40babel%2Fplugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" + integrity sha1-TmqeN4ZNjxs7wOLc57+IV9uLGoE= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-regenerator@^7.12.1": + version "7.13.15" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" + integrity sha1-5esolFv4tlY+f4GJRflmqNKZfzk= + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.1": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" + integrity sha1-fZmI1PBuD+aX6h2YAxiKoYtHJpU= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-runtime@7.12.10": + version "7.12.10" + resolved "https://registry.nlark.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.12.10.tgz?cache=0&sync_timestamp=1618847033373&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fplugin-transform-runtime%2Fdownload%2F%40babel%2Fplugin-transform-runtime-7.12.10.tgz#af0fded4e846c4b37078e8e5d06deac6cd848562" + integrity sha1-rw/e1OhGxLNweOjl0G3qxs2EhWI= + dependencies: + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.12.1": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" + integrity sha1-23VXMrcMU51QTGOQ2c6Q/mSv960= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-spread@^7.12.1": + version "7.13.0" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" + integrity sha1-hIh3EOJzwYFaznrkWfb0Kl0x1f0= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.12.7": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" + integrity sha1-dg/9k2+s5z+GCuZG+4bugvPQbR8= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-template-literals@^7.12.1": + version "7.13.0" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.13.0.tgz?cache=0&sync_timestamp=1614035446668&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-template-literals%2Fdownload%2F%40babel%2Fplugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" + integrity sha1-o2BJEnl3rZRDje50Q1mNHO/fQJ0= + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-typeof-symbol@^7.12.10": + version "7.12.13" + resolved "https://registry.nlark.com/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" + integrity sha1-eF3Weh8upXnZwr5yLejITLhfWn8= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.12.13.tgz?cache=0&sync_timestamp=1612314780432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-escapes%2Fdownload%2F%40babel%2Fplugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" + integrity sha1-hAztO4FtO1En3R0S3O3F3q0aXnQ= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-unicode-regex@^7.12.1": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" + integrity sha1-tSUhaFgE4VWxIC6D/BiNNLtw9aw= + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/preset-env@7.12.11": + version "7.12.11" + resolved "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9" + integrity sha1-VdX3mBSHNlyT27yEUHscchXoV/k= + dependencies: + "@babel/compat-data" "^7.12.7" + "@babel/helper-compilation-targets" "^7.12.5" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.11" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.7" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.11" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.7" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.10" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.11" + core-js-compat "^3.8.0" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.npm.taobao.org/@babel/preset-modules/download/@babel/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha1-Ni8raMZihClw/bXiVP/I/BwuQV4= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@7.12.5": + version "7.12.5" + resolved "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.12.5.tgz?cache=0&sync_timestamp=1618960866380&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha1-QQ5+SHRB4bNgwpvnFdhw2bmFiC4= + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.8.4": + version "7.13.17" + resolved "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.13.17.tgz?cache=0&sync_timestamp=1618960866380&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.13.17.tgz#8966d1fc9593bf848602f0662d6b4d0069e3a7ec" + integrity sha1-iWbR/JWTv4SGAvBmLWtNAGnjp+w= + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@7.12.7": + version "7.12.7" + resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha1-yBcjNpYBjjn7tsSR0vtoTgXtQ7w= + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + +"@babel/template@^7.12.13", "@babel/template@^7.12.7": + version "7.12.13" + resolved "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha1-UwJlvooliduzdSOETFvLVZR/syc= + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.12.10", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.13.15", "@babel/traverse@^7.13.17": + version "7.13.17" + resolved "https://registry.nlark.com/@babel/traverse/download/@babel/traverse-7.13.17.tgz?cache=0&sync_timestamp=1618961109492&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.13.17.tgz#c85415e0c7d50ac053d758baec98b28b2ecfeea3" + integrity sha1-yFQV4MfVCsBT11i67Jiyiy7P7qM= + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.16" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.16" + "@babel/types" "^7.13.17" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.13", "@babel/types@^7.12.7", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.13.16", "@babel/types@^7.13.17", "@babel/types@^7.4.4", "@babel/types@^7.8.6": + version "7.13.17" + resolved "https://registry.nlark.com/@babel/types/download/@babel/types-7.13.17.tgz?cache=0&sync_timestamp=1618961109356&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.13.17.tgz#48010a115c9fba7588b4437dd68c9469012b38b4" + integrity sha1-SAEKEVyfunWItEN91oyUaQErOLQ= + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + to-fast-properties "^2.0.0" + +"@discoveryjs/json-ext@0.5.2": + version "0.5.2" + resolved "https://registry.npm.taobao.org/@discoveryjs/json-ext/download/@discoveryjs/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" + integrity sha1-jwOiKgTeQ3JU6M6MyEujlokoh1I= + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.npm.taobao.org/@istanbuljs/schema/download/@istanbuljs/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha1-5F44TkuOwWvOL9kDr3hFD2v37Jg= + +"@jacekpietal/gstats@^0.1.0": + version "0.1.0" + resolved "https://registry.nlark.com/@jacekpietal/gstats/download/@jacekpietal/gstats-0.1.0.tgz#b61fd6cc6f7ed0fd27e92484ee418ea55f62c3a1" + integrity sha1-th/WzG9+0P0n6SSE7kGOpV9iw6E= + +"@jsdevtools/coverage-istanbul-loader@3.0.5": + version "3.0.5" + resolved "https://registry.npm.taobao.org/@jsdevtools/coverage-istanbul-loader/download/@jsdevtools/coverage-istanbul-loader-3.0.5.tgz#2a4bc65d0271df8d4435982db4af35d81754ee26" + integrity sha1-KkvGXQJx341ENZgttK812BdU7iY= + dependencies: + convert-source-map "^1.7.0" + istanbul-lib-instrument "^4.0.3" + loader-utils "^2.0.0" + merge-source-map "^1.1.0" + schema-utils "^2.7.0" + +"@ngtools/webpack@11.2.10": + version "11.2.10" + resolved "https://registry.nlark.com/@ngtools/webpack/download/@ngtools/webpack-11.2.10.tgz#b341c2dd20b6c2b6be466960fbd9e51a563ef326" + integrity sha1-s0HC3SC2wra+Rmlg+9nlGlY+8yY= + dependencies: + "@angular-devkit/core" "11.2.10" + enhanced-resolve "5.7.0" + webpack-sources "2.2.0" + +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.nlark.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha1-1LNUml213iaD4MEHGrTxQJBLv2k= + dependencies: + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.npm.taobao.org/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha1-o/LdYbq0O424+hCKEhz//kxnZlU= + +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.npm.taobao.org/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha1-zOk5azCqWv6eN1Zgj1gxrctT0GM= + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" + +"@npmcli/ci-detect@^1.0.0": + version "1.3.0" + resolved "https://registry.npm.taobao.org/@npmcli/ci-detect/download/@npmcli/ci-detect-1.3.0.tgz#6c1d2c625fb6ef1b9dea85ad0a5afcbef85ef22a" + integrity sha1-bB0sYl+27xud6oWtClr8vvhe8io= + +"@npmcli/git@^2.0.1": + version "2.0.8" + resolved "https://registry.npm.taobao.org/@npmcli/git/download/@npmcli/git-2.0.8.tgz#c38b54cdeec556ab641cf6161cc7825711a88d65" + integrity sha1-w4tUze7FVqtkHPYWHMeCVxGojWU= + dependencies: + "@npmcli/promise-spawn" "^1.3.2" + lru-cache "^6.0.0" + mkdirp "^1.0.4" + npm-pick-manifest "^6.1.1" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^2.0.2" + +"@npmcli/installed-package-contents@^1.0.5": + version "1.0.7" + resolved "https://registry.npm.taobao.org/@npmcli/installed-package-contents/download/@npmcli/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha1-q3QIxhR5EblwqKviYc5RIjKj9Po= + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.npm.taobao.org/@npmcli/move-file/download/@npmcli/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha1-GoLD43L3yuklPrZtclQ9a4aFxnQ= + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/node-gyp@^1.0.2": + version "1.0.2" + resolved "https://registry.npm.taobao.org/@npmcli/node-gyp/download/@npmcli/node-gyp-1.0.2.tgz#3cdc1f30e9736dbc417373ed803b42b1a0a29ede" + integrity sha1-PNwfMOlzbbxBc3PtgDtCsaCint4= + +"@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": + version "1.3.2" + resolved "https://registry.npm.taobao.org/@npmcli/promise-spawn/download/@npmcli/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" + integrity sha1-QtTlao6SdPuhgNq8CupuOPKSdPU= + dependencies: + infer-owner "^1.0.4" + +"@npmcli/run-script@^1.3.0": + version "1.8.5" + resolved "https://registry.nlark.com/@npmcli/run-script/download/@npmcli/run-script-1.8.5.tgz#f250a0c5e1a08a792d775a315d0ff42fc3a51e1d" + integrity sha1-8lCgxeGginktd1oxXQ/0L8OlHh0= + dependencies: + "@npmcli/node-gyp" "^1.0.2" + "@npmcli/promise-spawn" "^1.3.2" + infer-owner "^1.0.4" + node-gyp "^7.1.0" + read-package-json-fast "^2.0.1" + +"@pixi/accessibility@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/accessibility/download/@pixi/accessibility-5.3.10.tgz#6ff45c1a362f7a850a5a17b3d532d44bbcbb2e08" + integrity sha1-b/RcGjYveoUKWhez1TLUS7y7Lgg= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/display" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/accessibility@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/accessibility/download/@pixi/accessibility-6.0.4.tgz#842ff8e4303cbc46fc2dd02c263a110fd23fb656" + integrity sha1-hC/45DA8vEb8LdAsJjoRD9I/tlY= + dependencies: + "@pixi/canvas-renderer" "6.0.4" + "@pixi/core" "6.0.4" + "@pixi/display" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/app@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/app/download/@pixi/app-5.3.10.tgz#366d390c917fb89ffac308663ab8f811b21fb6aa" + integrity sha1-Nm05DJF/uJ/6wwhmOrj4EbIftqo= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/display" "5.3.10" + +"@pixi/app@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/app/download/@pixi/app-6.0.4.tgz#138ce670c057dc351f3b88e6f27ac0fa6edf5cb0" + integrity sha1-E4zmcMBX3DUfO4jm8nrA+m7fXLA= + dependencies: + "@pixi/core" "6.0.4" + "@pixi/display" "6.0.4" + +"@pixi/canvas-renderer@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/canvas-renderer/download/@pixi/canvas-renderer-6.0.4.tgz#98fbd7c0e6aeb92e01cc9fe61e634693515bd735" + integrity sha1-mPvXwOauuS4BzJ/mHmNGk1Fb1zU= + dependencies: + "@pixi/constants" "6.0.4" + "@pixi/core" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/settings" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/compressed-textures@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/compressed-textures/download/@pixi/compressed-textures-6.0.4.tgz#84980b62ae1b499d2874a825b52b6e5e2c8b8e45" + integrity sha1-hJgLYq4bSZ0odKgltStuXiyLjkU= + dependencies: + "@pixi/constants" "6.0.4" + "@pixi/core" "6.0.4" + "@pixi/loaders" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/constants@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/constants/download/@pixi/constants-5.3.10.tgz#f7699d65e5b6a1fdbfacaa2a4e628b4bfbbc5c16" + integrity sha1-92mdZeW2of2/rKoqTmKLS/u8XBY= + +"@pixi/constants@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/constants/download/@pixi/constants-6.0.4.tgz#c0fb4ff79a81ad5dd2ce1bb3a1b8b3f2f01e221a" + integrity sha1-wPtP95qBrV3Szhuzobiz8vAeIho= + +"@pixi/core@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/core/download/@pixi/core-5.3.10.tgz#0d607bd708bd5c8d9a4e23b34a08c4fcaeb382c6" + integrity sha1-DWB71wi9XI2aTiOzSgjE/K6zgsY= + dependencies: + "@pixi/constants" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/runner" "5.3.10" + "@pixi/settings" "5.3.10" + "@pixi/ticker" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/core@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/core/download/@pixi/core-6.0.4.tgz#81979d49579c3b54df5f3da76d74037d82dd2d4d" + integrity sha1-gZedSVecO1TfXz2nbXQDfYLdLU0= + dependencies: + "@pixi/constants" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/runner" "6.0.4" + "@pixi/settings" "6.0.4" + "@pixi/ticker" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/display@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/display/download/@pixi/display-5.3.10.tgz#6b79e60c9ce5c6b89e48bf792ff74bf4a6f7efdb" + integrity sha1-a3nmDJzlxrieSL95L/dL9Kb379s= + dependencies: + "@pixi/math" "5.3.10" + "@pixi/settings" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/display@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/display/download/@pixi/display-6.0.4.tgz#f192edb57a1d68d0616b2d379284a84490df0411" + integrity sha1-8ZLttXodaNBhay03koSoRJDfBBE= + dependencies: + "@pixi/math" "6.0.4" + "@pixi/settings" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/extract@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/extract/download/@pixi/extract-5.3.10.tgz#1539606b2ea4f5727fc54ea7a71b39774d5617cd" + integrity sha1-FTlgay6k9XJ/xU6npxs5d01WF80= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/extract@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/extract/download/@pixi/extract-6.0.4.tgz#91eba76f402fea759a23a8a0b800d3c602cc82b6" + integrity sha1-keunb0Av6nWaI6iguADTxgLMgrY= + dependencies: + "@pixi/core" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/filter-alpha@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/filter-alpha/download/@pixi/filter-alpha-5.3.10.tgz#dda43bd9e028e33b74d347e5d17cb6bf2148e303" + integrity sha1-3aQ72eAo4zt000fl0Xy2vyFI4wM= + dependencies: + "@pixi/core" "5.3.10" + +"@pixi/filter-alpha@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/filter-alpha/download/@pixi/filter-alpha-6.0.4.tgz#1e24c83855a4d5e61a59236bd74833977cd9dccd" + integrity sha1-HiTIOFWk1eYaWSNr10gzl3zZ3M0= + dependencies: + "@pixi/core" "6.0.4" + +"@pixi/filter-blur@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/filter-blur/download/@pixi/filter-blur-5.3.10.tgz#b0779f316694a8d109633ab8b1b6cec96738f436" + integrity sha1-sHefMWaUqNEJYzq4sbbOyWc49DY= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/settings" "5.3.10" + +"@pixi/filter-blur@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/filter-blur/download/@pixi/filter-blur-6.0.4.tgz#23a735192962598fd88ef031cc85b9ab65455a5c" + integrity sha1-I6c1GSliWY/YjvAxzIW5q2VFWlw= + dependencies: + "@pixi/core" "6.0.4" + "@pixi/settings" "6.0.4" + +"@pixi/filter-color-matrix@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/filter-color-matrix/download/@pixi/filter-color-matrix-5.3.10.tgz#47697061e505903a1082fca8e96c228517d34938" + integrity sha1-R2lwYeUFkDoQgvyo6WwihRfTSTg= + dependencies: + "@pixi/core" "5.3.10" + +"@pixi/filter-color-matrix@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/filter-color-matrix/download/@pixi/filter-color-matrix-6.0.4.tgz#91e2fd981407ff5849646c47e87d93402bfced4a" + integrity sha1-keL9mBQH/1hJZGxH6H2TQCv87Uo= + dependencies: + "@pixi/core" "6.0.4" + +"@pixi/filter-displacement@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/filter-displacement/download/@pixi/filter-displacement-5.3.10.tgz#dd1e8d9303dda727ab963c404a5970e1fc3ed624" + integrity sha1-3R6NkwPdpyerljxASllw4fw+1iQ= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/math" "5.3.10" + +"@pixi/filter-displacement@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/filter-displacement/download/@pixi/filter-displacement-6.0.4.tgz#eaa599f8753533864a4a722a72f3e929f47c2a02" + integrity sha1-6qWZ+HU1M4ZKSnIqcvPpKfR8KgI= + dependencies: + "@pixi/core" "6.0.4" + "@pixi/math" "6.0.4" + +"@pixi/filter-fxaa@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/filter-fxaa/download/@pixi/filter-fxaa-5.3.10.tgz#4f1eed4fa81dea6b36610677d1e85e7fcf1d0371" + integrity sha1-Tx7tT6gd6ms2YQZ30ehef88dA3E= + dependencies: + "@pixi/core" "5.3.10" + +"@pixi/filter-fxaa@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/filter-fxaa/download/@pixi/filter-fxaa-6.0.4.tgz#da8b4bd2349f2e2b4969b805a3375e67e4187cc2" + integrity sha1-2otL0jSfLitJabgFozdeZ+QYfMI= + dependencies: + "@pixi/core" "6.0.4" + +"@pixi/filter-noise@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/filter-noise/download/@pixi/filter-noise-5.3.10.tgz#e981bc824b36e2f803e2b61a9bd3138f18e4f11e" + integrity sha1-6YG8gks24vgD4rYam9MTjxjk8R4= + dependencies: + "@pixi/core" "5.3.10" + +"@pixi/filter-noise@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/filter-noise/download/@pixi/filter-noise-6.0.4.tgz#2264b2555c64de23f213e7c8fe64cf3fd9fef32a" + integrity sha1-ImSyVVxk3iPyE+fI/mTPP9n+8yo= + dependencies: + "@pixi/core" "6.0.4" + +"@pixi/graphics@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/graphics/download/@pixi/graphics-5.3.10.tgz#6c7bacd1893729cc2ae38b415c6be90bb8005ef0" + integrity sha1-bHus0Yk3Kcwq44tBXGvpC7gAXvA= + dependencies: + "@pixi/constants" "5.3.10" + "@pixi/core" "5.3.10" + "@pixi/display" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/sprite" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/graphics@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/graphics/download/@pixi/graphics-6.0.4.tgz#3d2e75acb8145a80275b194413b06fb28505c663" + integrity sha1-PS51rLgUWoAnWxlEE7BvsoUFxmM= + dependencies: + "@pixi/constants" "6.0.4" + "@pixi/core" "6.0.4" + "@pixi/display" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/sprite" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/interaction@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/interaction/download/@pixi/interaction-5.3.10.tgz#8c15cad3862bfaf87311d42b414b7f39f6352886" + integrity sha1-jBXK04Yr+vhzEdQrQUt/OfY1KIY= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/display" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/ticker" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/interaction@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/interaction/download/@pixi/interaction-6.0.4.tgz#9b1eaf903997adb55df0068d080ce6c2b4467042" + integrity sha1-mx6vkDmXrbVd8AaNCAzmwrRGcEI= + dependencies: + "@pixi/core" "6.0.4" + "@pixi/display" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/ticker" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/loaders@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/loaders/download/@pixi/loaders-5.3.10.tgz#0a0b8a9c19f0f1c80001ac9ecab4150fb3731d7a" + integrity sha1-CguKnBnw8cgAAayeyrQVD7NzHXo= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/utils" "5.3.10" + resource-loader "^3.0.1" + +"@pixi/loaders@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/loaders/download/@pixi/loaders-6.0.4.tgz#1d7dc1aa762627396e63d0bc1276e134d12c2ef3" + integrity sha1-HX3BqnYmJzluY9C8EnbhNNEsLvM= + dependencies: + "@pixi/constants" "6.0.4" + "@pixi/core" "6.0.4" + "@pixi/utils" "6.0.4" + resource-loader "^3.0.1" + +"@pixi/math@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/math/download/@pixi/math-5.3.10.tgz#76c7296300de831cf2ab68f73f17828b7d98cda8" + integrity sha1-dscpYwDegxzyq2j3PxeCi32Yzag= + +"@pixi/math@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/math/download/@pixi/math-6.0.4.tgz#360a8edd0dcbb7ff3a3053cf2dad9227a95e36f4" + integrity sha1-NgqO3Q3Lt/86MFPPLa2SJ6leNvQ= + +"@pixi/mesh-extras@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/mesh-extras/download/@pixi/mesh-extras-5.3.10.tgz#f2ce0ab87778ecf4f869907f1977441a94ffb1dd" + integrity sha1-8s4KuHd47PT4aZB/GXdEGpT/sd0= + dependencies: + "@pixi/constants" "5.3.10" + "@pixi/core" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/mesh" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/mesh-extras@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/mesh-extras/download/@pixi/mesh-extras-6.0.4.tgz#eb7f458eb7d1b6de52cf2f5236f2a5967b9ce0cd" + integrity sha1-639FjrfRtt5Szy9SNvKllnuc4M0= + dependencies: + "@pixi/constants" "6.0.4" + "@pixi/core" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/mesh" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/mesh@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/mesh/download/@pixi/mesh-5.3.10.tgz#c91325755e8e5dad45a42474a6ab30a00b3d3bae" + integrity sha1-yRMldV6OXa1FpCR0pqswoAs9O64= + dependencies: + "@pixi/constants" "5.3.10" + "@pixi/core" "5.3.10" + "@pixi/display" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/settings" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/mesh@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/mesh/download/@pixi/mesh-6.0.4.tgz#f9b211238289a384a56f8f1abfb8693cbc5ca4e7" + integrity sha1-+bIRI4KJo4Slb48av7hpPLxcpOc= + dependencies: + "@pixi/constants" "6.0.4" + "@pixi/core" "6.0.4" + "@pixi/display" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/settings" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/mixin-cache-as-bitmap@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/mixin-cache-as-bitmap/download/@pixi/mixin-cache-as-bitmap-5.3.10.tgz#d4b91fb10de2c22b672b103d91b5c17da7557273" + integrity sha1-1LkfsQ3iwitnKxA9kbXBfadVcnM= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/display" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/settings" "5.3.10" + "@pixi/sprite" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/mixin-cache-as-bitmap@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/mixin-cache-as-bitmap/download/@pixi/mixin-cache-as-bitmap-6.0.4.tgz#ea804ab3cd35c46c6fb2ac82d782c0b9cdb9806d" + integrity sha1-6oBKs801xGxvsqyC14LAuc25gG0= + dependencies: + "@pixi/canvas-renderer" "6.0.4" + "@pixi/core" "6.0.4" + "@pixi/display" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/settings" "6.0.4" + "@pixi/sprite" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/mixin-get-child-by-name@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/mixin-get-child-by-name/download/@pixi/mixin-get-child-by-name-5.3.10.tgz#257ce864ae619f4fbee1b8ec878179cea9070f89" + integrity sha1-JXzoZK5hn0++4bjsh4F5zqkHD4k= + dependencies: + "@pixi/display" "5.3.10" + +"@pixi/mixin-get-child-by-name@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/mixin-get-child-by-name/download/@pixi/mixin-get-child-by-name-6.0.4.tgz#e6cef2094e913d5f3e119a2d6289888553392459" + integrity sha1-5s7yCU6RPV8+EZotYomIhVM5JFk= + dependencies: + "@pixi/display" "6.0.4" + +"@pixi/mixin-get-global-position@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/mixin-get-global-position/download/@pixi/mixin-get-global-position-5.3.10.tgz#a709cf8223e26d64745214cc63ea4628c056fc36" + integrity sha1-pwnPgiPibWR0UhTMY+pGKMBW/DY= + dependencies: + "@pixi/display" "5.3.10" + "@pixi/math" "5.3.10" + +"@pixi/mixin-get-global-position@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/mixin-get-global-position/download/@pixi/mixin-get-global-position-6.0.4.tgz#38157b1529ae80de106cd2a368f191dc6711e4b5" + integrity sha1-OBV7FSmugN4QbNKjaPGR3GcR5LU= + dependencies: + "@pixi/display" "6.0.4" + "@pixi/math" "6.0.4" + +"@pixi/particles@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/particles/download/@pixi/particles-5.3.10.tgz#510b7999ef1e1e23585522f81c02833d34dcb4de" + integrity sha1-UQt5me8eHiNYVSL4HAKDPTTctN4= + dependencies: + "@pixi/constants" "5.3.10" + "@pixi/core" "5.3.10" + "@pixi/display" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/particles@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/particles/download/@pixi/particles-6.0.4.tgz#421a43ba78cca8ab7735473a3a70bea5785e04ea" + integrity sha1-QhpDunjMqKt3NUc6OnC+pXheBOo= + dependencies: + "@pixi/constants" "6.0.4" + "@pixi/core" "6.0.4" + "@pixi/display" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/polyfill@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/polyfill/download/@pixi/polyfill-5.3.10.tgz#41d8b24143f048e36392f5d6f07ceab2ee1c2856" + integrity sha1-QdiyQUPwSONjkvXW8Hzqsu4cKFY= + dependencies: + es6-promise-polyfill "^1.2.0" + object-assign "^4.1.1" + +"@pixi/polyfill@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/polyfill/download/@pixi/polyfill-6.0.4.tgz#0413bc61647cb169633491a9c18232f99aaa6003" + integrity sha1-BBO8YWR8sWljNJGpwYIy+ZqqYAM= + dependencies: + object-assign "^4.1.1" + promise-polyfill "^8.2.0" + +"@pixi/prepare@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/prepare/download/@pixi/prepare-5.3.10.tgz#046774c6b9f5a80d006740a62993e874e64ef9ae" + integrity sha1-BGd0xrn1qA0AZ0CmKZPodOZO+a4= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/display" "5.3.10" + "@pixi/graphics" "5.3.10" + "@pixi/settings" "5.3.10" + "@pixi/text" "5.3.10" + "@pixi/ticker" "5.3.10" + +"@pixi/prepare@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/prepare/download/@pixi/prepare-6.0.4.tgz#e68e63cf237937ac64a20927f07eafe65a2c6c30" + integrity sha1-5o5jzyN5N6xkogkn8H6v5losbDA= + dependencies: + "@pixi/core" "6.0.4" + "@pixi/display" "6.0.4" + "@pixi/graphics" "6.0.4" + "@pixi/settings" "6.0.4" + "@pixi/text" "6.0.4" + "@pixi/ticker" "6.0.4" + +"@pixi/runner@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/runner/download/@pixi/runner-5.3.10.tgz#6a99180511e8a32792e1661e89820c58cd5739ee" + integrity sha1-apkYBRHooyeS4WYeiYIMWM1XOe4= + +"@pixi/runner@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/runner/download/@pixi/runner-6.0.4.tgz#74d595169c2e42f10235be75dbeb0213bcd3f039" + integrity sha1-dNWVFpwuQvECNb512+sCE7zT8Dk= + +"@pixi/settings@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/settings/download/@pixi/settings-5.3.10.tgz#08c71f0b24acbb0a433bd42286be3702b159a419" + integrity sha1-CMcfCySsuwpDO9Qihr43ArFZpBk= + dependencies: + ismobilejs "^1.1.0" + +"@pixi/settings@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/settings/download/@pixi/settings-6.0.4.tgz#dd93f6ebce63134c47afd093466fcb911fc9e066" + integrity sha1-3ZP2685jE0xHr9CTRm/LkR/J4GY= + dependencies: + ismobilejs "^1.1.0" + +"@pixi/sprite-animated@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/sprite-animated/download/@pixi/sprite-animated-5.3.10.tgz#d9ab2e5ca960cce72daae9d7ad8ab75d663d2e06" + integrity sha1-2asuXKlgzOctqunXrYq3XWY9LgY= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/sprite" "5.3.10" + "@pixi/ticker" "5.3.10" + +"@pixi/sprite-animated@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/sprite-animated/download/@pixi/sprite-animated-6.0.4.tgz#dae6212184aeaf288b174008b85a5efd65aa8035" + integrity sha1-2uYhIYSuryiLF0AIuFpe/WWqgDU= + dependencies: + "@pixi/core" "6.0.4" + "@pixi/sprite" "6.0.4" + "@pixi/ticker" "6.0.4" + +"@pixi/sprite-tiling@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/sprite-tiling/download/@pixi/sprite-tiling-5.3.10.tgz#c343bbe6605911f9d479dd101724c8c3cf24aef6" + integrity sha1-w0O75mBZEfnUed0QFyTIw88krvY= + dependencies: + "@pixi/constants" "5.3.10" + "@pixi/core" "5.3.10" + "@pixi/display" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/sprite" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/sprite-tiling@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/sprite-tiling/download/@pixi/sprite-tiling-6.0.4.tgz#c8877537e75b471cd1fc107e3a5c3c99d05d575e" + integrity sha1-yId1N+dbRxzR/BB+Olw8mdBdV14= + dependencies: + "@pixi/constants" "6.0.4" + "@pixi/core" "6.0.4" + "@pixi/display" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/sprite" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/sprite@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/sprite/download/@pixi/sprite-5.3.10.tgz#c31e442d3f29f79a497ed87911a0f42535afdf40" + integrity sha1-wx5ELT8p95pJfth5EaD0JTWv30A= + dependencies: + "@pixi/constants" "5.3.10" + "@pixi/core" "5.3.10" + "@pixi/display" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/settings" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/sprite@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/sprite/download/@pixi/sprite-6.0.4.tgz#71af3d0fbbe6752db4b4e3b2c69192bccadcfbb3" + integrity sha1-ca89D7vmdS20tOOyxpGSvMrc+7M= + dependencies: + "@pixi/constants" "6.0.4" + "@pixi/core" "6.0.4" + "@pixi/display" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/settings" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/spritesheet@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/spritesheet/download/@pixi/spritesheet-5.3.10.tgz#900a8d4bd162ec0ad710e2a2d1b3495e025470ec" + integrity sha1-kAqNS9Fi7ArXEOKi0bNJXgJUcOw= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/loaders" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/spritesheet@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/spritesheet/download/@pixi/spritesheet-6.0.4.tgz#9e65148b05fbb32c81cb4d19a8974dfcc465ee0b" + integrity sha1-nmUUiwX7syyBy00ZqJdN/MRl7gs= + dependencies: + "@pixi/core" "6.0.4" + "@pixi/loaders" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/text-bitmap@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/text-bitmap/download/@pixi/text-bitmap-5.3.10.tgz#2ec15aaea3e801b8737dc0167cd868fa533dcfca" + integrity sha1-LsFarqPoAbhzfcAWfNho+lM9z8o= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/display" "5.3.10" + "@pixi/loaders" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/mesh" "5.3.10" + "@pixi/settings" "5.3.10" + "@pixi/text" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/text-bitmap@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/text-bitmap/download/@pixi/text-bitmap-6.0.4.tgz#29d468b415e8d40056eb84ba4f2e0fc6b7a3441c" + integrity sha1-KdRotBXo1ABW64S6Ty4PxrejRBw= + dependencies: + "@pixi/core" "6.0.4" + "@pixi/display" "6.0.4" + "@pixi/loaders" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/mesh" "6.0.4" + "@pixi/settings" "6.0.4" + "@pixi/text" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/text@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/text/download/@pixi/text-5.3.10.tgz#b3286d1a84c7d58cb38cf2395ce37f6e9715ac0c" + integrity sha1-syhtGoTH1YyzjPI5XON/bpcVrAw= + dependencies: + "@pixi/core" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/settings" "5.3.10" + "@pixi/sprite" "5.3.10" + "@pixi/utils" "5.3.10" + +"@pixi/text@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/text/download/@pixi/text-6.0.4.tgz#d3ce6046ecbbc226fa694516856e07d76460c3c8" + integrity sha1-085gRuy7wib6aUUWhW4H12Rgw8g= + dependencies: + "@pixi/core" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/settings" "6.0.4" + "@pixi/sprite" "6.0.4" + "@pixi/utils" "6.0.4" + +"@pixi/ticker@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/ticker/download/@pixi/ticker-5.3.10.tgz#e3ca8bb3074333e6f3eba35159e3fc2f45baa641" + integrity sha1-48qLswdDM+bz66NRWeP8L0W6pkE= + dependencies: + "@pixi/settings" "5.3.10" + +"@pixi/ticker@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/ticker/download/@pixi/ticker-6.0.4.tgz#ff046308e5de119b8de22c5ad56c4cb37923e54f" + integrity sha1-/wRjCOXeEZuN4ixa1WxMs3kj5U8= + dependencies: + "@pixi/settings" "6.0.4" + +"@pixi/utils@5.3.10": + version "5.3.10" + resolved "https://registry.nlark.com/@pixi/utils/download/@pixi/utils-5.3.10.tgz#f3d7ccf29538dcce0ffa07672f7bb81514eb4db9" + integrity sha1-89fM8pU43M4P+gdnL3u4FRTrTbk= + dependencies: + "@pixi/constants" "5.3.10" + "@pixi/settings" "5.3.10" + earcut "^2.1.5" + eventemitter3 "^3.1.0" + url "^0.11.0" + +"@pixi/utils@6.0.4": + version "6.0.4" + resolved "https://registry.nlark.com/@pixi/utils/download/@pixi/utils-6.0.4.tgz#374f642195d6aef66fe67c78918a73a09a76dfe6" + integrity sha1-N09kIZXWrvZv5nx4kYpzoJp23+Y= + dependencies: + "@pixi/constants" "6.0.4" + "@pixi/settings" "6.0.4" + "@types/earcut" "^2.1.0" + earcut "^2.2.2" + eventemitter3 "^3.1.0" + url "^0.11.0" + +"@schematics/angular@11.2.10": + version "11.2.10" + resolved "https://registry.nlark.com/@schematics/angular/download/@schematics/angular-11.2.10.tgz#2dcd11141deb2609f45d57965920b77b977ba7d9" + integrity sha1-Lc0RFB3rJgn0XVeWWSC3e5d7p9k= + dependencies: + "@angular-devkit/core" "11.2.10" + "@angular-devkit/schematics" "11.2.10" + jsonc-parser "3.0.0" + +"@schematics/update@0.1102.10": + version "0.1102.10" + resolved "https://registry.nlark.com/@schematics/update/download/@schematics/update-0.1102.10.tgz#e10e3f3034e61c87ce16f96d82ef0b48833393a2" + integrity sha1-4Q4/MDTmHIfOFvltgu8LSIMzk6I= + dependencies: + "@angular-devkit/core" "11.2.10" + "@angular-devkit/schematics" "11.2.10" + "@yarnpkg/lockfile" "1.1.0" + ini "2.0.0" + npm-package-arg "^8.0.0" + pacote "11.2.4" + semver "7.3.4" + semver-intersect "1.4.0" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.nlark.com/@tootallnate/once/download/@tootallnate/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha1-zLkURTYBeaBOf+av94wA/8Hur4I= + +"@types/component-emitter@^1.2.10": + version "1.2.10" + resolved "https://registry.npm.taobao.org/@types/component-emitter/download/@types/component-emitter-1.2.10.tgz#ef5b1589b9f16544642e473db5ea5639107ef3ea" + integrity sha1-71sVibnxZURkLkc9tepWORB+8+o= + +"@types/cookie@^0.4.0": + version "0.4.0" + resolved "https://registry.npm.taobao.org/@types/cookie/download/@types/cookie-0.4.0.tgz#14f854c0f93d326e39da6e3b6f34f7d37513d108" + integrity sha1-FPhUwPk9Mm452m47bzT303UT0Qg= + +"@types/cors@^2.8.8": + version "2.8.10" + resolved "https://registry.npm.taobao.org/@types/cors/download/@types/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" + integrity sha1-YcyEaYSeW83QxwRBIiZcOc7BDPQ= + +"@types/earcut@^2.1.0": + version "2.1.1" + resolved "https://registry.nlark.com/@types/earcut/download/@types/earcut-2.1.1.tgz#573a0af609f17005c751f6f4ffec49cfe358ea51" + integrity sha1-VzoK9gnxcAXHUfb0/+xJz+NY6lE= + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha1-5rqA82t9qtLGhazZJmOC5omFwYM= + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/jasmine@~3.6.0": + version "3.6.9" + resolved "https://registry.npm.taobao.org/@types/jasmine/download/@types/jasmine-3.6.9.tgz?cache=0&sync_timestamp=1616803776652&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjasmine%2Fdownload%2F%40types%2Fjasmine-3.6.9.tgz#8785870f87839b7d91b45d7b226380f28dee5d9f" + integrity sha1-h4WHD4eDm32RtF17ImOA8o3uXZ8= + +"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": + version "7.0.7" + resolved "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha1-mKmTUWyFnrDVxMjwmDF6nqaNua0= + +"@types/minimatch@*": + version "3.0.4" + resolved "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" + integrity sha1-8Owl2/Lw5LGGRzE6wDETTKWySyE= + +"@types/node@*", "@types/node@>=10.0.0": + version "15.0.0" + resolved "https://registry.nlark.com/@types/node/download/@types/node-15.0.0.tgz?cache=0&sync_timestamp=1619466193682&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-15.0.0.tgz#557dd0da4a6dca1407481df3bbacae0cd6f68042" + integrity sha1-VX3Q2kptyhQHSB3zu6yuDNb2gEI= + +"@types/node@^12.11.1": + version "12.20.10" + resolved "https://registry.nlark.com/@types/node/download/@types/node-12.20.10.tgz?cache=0&sync_timestamp=1619466193682&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.20.10.tgz#4dcb8a85a8f1211acafb88d72fafc7e3d2685583" + integrity sha1-TcuKhajxIRrK+4jXL6/H49JoVYM= + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.nlark.com/@types/parse-json/download/@types/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= + +"@types/q@^0.0.32": + version "0.0.32" + resolved "https://registry.npm.taobao.org/@types/q/download/@types/q-0.0.32.tgz?cache=0&sync_timestamp=1613379901258&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" + integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.4.tgz?cache=0&sync_timestamp=1613379901258&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ= + +"@types/quicksettings@^3.0.0": + version "3.0.0" + resolved "https://registry.nlark.com/@types/quicksettings/download/@types/quicksettings-3.0.0.tgz#a93d081220e93d8f32002e071e36e0c312c87081" + integrity sha1-qT0IEiDpPY8yAC4HHjbgwxLIcIE= + +"@types/selenium-webdriver@^3.0.0": + version "3.0.17" + resolved "https://registry.npm.taobao.org/@types/selenium-webdriver/download/@types/selenium-webdriver-3.0.17.tgz#50bea0c3c2acc31c959c5b1e747798b3b3d06d4b" + integrity sha1-UL6gw8KswxyVnFsedHeYs7PQbUs= + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.npm.taobao.org/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk= + +"@types/webpack-sources@^0.1.5": + version "0.1.8" + resolved "https://registry.nlark.com/@types/webpack-sources/download/@types/webpack-sources-0.1.8.tgz?cache=0&sync_timestamp=1618847039957&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fwebpack-sources%2Fdownload%2F%40types%2Fwebpack-sources-0.1.8.tgz#078d75410435993ec8a0a2855e88706f3f751f81" + integrity sha1-B411QQQ1mT7IoKKFXohwbz91H4E= + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.6.1" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.nlark.com/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ= + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz?cache=0&sync_timestamp=1610041388005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q= + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz?cache=0&sync_timestamp=1610041389547&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI= + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA= + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc= + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.nlark.com/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg= + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc= + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A= + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz?cache=0&sync_timestamp=1610041387398&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-section%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y= + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz?cache=0&sync_timestamp=1610041389648&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fieee754%2Fdownload%2F%40webassemblyjs%2Fieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ= + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU= + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha1-BNM7Y2945qaBMifoJAL3Y3tiKas= + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha1-P+bXnT8PkiGDqoYALELdJWz+6c8= + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw= + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha1-IhEYHlsxMmRDzIES658LkChyGmE= + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.nlark.com/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4= + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz?cache=0&sync_timestamp=1610041387557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-parser%2Fdownload%2F%40webassemblyjs%2Fwast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ= + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha1-STXVTIX+9jewDOn1I3dFHQDUeJk= + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.npm.taobao.org/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A= + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0= + +"@yarnpkg/lockfile@1.1.0": + version "1.1.0" + resolved "https://registry.npm.taobao.org/@yarnpkg/lockfile/download/@yarnpkg/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha1-53qX+9NFt22DJF7c0X05OxtB+zE= + +abab@^2.0.5: + version "2.0.5" + resolved "https://registry.nlark.com/abab/download/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha1-wLZ4+zLWD8EhnHhNaoJv44Wut5o= + +abbrev@1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg= + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha1-UxvHJlF6OytB+FACHGzBXqq1B80= + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1619285444401&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha1-NYZv1xBSjpLeEM8GAWSY5H454eY= + +adjust-sourcemap-loader@3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/adjust-sourcemap-loader/download/adjust-sourcemap-loader-3.0.0.tgz#5ae12fb5b7b1c585e80bbb5a63ec163a1a45e61e" + integrity sha1-WuEvtbexxYXoC7taY+wWOhpF5h4= + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" + +adm-zip@^0.4.9: + version "0.4.16" + resolved "https://registry.npm.taobao.org/adm-zip/download/adm-zip-0.4.16.tgz?cache=0&sync_timestamp=1617192042837&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fadm-zip%2Fdownload%2Fadm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha1-z0xQj9/6sCwmnLx/RxqHXwVXA2U= + +agent-base@6: + version "6.0.2" + resolved "https://registry.nlark.com/agent-base/download/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c= + dependencies: + debug "4" + +agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.nlark.com/agent-base/download/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha1-gWXwHENgCbzK0LHRIvBe13Dvxu4= + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^4.1.3: + version "4.1.4" + resolved "https://registry.npm.taobao.org/agentkeepalive/download/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b" + integrity sha1-2SgCikhiyxFxjlUieHLoQqRMlFs= + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo= + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.nlark.com/ajv-errors/download/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha1-81mGrOuRr63sQQL72FAUlQzvpk0= + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1616882441894&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha1-MfKdpatuANHC0yms97WSlhTVAU0= + +ajv@6.12.6, ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ= + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/alphanum-sort/download/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha1-y7muJWv3UK8eqzRPIpqif+lLo0g= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha1-46PaS/uubIapwoViXeEkojQCb78= + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4= + dependencies: + type-fest "^0.21.3" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.npm.taobao.org/ansi-html/download/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha1-7dgDYornHATIWuegkG7a00tkiTc= + dependencies: + color-convert "^2.0.1" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha1-vLJLTzeTTZqnrBe0ra+J58du8us= + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.2.tgz?cache=0&sync_timestamp=1617747806715&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha1-wFV8CWrzLxBhmPT04qODU343hxY= + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +app-root-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/app-root-path/download/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" + integrity sha1-IQtvQ4cyJ+GKS4EKAyKDMRVV1a0= + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.npm.taobao.org/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha1-aALmJk79GMeQobDVF/DyYnvyyUo= + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.nlark.com/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha1-SzXClE8GKov82mZBB2A1D+nd/CE= + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npm.taobao.org/arg/download/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha1-Jp/HrVuOQstjyJbVZmAXJhwUQIk= + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE= + dependencies: + sprintf-js "~1.0.2" + +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.nlark.com/aria-query/download/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + +arity-n@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/arity-n/download/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" + integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha1-NgSLv/TntH4TZkQxbJlmnqWukfE= + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.nlark.com/array-flatten/download/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.nlark.com/array-flatten/download/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk= + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/array-union/download/array-union-1.0.2.tgz?cache=0&sync_timestamp=1614624423985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-union%2Fdownload%2Farray-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/array-union/download/array-union-2.1.0.tgz?cache=0&sync_timestamp=1614624423985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-union%2Fdownload%2Farray-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha1-t5hCCtvrHego2ErNii4j0+/oXo0= + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/array-uniq/download/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npm.taobao.org/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.npm.taobao.org/asn1.js/download/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha1-EamAuE67kXgc41sP3C7ilON4Pwc= + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha1-jSR136tVO7M+d7VOWeiAu4ziMTY= + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs= + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.nlark.com/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types-flow@0.0.7: + version "0.0.7" + resolved "https://registry.nlark.com/ast-types-flow/download/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.npm.taobao.org/async-each/download/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0= + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.npm.taobao.org/async/download/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha1-1yYl4jRKNlbjo61Pp0n6gymdgv8= + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.nlark.com/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k= + +autoprefixer@10.2.4: + version "10.2.4" + resolved "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-10.2.4.tgz?cache=0&sync_timestamp=1614956824768&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-10.2.4.tgz#c0e7cf24fcc6a1ae5d6250c623f0cb8beef2f7e1" + integrity sha1-wOfPJPzGoa5dYlDGI/DLi+7y9+E= + dependencies: + browserslist "^4.16.1" + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + fraction.js "^4.0.13" + normalize-range "^0.1.2" + postcss-value-parser "^4.1.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.nlark.com/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.nlark.com/aws4/download/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk= + +axobject-query@2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/axobject-query/download/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" + integrity sha1-6hh6vluQArN3+SXYv30cVhrfOPk= + dependencies: + ast-types-flow "0.0.7" + +babel-loader@8.2.2: + version "8.2.2" + resolved "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha1-k2POhMEMmkDmx1N0jhRBtgyKC4E= + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.nlark.com/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz?cache=0&sync_timestamp=1618846887058&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-dynamic-import-node%2Fdownload%2Fbabel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha1-hP2hnJduxcbe/vV/lCez3vZuF6M= + dependencies: + object.assign "^4.1.0" + +babylonjs-materials@^5.0.0-alpha.18: + version "5.0.0-alpha.28" + resolved "https://registry.nlark.com/babylonjs-materials/download/babylonjs-materials-5.0.0-alpha.28.tgz#a51e04d0d2415e53f863bc0d973b6bbb96338d9c" + integrity sha1-pR4E0NJBXlP4Y7wNlztru5YzjZw= + dependencies: + babylonjs "5.0.0-alpha.28" + +babylonjs@5.0.0-alpha.28, babylonjs@^5.0.0-alpha.18: + version "5.0.0-alpha.28" + resolved "https://registry.nlark.com/babylonjs/download/babylonjs-5.0.0-alpha.28.tgz#54a5e03e6a426b9670d92896bc8d615194b28a29" + integrity sha1-VKXgPmpCa5Zw2SiWvI1hUZSyiik= + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4= + +base64-arraybuffer@0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/base64-arraybuffer/download/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" + integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= + +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npm.taobao.org/base64-js/download/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha1-GxtEAWClv3rUC2UPCVljSBkDkwo= + +base64id@2.0.0, base64id@~2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/base64id/download/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha1-J3Csa8R9MSr5eov5pjQ0LgzSXLY= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha1-e95c7RRbbVUakNuH+DxVi060io8= + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg= + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U= + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0= + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha1-EDU8npRTNLwFEabZCzj7x8nFBN8= + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.npm.taobao.org/bl/download/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo= + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blocking-proxy@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/blocking-proxy/download/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" + integrity sha1-gdb9H+E6TA1pV99/kbdemNrEDLI= + dependencies: + minimist "^1.2.0" + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha1-nyKcFb4nJFT/qXOs4NvueaGww28= + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.npm.taobao.org/bn.js/download/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha1-d1s/J477uXGO7HNh9IP7Nvu/6og= + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.npm.taobao.org/bn.js/download/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI= + +body-parser@1.19.0, body-parser@^1.19.0: + version "1.19.0" + resolved "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io= + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.npm.taobao.org/bonjour/download/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/boolbase/download/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1614010713935&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.npm.taobao.org/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha1-WXn9PxTNUxVl5fot8av/8d+u5yk= + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/brorand/download/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.nlark.com/browserify-aes/download/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha1-Mmc0ZC9APavDADIJhTu3CtQo70g= + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha1-jWR0wbhwv9q807z8wZNKEOlPFfA= + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw= + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.1.0.tgz?cache=0&sync_timestamp=1605194217709&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserify-rsa%2Fdownload%2Fbrowserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha1-sv0Gtbda4pf3zi3GUfkY9b4VjI0= + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM= + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha1-KGlFnZqjviRf6P4sofRuLn9U1z8= + dependencies: + pako "~1.0.5" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^4.16.4, browserslist@^4.9.1: + version "4.16.5" + resolved "https://registry.nlark.com/browserslist/download/browserslist-4.16.5.tgz#952825440bca8913c62d0021334cbe928ef062ae" + integrity sha1-lSglRAvKiRPGLQAhM0y+ko7wYq4= + dependencies: + caniuse-lite "^1.0.30001214" + colorette "^1.2.2" + electron-to-chromium "^1.3.719" + escalade "^3.1.1" + node-releases "^1.1.71" + +browserstack@^1.5.1: + version "1.6.1" + resolved "https://registry.npm.taobao.org/browserstack/download/browserstack-1.6.1.tgz#e051f9733ec3b507659f395c7a4765a1b1e358b3" + integrity sha1-4FH5cz7DtQdlnzlcekdlobHjWLM= + dependencies: + https-proxy-agent "^2.2.1" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8= + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/buffer-indexof/download/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.nlark.com/buffer-xor/download/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.nlark.com/buffer/download/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg= + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.nlark.com/buffer/download/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha1-umLnwTEzBTWCGXFghRqPZI6Z7tA= + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.nlark.com/builtin-modules/download/builtin-modules-1.1.1.tgz?cache=0&sync_timestamp=1618847037480&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbuiltin-modules%2Fdownload%2Fbuiltin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/builtins/download/builtins-1.0.3.tgz?cache=0&sync_timestamp=1617817093967&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuiltins%2Fdownload%2Fbuiltins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/bytes/download/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY= + +cacache@15.0.5: + version "15.0.5" + resolved "https://registry.npm.taobao.org/cacache/download/cacache-15.0.5.tgz?cache=0&sync_timestamp=1616431251047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha1-aRYoM9opFw1nMjNGQ8YOAF9fF9A= + dependencies: + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.0.2" + unique-filename "^1.1.1" + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz?cache=0&sync_timestamp=1616431251047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw= + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^15.0.5: + version "15.0.6" + resolved "https://registry.npm.taobao.org/cacache/download/cacache-15.0.6.tgz?cache=0&sync_timestamp=1616431251047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-15.0.6.tgz#65a8c580fda15b59150fb76bf3f3a8e45d583099" + integrity sha1-ZajFgP2hW1kVD7dr8/Oo5F1YMJk= + dependencies: + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/cache-base/download/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha1-Cn9GQWgxyLZi7jb+TnxZ129marI= + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/call-bind/download/call-bind-1.0.2.tgz?cache=0&sync_timestamp=1610402811207&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcall-bind%2Fdownload%2Fcall-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw= + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/caller-callsite/download/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.nlark.com/caller-path/download/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.nlark.com/callsites/download/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.nlark.com/callsites/download/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M= + +camelcase@5.3.1, camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA= + +camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.npm.taobao.org/camelcase/download/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha1-kkr4gcnVJaydh/QNlk5c6pgqGAk= + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/caniuse-api/download/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA= + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001181, caniuse-lite@^1.0.30001214: + version "1.0.30001216" + resolved "https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001216.tgz#47418a082a4f952d14d8964ae739e25efb2060a9" + integrity sha1-R0GKCCpPlS0U2JZK5zniXvsgYKk= + +canonical-path@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/canonical-path/download/canonical-path-1.0.0.tgz#fcb470c23958def85081856be7a86e904f180d1d" + integrity sha1-/LRwwjlY3vhQgYVr56hukE8YDR0= + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.nlark.com/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1618995384030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1618995384030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.1.0: + version "4.1.1" + resolved "https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995384030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0= + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.nlark.com/chardet/download/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= + +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.4.1, chokidar@^3.4.2: + version "3.5.1" + resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-3.5.1.tgz?cache=0&sync_timestamp=1610719380575&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha1-7pznu+vSt59J8wR5nVRo4x4U5oo= + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1610719380575&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc= + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.npm.taobao.org/chownr/download/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs= + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/chownr/download/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha1-Fb++U9LqtM9w8YqM1o6+Wzyx3s4= + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.nlark.com/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw= + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-dependency-plugin@5.2.2: + version "5.2.2" + resolved "https://registry.npm.taobao.org/circular-dependency-plugin/download/circular-dependency-plugin-5.2.2.tgz#39e836079db1d3cf2f988dc48c5188a44058b600" + integrity sha1-Oeg2B52x088vmI3EjFGIpEBYtgA= + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha1-+TNprouafOAv1B+q0MqDAzGQxGM= + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1618679111227&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha1-7oRy27Ep5yezHooQpCfe6d/kAIs= + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha1-JkMFp65JDR0Dvwybp8kl0XU68wc= + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.6.0" + resolved "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.6.0.tgz?cache=0&sync_timestamp=1616091622495&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" + integrity sha1-NsfcmPtqmna9YjjsP3fiQlYn6Tk= + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/cli-width/download/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha1-ovSEN6LKqaIkNueUvwceyeYc7fY= + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U= + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE= + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npm.taobao.org/cliui/download/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08= + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/clone-deep/download/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c= + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npm.taobao.org/clone/download/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/coa/download/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM= + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +codelyzer@^6.0.0: + version "6.0.1" + resolved "https://registry.npm.taobao.org/codelyzer/download/codelyzer-6.0.1.tgz#c0e9668e847255b37c759e68fb2700b11e277d0f" + integrity sha1-wOlmjoRyVbN8dZ5o+ycAsR4nfQ8= + dependencies: + "@angular/compiler" "9.0.0" + "@angular/core" "9.0.0" + app-root-path "^3.0.0" + aria-query "^3.0.0" + axobject-query "2.0.2" + css-selector-tokenizer "^0.7.1" + cssauron "^1.4.0" + damerau-levenshtein "^1.0.4" + rxjs "^6.5.3" + semver-dsl "^1.0.1" + source-map "^0.5.7" + sprintf-js "^1.1.2" + tslib "^1.10.0" + zone.js "~0.10.3" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= + +color-string@^1.5.4: + version "1.5.5" + resolved "https://registry.npm.taobao.org/color-string/download/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" + integrity sha1-ZUdKjw50OWJfPSemoZ2J/EUiMBQ= + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.3" + resolved "https://registry.npm.taobao.org/color/download/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha1-ymf7TnuX1hHc3jns7tQiBn2RWW4= + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + +colorette@^1.2.1, colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.npm.taobao.org/colorette/download/colorette-1.2.2.tgz?cache=0&sync_timestamp=1614259647923&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ= + +colors@1.4.0, colors@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/colors/download/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha1-xQSRR51MG9rtLJztMs98fcI2D3g= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha1-w9RaizT9cwYxoRCoolIGgrMdWn8= + dependencies: + delayed-stream "~1.0.0" + +commander@^2.11.0, commander@^2.12.1, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1616364569946&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha1-/UhehMA+tIgcIHIrpIA16FMa6zM= + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1, component-emitter@~1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A= + +compose-function@3.0.3: + version "3.0.3" + resolved "https://registry.npm.taobao.org/compose-function/download/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" + integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + dependencies: + arity-n "^1.0.4" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.npm.taobao.org/compressible/download/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o= + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.npm.taobao.org/compression/download/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48= + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ= + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w= + +connect@^3.7.0: + version "3.7.0" + resolved "https://registry.npm.taobao.org/connect/download/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha1-XUk0iRDKpeB6AYALAw0MNfIEhPg= + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha1-ZwY871fOts9Jk6KrOlWECujEkzY= + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70= + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha1-4TjMdeBAxyexlm/l5fjJruJW/js= + +convert-source-map@1.7.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI= + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.nlark.com/cookie-signature/download/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo= + +cookie@~0.4.1: + version "0.4.1" + resolved "https://registry.npm.taobao.org/cookie/download/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha1-r9cT/ibr0hupXOth+agRblClN9E= + +copy-anything@^2.0.1: + version "2.0.3" + resolved "https://registry.npm.taobao.org/copy-anything/download/copy-anything-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-anything%2Fdownload%2Fcopy-anything-2.0.3.tgz#842407ba02466b0df844819bbe3baebbe5d45d87" + integrity sha1-hCQHugJGaw34RIGbvjuuu+XUXYc= + dependencies: + is-what "^3.12.0" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.npm.taobao.org/copy-concurrently/download/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha1-kilzmMrjSTf8r9bsgTnBgFHwteA= + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-webpack-plugin@6.3.2: + version "6.3.2" + resolved "https://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-6.3.2.tgz?cache=0&sync_timestamp=1617709623958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-6.3.2.tgz#0e920a6c181a5052aa6e2861b164bda03f83afeb" + integrity sha1-DpIKbBgaUFKqbihhsWS9oD+Dr+s= + dependencies: + cacache "^15.0.5" + fast-glob "^3.2.4" + find-cache-dir "^3.3.1" + glob-parent "^5.1.1" + globby "^11.0.1" + loader-utils "^2.0.0" + normalize-path "^3.0.0" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + webpack-sources "^1.4.3" + +core-js-compat@^3.8.0: + version "3.11.0" + resolved "https://registry.nlark.com/core-js-compat/download/core-js-compat-3.11.0.tgz#635683f43480a0b41e3f6be3b1c648dadb8b4390" + integrity sha1-Y1aD9DSAoLQeP2vjscZI2tuLQ5A= + dependencies: + browserslist "^4.16.4" + semver "7.0.0" + +core-js@3.8.3: + version "3.8.3" + resolved "https://registry.nlark.com/core-js/download/core-js-3.8.3.tgz#c21906e1f14f3689f93abcc6e26883550dd92dd0" + integrity sha1-whkG4fFPNon5OrzG4miDVQ3ZLdA= + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cors@~2.8.5: + version "2.8.5" + resolved "https://registry.npm.taobao.org/cors/download/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk= + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha1-BA9yaAnFked6F8CjYmykW08Wixo= + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + integrity sha1-75tE13OVnK5j3ezRIt4jhTtg+NM= + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.nlark.com/create-ecdh/download/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4= + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.nlark.com/create-hash/download/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY= + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8= + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +critters@0.0.7: + version "0.0.7" + resolved "https://registry.npm.taobao.org/critters/download/critters-0.0.7.tgz#548b470360f4f3c51e622de3b7aa733c8f0b17bf" + integrity sha1-VItHA2D088UeYi3jt6pzPI8LF78= + dependencies: + chalk "^4.1.0" + css "^3.0.0" + parse5 "^6.0.1" + parse5-htmlparser2-tree-adapter "^6.0.1" + pretty-bytes "^5.3.0" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q= + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha1-OWz58xN/A+S45TLFj2mCVOAPgOw= + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.npm.taobao.org/css-color-names/download/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.nlark.com/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha1-wZiUD2OnbX42wecQGLABchBUyyI= + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-loader@5.0.1: + version "5.0.1" + resolved "https://registry.nlark.com/css-loader/download/css-loader-5.0.1.tgz#9e4de0d6636a6266a585bd0900b422c85539d25f" + integrity sha1-nk3g1mNqYmalhb0JALQiyFU50l8= + dependencies: + camelcase "^6.2.0" + cssesc "^3.0.0" + icss-utils "^5.0.0" + loader-utils "^2.0.0" + postcss "^8.1.4" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^3.0.0" + semver "^7.3.2" + +css-parse@~2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/css-parse/download/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" + integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= + dependencies: + css "^2.0.0" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc= + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/css-select/download/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8= + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-selector-tokenizer@^0.7.1: + version "0.7.3" + resolved "https://registry.npm.taobao.org/css-selector-tokenizer/download/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" + integrity sha1-c18mGG5nx0mq8nV4NAXPBmH66PE= + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.nlark.com/css-tree/download/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha1-mL69YsTB2flg7DQM+fdSLjBwmiI= + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.nlark.com/css-tree/download/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha1-60hw+2/XcHMn7JXC/yqwm16NuR0= + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.npm.taobao.org/css-what/download/css-what-3.4.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-what%2Fdownload%2Fcss-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha1-6nAm/LAXd+295SEk4h8yfnrpUOQ= + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.npm.taobao.org/css/download/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha1-xkZ1XHOXHyu6amAeLPL9cbEpiSk= + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +css@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/css/download/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" + integrity sha1-REek1Y/dAzZ8UWyp9krjZc7kql0= + dependencies: + inherits "^2.0.4" + source-map "^0.6.1" + source-map-resolve "^0.6.0" + +cssauron@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/cssauron/download/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" + integrity sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg= + dependencies: + through X.X.X + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4= + +cssnano-preset-default@^4.0.8: + version "4.0.8" + resolved "https://registry.npm.taobao.org/cssnano-preset-default/download/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" + integrity sha1-kgYisfwelaNOiDggPxOXpQTy0/8= + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.3" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.nlark.com/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI= + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M= + +cssnano@4.1.11: + version "4.1.11" + resolved "https://registry.npm.taobao.org/cssnano/download/cssnano-4.1.11.tgz?cache=0&sync_timestamp=1618342217454&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano%2Fdownload%2Fcssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" + integrity sha1-x7X1uB2iacsf2YLLlgwSAJEMmpk= + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.8" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.2.0" + resolved "https://registry.nlark.com/csso/download/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha1-6jpWE0bo3J9UbW/r7dUBh884lSk= + dependencies: + css-tree "^1.1.2" + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/custom-event/download/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/cyclist/download/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.nlark.com/d/download/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha1-hpgJU3LVjb7jRv/Qxwk/mfj561o= + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +damerau-levenshtein@^1.0.4: + version "1.0.6" + resolved "https://registry.nlark.com/damerau-levenshtein/download/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + integrity sha1-FDwWQcs9hcYMMjKeJoma3qhwF5E= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +date-format@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/date-format/download/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" + integrity sha1-MdW16iEc9f12TNOLr50DPffhJc8= + +date-format@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/date-format/download/date-format-3.0.0.tgz#eb8780365c7d2b1511078fb491e6479780f3ad95" + integrity sha1-64eANlx9KxURB4+0keZHl4DzrZU= + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566548985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + dependencies: + ms "2.0.0" + +debug@4, debug@4.3.1, debug@^4.1.0, debug@^4.1.1, debug@~4.3.1: + version "4.3.1" + resolved "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566548985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4= + dependencies: + ms "2.1.2" + +debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566548985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o= + dependencies: + ms "^2.1.1" + +debug@~3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz?cache=0&sync_timestamp=1607566548985&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE= + dependencies: + ms "2.0.0" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz?cache=0&sync_timestamp=1610348654744&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdecamelize%2Fdownload%2Fdecamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o= + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz?cache=0&sync_timestamp=1610365836747&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdefault-gateway%2Fdownload%2Fdefault-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs= + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE= + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha1-1Flono1lS6d+AqgX+HENcCyxbp0= + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^2.2.0: + version "2.2.2" + resolved "https://registry.npm.taobao.org/del/download/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha1-no8RciLqRKMf86FWwEm5kFKp8LQ= + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@^1.1.2, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +dependency-graph@^0.7.2: + version "0.7.2" + resolved "https://registry.npm.taobao.org/dependency-graph/download/dependency-graph-0.7.2.tgz#91db9de6eb72699209d88aea4c1fd5221cac1c49" + integrity sha1-kdud5utyaZIJ2IrqTB/VIhysHEk= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM= + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-node@^2.0.4: + version "2.0.5" + resolved "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.5.tgz?cache=0&sync_timestamp=1615920847007&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdetect-node%2Fdownload%2Fdetect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" + integrity sha1-nScKp+qlrwtyxMnZuBTn9M5zi3k= + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/di/download/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npm.taobao.org/diff/download/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0= + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha1-QOjumPVaIUlgcUaSHGPhrl89KHU= + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/dir-glob/download/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8= + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.nlark.com/dns-equal/download/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.npm.taobao.org/dns-packet/download/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo= + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.nlark.com/dns-txt/download/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +dom-serialize@^2.2.1: + version "2.2.1" + resolved "https://registry.npm.taobao.org/dom-serialize/download/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1617912077476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E= + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.nlark.com/domain-browser/download/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto= + +domelementtype@1: + version "1.3.1" + resolved "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8= + +domelementtype@^2.0.1: + version "2.2.0" + resolved "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc= + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/domutils/download/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo= + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz?cache=0&sync_timestamp=1605778235569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog= + dependencies: + is-obj "^2.0.0" + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.npm.taobao.org/duplexify/download/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk= + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +earcut@^2.1.5, earcut@^2.2.2: + version "2.2.2" + resolved "https://registry.npm.taobao.org/earcut/download/earcut-2.2.2.tgz#41b0bc35f63e0fe80da7cddff28511e7e2e80d11" + integrity sha1-QbC8NfY+D+gNp83f8oUR5+LoDRE= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npm.taobao.org/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.719: + version "1.3.722" + resolved "https://registry.nlark.com/electron-to-chromium/download/electron-to-chromium-1.3.722.tgz#621657f79e7f65402e71aa3403bc941f3a4af0a0" + integrity sha1-YhZX955/ZUAucao0A7yUHzpK8KA= + +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.4.tgz?cache=0&sync_timestamp=1612290896983&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha1-2jfOvTHnmhNn6UG1ku0fvr1Yq7s= + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.nlark.com/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.nlark.com/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.nlark.com/emojis-list/download/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.nlark.com/emojis-list/download/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha1-VXBmIEatKeLpFucariYKvf9Pang= + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.nlark.com/encoding/download/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha1-VldK/deR9UqOmyeFwFgqLSYhD6k= + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npm.taobao.org/end-of-stream/download/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= + dependencies: + once "^1.4.0" + +engine.io-parser@~4.0.0: + version "4.0.2" + resolved "https://registry.npm.taobao.org/engine.io-parser/download/engine.io-parser-4.0.2.tgz#e41d0b3fb66f7bf4a3671d2038a154024edb501e" + integrity sha1-5B0LP7Zve/SjZx0gOKFUAk7bUB4= + dependencies: + base64-arraybuffer "0.1.4" + +engine.io@~4.1.0: + version "4.1.1" + resolved "https://registry.npm.taobao.org/engine.io/download/engine.io-4.1.1.tgz#9a8f8a5ac5a5ea316183c489bf7f5b6cf91ace5b" + integrity sha1-mo+KWsWl6jFhg8SJv39bbPkazls= + dependencies: + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.4.1" + cors "~2.8.5" + debug "~4.3.1" + engine.io-parser "~4.0.0" + ws "~7.4.2" + +enhanced-resolve@5.7.0: + version "5.7.0" + resolved "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" + integrity sha1-UlxdhWaA+9UFLeRTrIPjIEmVi1w= + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +enhanced-resolve@^4.3.0: + version "4.5.0" + resolved "https://registry.nlark.com/enhanced-resolve/download/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha1-Lzz9hNvjtIfxjy2y7x4GSlccpew= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/ent/download/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/entities/download/entities-2.2.0.tgz?cache=0&sync_timestamp=1611535512969&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU= + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npm.taobao.org/env-paths/download/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha1-QgOZ1BbOH76bwKB8Yvpo1n/Q+PI= + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.npm.taobao.org/err-code/download/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npm.taobao.org/err-code/download/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha1-I8Lzt1b/38YI0w4nyalBAkgH5/k= + +errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: + version "0.1.8" + resolved "https://registry.nlark.com/errno/download/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8= + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8= + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.2, es-abstract@^1.18.0-next.2: + version "1.18.0" + resolved "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0.tgz?cache=0&sync_timestamp=1614814465007&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" + integrity sha1-q4CzWe7Lft5MKYAAOQvFrD7HtaQ= + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.2" + is-string "^1.0.5" + object-inspect "^1.9.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo= + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.nlark.com/es5-ext/download/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha1-k8WjrP2+8nUiCtcmRK0C7hg2jeE= + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.npm.taobao.org/es6-iterator/download/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise-polyfill@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/es6-promise-polyfill/download/es6-promise-polyfill-1.2.0.tgz#f38925f23cb3e3e8ce6cda8ff774fcebbb090cde" + integrity sha1-84kl8jyz4+jObNqP93T867sJDN4= + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo= + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/es6-promisify/download/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.npm.taobao.org/es6-symbol/download/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha1-utXTwbzawoJp9MszHkMceKxwXRg= + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA= + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&sync_timestamp=1618677355234&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha1-ygODMxD2iJoyZHgaqC5j65z+eEg= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= + +esrecurse@^4.1.0: + version "4.3.0" + resolved "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha1-eteWTWeauyi+5yzsY3WLHF0smSE= + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= + +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha1-MH30JUfmzHMk088DwVXVzbjFOIA= + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q= + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha1-LT1I+cNGaY/Og6hdfWZOmFNd9uc= + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.nlark.com/eventemitter3/download/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8= + +events@^3.0.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/events/download/events-3.3.0.tgz?cache=0&sync_timestamp=1614445408219&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevents%2Fdownload%2Fevents-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA= + +eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.npm.taobao.org/eventsource/download/eventsource-1.1.0.tgz?cache=0&sync_timestamp=1616041663398&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventsource%2Fdownload%2Feventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha1-AOjKfJIQnpSw3fMtrGd9hBAoz68= + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.nlark.com/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI= + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg= + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ= + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.npm.taobao.org/ext/download/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha1-ia56BxWPedNVF4gpBDJAd+Q3kkQ= + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM= + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU= + +fast-glob@^3.1.1, fast-glob@^3.2.4: + version "3.2.5" + resolved "https://registry.npm.taobao.org/fast-glob/download/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha1-eTmvKmVt55pPGQGQPuityqfLlmE= + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM= + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/fastparse/download/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha1-kXKMWllC7O2FMSg8eUQe5BIsNak= + +fastq@^1.6.0: + version "1.11.0" + resolved "https://registry.npm.taobao.org/fastq/download/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha1-u5+5VaBxMKkY62PB9RYcwypdCFg= + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.3" + resolved "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha1-XA6aiWjokSwoZjn96XeosgnyUI4= + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4= + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.nlark.com/figures/download/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8= + dependencies: + escape-string-regexp "^1.0.5" + +file-loader@6.2.0: + version "6.2.0" + resolved "https://registry.npm.taobao.org/file-loader/download/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha1-uu98+OGEDfMl5DkLRISHlIDuvk0= + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90= + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2, finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0= + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@3.3.1, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha1-ibM/rUpGcNqpT4Vff74x1thP6IA= + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc= + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.nlark.com/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1618846778775&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M= + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.nlark.com/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1618846778775&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk= + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flatted@^2.0.1: + version "2.0.2" + resolved "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha1-RXWyHivO50NKqb5mL0t7X5wrUTg= + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/flush-write-stream/download/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug= + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.14.0" + resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.0.tgz#f5d260f95c5f8c105894491feee5dc8993b402fe" + integrity sha1-9dJg+VxfjBBYlEkf7uXciZO0Av4= + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npm.taobao.org/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y= + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fraction.js@^4.0.13: + version "4.0.13" + resolved "https://registry.npm.taobao.org/fraction.js/download/fraction.js-4.0.13.tgz#3c1c315fa16b35c85fffa95725a36fa729c69dfe" + integrity sha1-PBwxX6FrNchf/6lXJaNvpynGnf4= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.nlark.com/from2/download/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-4.0.2.tgz?cache=0&sync_timestamp=1611075430627&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" + integrity sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-8.1.0.tgz?cache=0&sync_timestamp=1611075430627&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA= + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs= + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1612536409579&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg= + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz?cache=0&sync_timestamp=1612536409579&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.nlark.com/gensync/download/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA= + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/get-intrinsic/download/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y= + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz?cache=0&sync_timestamp=1618462652134&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-stream%2Fdownload%2Fget-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU= + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ= + dependencies: + is-glob "^4.0.1" + +glob@7.1.6, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.nlark.com/globals/download/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= + +globby@^11.0.1: + version "11.0.3" + resolved "https://registry.npm.taobao.org/globby/download/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" + integrity sha1-mx8MtSPhcd0a2MeyqftLZEuVk8s= + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/globby/download/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4: + version "4.2.6" + resolved "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha1-/wQLKwhTsjw9MQJ1I3BvGIXXa+4= + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha1-hX95zjWVgMNA1DCBzGSJcNC7I04= + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.nlark.com/har-validator/download/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha1-HwgDufjLIMD6E4It8ezds2veHv0= + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz?cache=0&sync_timestamp=1618558151426&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-ansi%2Fdownload%2Fhas-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/has-bigints/download/has-bigints-1.0.1.tgz?cache=0&sync_timestamp=1615461282623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-bigints%2Fdownload%2Fhas-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.2.tgz?cache=0&sync_timestamp=1614443617831&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y= + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.nlark.com/hash-base/download/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM= + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I= + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.nlark.com/hex-color-regex/download/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4= + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.nlark.com/hmac-drbg/download/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hosted-git-info@^3.0.6: + version "3.0.8" + resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-3.0.8.tgz?cache=0&sync_timestamp=1617826790271&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha1-bjXUzIevLF+Bbky5zjULqHo/Nw0= + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^4.0.1: + version "4.0.2" + resolved "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-4.0.2.tgz?cache=0&sync_timestamp=1617826790271&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" + integrity sha1-XkJVB+7eT+qEa3Ji8IOEVsQgmWE= + dependencies: + lru-cache "^6.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.npm.taobao.org/html-entities/download/html-entities-1.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha1-z70bAdKvr5rcobEK59/6uYxx0tw= + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.nlark.com/html-escaper/download/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha1-39YAJ9o2o238viNiYsAKWCJoFFM= + +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.nlark.com/http-cache-semantics/download/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha1-SekcXL82yblLz81xwj1SSex045A= + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha1-bGGeT5xgMIw4UZSYwU+7EKrOuwY= + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha1-AdJwnHnUFpi7AdTezF6dpOSgM9k= + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/http-proxy-agent/download/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha1-ioyO9/WTLM+VPClsqCkblap0qjo= + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.nlark.com/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz?cache=0&sync_timestamp=1619386628373&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhttp-proxy-middleware%2Fdownload%2Fhttp-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha1-GDx9xKoUeRUDBkmMIQza+WCApDo= + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0, http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.nlark.com/http-proxy/download/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk= + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.nlark.com/http-signature/download/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha1-4qkFQqu2inYuCghQ9sntrf2FBrI= + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^2.2.1: + version "2.2.4" + resolved "https://registry.npm.taobao.org/https-proxy-agent/download/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha1-TuenN6vZJniik9mzShr00NCMeHs= + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/humanize-ms/download/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha1-zhPRh1sMOmdL1qBLf3awGxtt7QE= + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/icss-utils/download/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha1-xr5oWKvQE9do6YNmrkfiXViHsa4= + +ieee754@^1.1.13, ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.npm.taobao.org/ieee754/download/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I= + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.nlark.com/iferr/download/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.3: + version "3.0.3" + resolved "https://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha1-AX4kRxhL/q3nwjjkrv3R6PlbHjc= + dependencies: + minimatch "^3.0.4" + +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.npm.taobao.org/ignore/download/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha1-8VCotQo0KJsz4i9YiavU2AFvDlc= + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.nlark.com/immediate/download/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.nlark.com/import-fresh/download/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.nlark.com/import-fresh/download/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha1-NxYsJfy566oublPVtNiM4X2eDCs= + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.nlark.com/import-local/download/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha1-VQcL44pZk88Y72236WH1vuXFoJ0= + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz?cache=0&sync_timestamp=1618679442183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Findent-string%2Fdownload%2Findent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE= + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha1-xM78qo5RBRwqQLos6KPScpWvlGc= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/ini/download/ini-2.0.0.tgz?cache=0&sync_timestamp=1607907788001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fini%2Fdownload%2Fini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha1-5f1Vbs3VcmvpePoQAYYurLCpS8U= + +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.npm.taobao.org/ini/download/ini-1.3.8.tgz?cache=0&sync_timestamp=1607907788001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fini%2Fdownload%2Fini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw= + +inquirer@7.3.3: + version "7.3.3" + resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha1-BNF2sq8Er8FXqD/XwQDpjuCq0AM= + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz?cache=0&sync_timestamp=1605885960226&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc= + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz?cache=0&sync_timestamp=1611327032630&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fip-regex%2Fdownload%2Fip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha1-v/OFQ+64mEglB5/zoqjmy9RngbM= + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.nlark.com/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.nlark.com/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY= + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha1-YjUwMd++4HzrNGVqa95Z7+yujdk= + dependencies: + call-bind "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha1-RXSirlb3qyBolvtDHq7tBm/fjwM= + +is-bigint@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-bigint/download/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" + integrity sha1-aSMFHfy8dkJ4VAuc4OazITql68I= + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-boolean-object/download/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" + integrity sha1-4qqtOjqPyjTCj27uE1sVbtJYf/A= + dependencies: + call-bind "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha1-76ouqdqg16suoTqXsritUf776L4= + +is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.3.tgz?cache=0&sync_timestamp=1612132958731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-callable%2Fdownload%2Fis-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha1-ix4FALc6HXbHBIdjbzaOUZ3o244= + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.1.0, is-core-module@^2.2.0: + version "2.3.0" + resolved "https://registry.nlark.com/is-core-module/download/is-core-module-2.3.0.tgz#d341652e3408bca69c4671b79a0954a3d349f887" + integrity sha1-00FlLjQIvKacRnG3mglUo9NJ+Ic= + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc= + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha1-vac28s2P0G0yhE53Q7+nSUw7/X4= + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco= + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw= + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.npm.taobao.org/is-docker/download/is-docker-2.2.1.tgz?cache=0&sync_timestamp=1617958767917&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-docker%2Fdownload%2Fis-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ= + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz?cache=0&sync_timestamp=1618552489864&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz?cache=0&sync_timestamp=1618552489864&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz?cache=0&sync_timestamp=1618552489864&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-fullwidth-code-point%2Fdownload%2Fis-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw= + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-interactive/download/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha1-zqbmrlyHCnsKAAQHC3tYfgJSkS4= + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-lambda/download/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.1.tgz?cache=0&sync_timestamp=1607123324574&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-negative-zero%2Fdownload%2Fis-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ= + +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/is-number-object/download/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha1-NqyV50HPGLKD/B3fXoPaeY4+wZc= + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI= + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s= + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha1-WsSLNF72dTOb1sekipEhELJBz1I= + dependencies: + is-path-inside "^1.0.0" + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha1-v+Lcomxp85cmWkAJljYCk1oFOss= + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha1-fJgQWH1lmkDSe8201WFuqwWUlLI= + dependencies: + path-is-inside "^1.0.2" + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc= + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha1-gcjr3k2xQvLPHFP8htakV4gmYlE= + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.1" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg= + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.npm.taobao.org/is-string/download/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha1-QEk+0ZjvP/R3uMf5L2ROyCpc06Y= + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc= + dependencies: + has-symbols "^1.0.1" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.nlark.com/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/is-unicode-supported/download/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc= + +is-what@^3.12.0: + version "3.14.1" + resolved "https://registry.npm.taobao.org/is-what/download/is-what-3.14.1.tgz?cache=0&sync_timestamp=1615169709354&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-what%2Fdownload%2Fis-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" + integrity sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0= + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE= + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isbinaryfile@^4.0.6: + version "4.0.6" + resolved "https://registry.npm.taobao.org/isbinaryfile/download/isbinaryfile-4.0.6.tgz#edcb62b224e2b4710830b67498c8e4e5a4d2610b" + integrity sha1-7ctisiTitHEIMLZ0mMjk5aTSYQs= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +ismobilejs@^1.1.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/ismobilejs/download/ismobilejs-1.1.1.tgz#c56ca0ae8e52b24ca0f22ba5ef3215a2ddbbaa0e" + integrity sha1-xWygro5Sskyg8iul7zIVot27qg4= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.nlark.com/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.nlark.com/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.nlark.com/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha1-9ZRKN8cLVQsCp4pcOyBVsoDOyOw= + +istanbul-lib-instrument@^4.0.1, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.nlark.com/istanbul-lib-instrument/download/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha1-hzxv/4l0UBGCIndGlqPyiQLXfB0= + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha1-dRj+UupE3jcvRgp2tezan/tz2KY= + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha1-dXQ85tlruG3H7kNSz2Nmoj8LGtk= + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.0: + version "3.0.2" + resolved "https://registry.nlark.com/istanbul-reports/download/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha1-1ZMhDlAAaDdQywn8BkTktuJ/1Ts= + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jasmine-core@^3.6.0: + version "3.7.1" + resolved "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-3.7.1.tgz#0401327f6249eac993d47bbfa18d4e8efacfb561" + integrity sha1-BAEyf2JJ6smT1Hu/oY1OjvrPtWE= + +jasmine-core@~2.8.0: + version "2.8.0" + resolved "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" + integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= + +jasmine-core@~3.6.0: + version "3.6.0" + resolved "https://registry.npm.taobao.org/jasmine-core/download/jasmine-core-3.6.0.tgz#491f3bb23941799c353ceb7a45b38a950ebc5a20" + integrity sha1-SR87sjlBeZw1POt6RbOKlQ68WiA= + +jasmine-spec-reporter@~5.0.0: + version "5.0.2" + resolved "https://registry.npm.taobao.org/jasmine-spec-reporter/download/jasmine-spec-reporter-5.0.2.tgz#b61288ab074ad440dc2477c4d42840b0e74a6b95" + integrity sha1-thKIqwdK1EDcJHfE1ChAsOdKa5U= + dependencies: + colors "1.4.0" + +jasmine@2.8.0: + version "2.8.0" + resolved "https://registry.npm.taobao.org/jasmine/download/jasmine-2.8.0.tgz?cache=0&sync_timestamp=1616034862565&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjasmine%2Fdownload%2Fjasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" + integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= + dependencies: + exit "^0.1.2" + glob "^7.0.6" + jasmine-core "~2.8.0" + +jasminewd2@^2.1.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/jasminewd2/download/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" + integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= + +jest-worker@26.6.2, jest-worker@^26.5.0: + version "26.6.2" + resolved "https://registry.npm.taobao.org/jest-worker/download/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha1-f3LLxNZDw2Xie5/XdfnQ6qnHqO0= + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz?cache=0&sync_timestamp=1619345098261&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjs-tokens%2Fdownload%2Fjs-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.1.tgz?cache=0&sync_timestamp=1618435151523&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc= + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q= + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk= + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1607998042332&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA= + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.3: + version "3.3.3" + resolved "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4= + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.npm.taobao.org/json5/download/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha1-Lf7+cgxrpSXZ69kJlQ8FFTFsiaM= + dependencies: + minimist "^1.2.5" + +jsonc-parser@3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/jsonc-parser/download/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" + integrity sha1-q914VwHH5+rKip7IzwcMpRp0WiI= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.nlark.com/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.nlark.com/jsonparse/download/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.nlark.com/jsprim/download/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jszip@^3.1.3: + version "3.6.0" + resolved "https://registry.npm.taobao.org/jszip/download/jszip-3.6.0.tgz#839b72812e3f97819cc13ac4134ffced95dd6af9" + integrity sha1-g5tygS4/l4GcwTrEE0/87ZXdavk= + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + +karma-chrome-launcher@~3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/karma-chrome-launcher/download/karma-chrome-launcher-3.1.0.tgz#805a586799a4d05f4e54f72a204979f3f3066738" + integrity sha1-gFpYZ5mk0F9OVPcqIEl58/MGZzg= + dependencies: + which "^1.2.1" + +karma-coverage@~2.0.3: + version "2.0.3" + resolved "https://registry.npm.taobao.org/karma-coverage/download/karma-coverage-2.0.3.tgz#c10f4711f4cf5caaaa668b1d6f642e7da122d973" + integrity sha1-wQ9HEfTPXKqqZosdb2QufaEi2XM= + dependencies: + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.1" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.0" + minimatch "^3.0.4" + +karma-jasmine-html-reporter@^1.5.0: + version "1.5.4" + resolved "https://registry.npm.taobao.org/karma-jasmine-html-reporter/download/karma-jasmine-html-reporter-1.5.4.tgz#669f33d694d88fce1b0ccfda57111de716cb0192" + integrity sha1-Zp8z1pTYj84bDM/aVxEd5xbLAZI= + +karma-jasmine@~4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/karma-jasmine/download/karma-jasmine-4.0.1.tgz#b99e073b6d99a5196fc4bffc121b89313b0abd82" + integrity sha1-uZ4HO22ZpRlvxL/8EhuJMTsKvYI= + dependencies: + jasmine-core "^3.6.0" + +karma-source-map-support@1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/karma-source-map-support/download/karma-source-map-support-1.4.0.tgz#58526ceccf7e8730e56effd97a4de8d712ac0d6b" + integrity sha1-WFJs7M9+hzDlbv/Zek3o1xKsDWs= + dependencies: + source-map-support "^0.5.5" + +karma@~6.1.0: + version "6.1.2" + resolved "https://registry.npm.taobao.org/karma/download/karma-6.1.2.tgz?cache=0&sync_timestamp=1617062979892&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fkarma%2Fdownload%2Fkarma-6.1.2.tgz#9d7394559f5deb150b3021c1860960281c3a0e50" + integrity sha1-nXOUVZ9d6xULMCHBhglgKBw6DlA= + dependencies: + body-parser "^1.19.0" + braces "^3.0.2" + chokidar "^3.4.2" + colors "^1.4.0" + connect "^3.7.0" + di "^0.0.1" + dom-serialize "^2.2.1" + glob "^7.1.6" + graceful-fs "^4.2.4" + http-proxy "^1.18.1" + isbinaryfile "^4.0.6" + lodash "^4.17.19" + log4js "^6.2.1" + mime "^2.4.5" + minimatch "^3.0.4" + qjobs "^1.2.0" + range-parser "^1.2.1" + rimraf "^3.0.2" + socket.io "^3.1.0" + source-map "^0.6.1" + tmp "0.2.1" + ua-parser-js "^0.7.23" + yargs "^16.1.1" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI= + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0= + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0= + +klona@^2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/klona/download/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha1-e7Hjr/sMuGJFR+9+j2cI6i4538A= + +less-loader@7.3.0: + version "7.3.0" + resolved "https://registry.npm.taobao.org/less-loader/download/less-loader-7.3.0.tgz#f9d6d36d18739d642067a05fb5bd70c8c61317e5" + integrity sha1-+dbTbRhznWQgZ6Bftb1wyMYTF+U= + dependencies: + klona "^2.0.4" + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +less@4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/less/download/less-4.1.1.tgz?cache=0&sync_timestamp=1612066490256&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fless%2Fdownload%2Fless-4.1.1.tgz#15bf253a9939791dc690888c3ff424f3e6c7edba" + integrity sha1-Fb8lOpk5eR3GkIiMP/Qk8+bH7bo= + dependencies: + copy-anything "^2.0.1" + parse-node-version "^1.0.1" + tslib "^1.10.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + needle "^2.5.2" + source-map "~0.6.0" + +license-webpack-plugin@2.3.11: + version "2.3.11" + resolved "https://registry.npm.taobao.org/license-webpack-plugin/download/license-webpack-plugin-2.3.11.tgz?cache=0&sync_timestamp=1618110769370&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flicense-webpack-plugin%2Fdownload%2Flicense-webpack-plugin-2.3.11.tgz#0d93188a31fce350a44c86212badbaf33dcd29d8" + integrity sha1-DZMYijH841CkTIYhK6268z3NKdg= + dependencies: + "@types/webpack-sources" "^0.1.5" + webpack-sources "^1.2.0" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.nlark.com/lie/download/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha1-3Pgt7lRfRgdNryAMfBxaCOD0D2o= + dependencies: + immediate "~3.0.5" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1610027880902&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c= + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc= + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@2.0.0, loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha1-5MrOW4FtQloWa18JfhDNErNgZLA= + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha1-xXm140yzSxp07cbB+za/o3HVphM= + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4= + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha1-Gvujlq/WdqbUJQTQpno6frn2KqA= + dependencies: + p-locate "^4.1.0" + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.npm.taobao.org/lodash.memoize/download/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.nlark.com/lodash.uniq/download/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19: + version "4.17.21" + resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw= + +log-symbols@^4.0.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/log-symbols/download/log-symbols-4.1.0.tgz?cache=0&sync_timestamp=1618723146520&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flog-symbols%2Fdownload%2Flog-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha1-P727lbRoOsn8eFER55LlWNSr1QM= + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log4js@^6.2.1: + version "6.3.0" + resolved "https://registry.npm.taobao.org/log4js/download/log4js-6.3.0.tgz#10dfafbb434351a3e30277a00b9879446f715bcb" + integrity sha1-EN+vu0NDUaPjAnegC5h5RG9xW8s= + dependencies: + date-format "^3.0.0" + debug "^4.1.1" + flatted "^2.0.1" + rfdc "^1.1.4" + streamroller "^2.2.4" + +loglevel@^1.6.8: + version "1.7.1" + resolved "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.1.tgz?cache=0&sync_timestamp=1606314002487&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha1-AF/eL15uRwaPk1/yhXPhJe9y8Zc= + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA= + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ= + dependencies: + yallist "^4.0.0" + +magic-string@0.25.7, magic-string@^0.25.0: + version "0.25.7" + resolved "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE= + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU= + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8= + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npm.taobao.org/make-error/download/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha1-LrLjfqm2fEiR9oShOUeZr0hM96I= + +make-fetch-happen@^8.0.9: + version "8.0.14" + resolved "https://registry.npm.taobao.org/make-fetch-happen/download/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" + integrity sha1-qrpzrgq1WGrY6qaL2DMyZpOT4iI= + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.0.5" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + promise-retry "^2.0.1" + socks-proxy-agent "^5.0.0" + ssri "^8.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npm.taobao.org/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8= + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.14.tgz?cache=0&sync_timestamp=1619049042656&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA= + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.nlark.com/mdn-data/download/mdn-data-2.0.4.tgz?cache=0&sync_timestamp=1619049042656&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmdn-data%2Fdownload%2Fmdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs= + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.nlark.com/merge-descriptors/download/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/merge-source-map/download/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha1-L93n5gIJOfcJBqaPLXrmheTIxkY= + dependencies: + source-map "^0.6.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.nlark.com/methods/download/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.4" + resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-4.0.4.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k= + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha1-8IA1HIZbDcViqEYpZtqlNUPHik0= + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": + version "1.47.0" + resolved "https://registry.npm.taobao.org/mime-db/download/mime-db-1.47.0.tgz?cache=0&sync_timestamp=1617306118828&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha1-jLMT5Zll08Bc+/iYkVomevRqM1w= + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.30" + resolved "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.30.tgz?cache=0&sync_timestamp=1617340124913&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" + integrity sha1-bnvotMR5gl+F7WMmaV23P5MF1i0= + dependencies: + mime-db "1.47.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1613615500287&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE= + +mime@^2.4.4, mime@^2.4.5: + version "2.5.2" + resolved "https://registry.npm.taobao.org/mime/download/mime-2.5.2.tgz?cache=0&sync_timestamp=1613615500287&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha1-bj3GzCuVEGQ4MOXxnVy3U9pe6r4= + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz?cache=0&sync_timestamp=1617823674050&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmimic-fn%2Fdownload%2Fmimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= + +mini-css-extract-plugin@1.3.5: + version "1.3.5" + resolved "https://registry.nlark.com/mini-css-extract-plugin/download/mini-css-extract-plugin-1.3.5.tgz#252166e78879c106e0130f229d44e0cbdfcebed3" + integrity sha1-JSFm54h5wQbgEw8inUTgy9/OvtM= + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + webpack-sources "^1.1.0" + +mini-signals@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/mini-signals/download/mini-signals-1.2.0.tgz#45b08013c5fae51a24aa1a935cd317c9ed721d74" + integrity sha1-RbCAE8X65RokqhqTXNMXye1yHXQ= + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc= + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI= + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.nlark.com/minipass-collect/download/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc= + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: + version "1.3.3" + resolved "https://registry.npm.taobao.org/minipass-fetch/download/minipass-fetch-1.3.3.tgz#34c7cea038c817a8658461bf35174551dce17a0a" + integrity sha1-NMfOoDjIF6hlhGG/NRdFUdzhego= + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.nlark.com/minipass-flush/download/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M= + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/minipass-json-stream/download/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha1-ftu5JYj7/C/x2y/BA5est7a0Sqc= + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npm.taobao.org/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw= + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/minipass-sized/download/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha1-cO5afFBSBwr6z7wil36nne81O3A= + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.1.3" + resolved "https://registry.npm.taobao.org/minipass/download/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha1-fUL/HzljVILhX5zbUxhN7r1YFf0= + dependencies: + yallist "^4.0.0" + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npm.taobao.org/minizlib/download/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha1-6Q00Zrogm5MkUVCKEc49NjIUWTE= + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha1-6goykfl+C16HdrNj1fChLZTGcCI= + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY= + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz?cache=0&sync_timestamp=1604053732604&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8= + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.3, mkdirp@^1.0.4, mkdirp@~1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/mkdirp/download/mkdirp-1.0.4.tgz?cache=0&sync_timestamp=1604053732604&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha1-PrXtYmInVteaXw4qIh3+utdcL34= + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433912031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&sync_timestamp=1607433912031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433912031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= + +ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.3.tgz?cache=0&sync_timestamp=1607433912031&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI= + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.nlark.com/multicast-dns/download/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha1-oOx72QVcQoL3kMPIL04o2zsxsik= + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= + +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.npm.taobao.org/nan/download/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha1-9TdkAGlRaPTMaUrJOT0MlYXu6hk= + +nanoid@^3.1.20, nanoid@^3.1.22: + version "3.1.22" + resolved "https://registry.nlark.com/nanoid/download/nanoid-3.1.22.tgz?cache=0&sync_timestamp=1618847108865&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnanoid%2Fdownload%2Fnanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha1-s1+Pt9FRmQqK69WqUBXAPPcm+EQ= + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npm.taobao.org/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +needle@^2.5.2: + version "2.6.0" + resolved "https://registry.nlark.com/needle/download/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe" + integrity sha1-JNu1XyUJ4jJLSpnWH0E5ggE8zb4= + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs= + +neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha1-tKr7k+OustgXTKU88WOrfXMIMF8= + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/next-tick/download/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npm.taobao.org/nice-try/download/nice-try-1.0.5.tgz?cache=0&sync_timestamp=1614510039289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnice-try%2Fdownload%2Fnice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y= + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.nlark.com/node-forge/download/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M= + +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.nlark.com/node-gyp/download/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha1-IagQrrsYcSAlHDvOyXmvFYexiK4= + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.3" + nopt "^5.0.0" + npmlog "^4.1.2" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU= + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^1.1.71: + version "1.1.71" + resolved "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.71.tgz?cache=0&sync_timestamp=1614113881684&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha1-yxM0sXmJaxyJ7P3UtyX7e738fbs= + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/nopt/download/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha1-UwlCu1ilEvzK/lP+IQ8TolNV3Ig= + dependencies: + abbrev "1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.nlark.com/normalize-range/download/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1617786295473&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha1-suHE3E98bVd0PfczpPWXjRhlBVk= + +npm-bundled@^1.1.1: + version "1.1.2" + resolved "https://registry.nlark.com/npm-bundled/download/npm-bundled-1.1.2.tgz?cache=0&sync_timestamp=1619044650809&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnpm-bundled%2Fdownload%2Fnpm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha1-lEx4eJvXOQNbcLqiylzDK42GC8E= + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-install-checks@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/npm-install-checks/download/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + integrity sha1-o3+sx2Oi/eBJfvLG0Kx8P74A17Q= + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/npm-normalize-package-bin/download/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI= + +npm-package-arg@8.1.0: + version "8.1.0" + resolved "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-8.1.0.tgz#b5f6319418c3246a1c38e1a8fbaa06231bc5308f" + integrity sha1-tfYxlBjDJGocOOGo+6oGIxvFMI8= + dependencies: + hosted-git-info "^3.0.6" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.2: + version "8.1.2" + resolved "https://registry.npm.taobao.org/npm-package-arg/download/npm-package-arg-8.1.2.tgz#b868016ae7de5619e729993fbd8d11dc3c52ab62" + integrity sha1-uGgBaufeVhnnKZk/vY0R3DxSq2I= + dependencies: + hosted-git-info "^4.0.1" + semver "^7.3.4" + validate-npm-package-name "^3.0.0" + +npm-packlist@^2.1.4: + version "2.1.5" + resolved "https://registry.npm.taobao.org/npm-packlist/download/npm-packlist-2.1.5.tgz#43ef5bbb9f59b7c0ef91e0905f1dd707b4cfb33c" + integrity sha1-Q+9bu59Zt8DvkeCQXx3XB7TPszw= + dependencies: + glob "^7.1.6" + ignore-walk "^3.0.3" + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@6.1.0: + version "6.1.0" + resolved "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-6.1.0.tgz#2befed87b0fce956790f62d32afb56d7539c022a" + integrity sha1-K+/th7D86VZ5D2LTKvtW11OcAio= + dependencies: + npm-install-checks "^4.0.0" + npm-package-arg "^8.0.0" + semver "^7.0.0" + +npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.1: + version "6.1.1" + resolved "https://registry.npm.taobao.org/npm-pick-manifest/download/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" + integrity sha1-e1SEyiyQhWX0O38nZE82u4FvUUg= + dependencies: + npm-install-checks "^4.0.0" + npm-normalize-package-bin "^1.0.1" + npm-package-arg "^8.1.2" + semver "^7.3.4" + +npm-registry-fetch@^9.0.0: + version "9.0.0" + resolved "https://registry.nlark.com/npm-registry-fetch/download/npm-registry-fetch-9.0.0.tgz#86f3feb4ce00313bc0b8f1f8f69daae6face1661" + integrity sha1-hvP+tM4AMTvAuPH49p2q5vrOFmE= + dependencies: + "@npmcli/ci-detect" "^1.0.0" + lru-cache "^6.0.0" + make-fetch-happen "^8.0.9" + minipass "^3.1.3" + minipass-fetch "^1.3.0" + minipass-json-stream "^1.0.1" + minizlib "^2.0.0" + npm-package-arg "^8.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.nlark.com/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npmlog@^4.1.2: + version "4.1.2" + resolved "https://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha1-CKfyqL9zRgR3mp76StXMcXq7lUs= + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw= + dependencies: + boolbase "~1.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU= + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.9.0: + version "1.10.2" + resolved "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.10.2.tgz?cache=0&sync_timestamp=1618720223958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.10.2.tgz#b6385a3e2b7cae0b5eafcf90cddf85d128767f30" + integrity sha1-tjhaPit8rgter8+Qzd+F0Sh2fzA= + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.npm.taobao.org/object-is/download/object-is-1.1.5.tgz?cache=0&sync_timestamp=1613857744782&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha1-ud7qpfx/GEag+uzc7sE45XePU6w= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha1-HEfyct8nfzsdrwYWd9nILiMixg4= + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.nlark.com/object.assign/download/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA= + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.2" + resolved "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.2.tgz?cache=0&sync_timestamp=1613860232478&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.getownpropertydescriptors%2Fdownload%2Fobject.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" + integrity sha1-G9Y66s8NXS0vMbXjk7A6fGAaI/c= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.3" + resolved "https://registry.npm.taobao.org/object.values/download/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" + integrity sha1-6qix4XWJ8C9pjbCT98Yu4WmXQu4= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/obuf/download/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4= + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/on-headers/download/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8= + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz?cache=0&sync_timestamp=1617889786861&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fonetime%2Fdownload%2Fonetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4= + dependencies: + mimic-fn "^2.1.0" + +open@7.4.0: + version "7.4.0" + resolved "https://registry.npm.taobao.org/open/download/open-7.4.0.tgz?cache=0&sync_timestamp=1618549241971&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopen%2Fdownload%2Fopen-7.4.0.tgz#ad95b98f871d9acb0ec8fecc557082cc9986626b" + integrity sha1-rZW5j4cdmssOyP7MVXCCzJmGYms= + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.npm.taobao.org/opn/download/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w= + dependencies: + is-wsl "^1.1.0" + +ora@5.3.0: + version "5.3.0" + resolved "https://registry.npm.taobao.org/ora/download/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f" + integrity sha1-+4MomdOhNy/nHIssU0u/50lhu28= + dependencies: + bl "^4.0.3" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/original/download/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8= + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/os-browserify/download/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz?cache=0&sync_timestamp=1606288370125&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE= + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npm.taobao.org/p-limit/download/p-limit-3.1.0.tgz?cache=0&sync_timestamp=1606288370125&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs= + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha1-o0KLtwiLOmApL2aRkni3wpetTwc= + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.nlark.com/p-map/download/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha1-MQko/u+cnsxltosXaTAYpmXOoXU= + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.nlark.com/p-map/download/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha1-uy+Vpe2i7BaOySdOBqdHw+KQTSs= + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.nlark.com/p-retry/download/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha1-MWtMiJPiyNwc+okfQGxLQivr8yg= + dependencies: + retry "^0.12.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY= + +pacote@11.2.4: + version "11.2.4" + resolved "https://registry.nlark.com/pacote/download/pacote-11.2.4.tgz#dc7ca740a573ed86a3bf863511d22c1d413ec82f" + integrity sha1-3HynQKVz7Yajv4Y1EdIsHUE+yC8= + dependencies: + "@npmcli/git" "^2.0.1" + "@npmcli/installed-package-contents" "^1.0.5" + "@npmcli/promise-spawn" "^1.2.0" + "@npmcli/run-script" "^1.3.0" + cacache "^15.0.5" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.3" + mkdirp "^1.0.3" + npm-package-arg "^8.0.1" + npm-packlist "^2.1.4" + npm-pick-manifest "^6.0.0" + npm-registry-fetch "^9.0.0" + promise-retry "^1.1.1" + read-package-json-fast "^1.1.3" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.1.0" + +pako@~1.0.2, pako@~1.0.5: + version "1.0.11" + resolved "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1610208924218&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8= + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/parallel-transform/download/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw= + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/parent-module/download/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI= + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.nlark.com/parse-asn1/download/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ= + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.nlark.com/parse-json/download/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.nlark.com/parse-json/download/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80= + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-node-version@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/parse-node-version/download/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha1-4rXb7eAOf6m8NjYH9TMn6LBzGJs= + +parse-uri@^1.0.0: + version "1.0.3" + resolved "https://registry.npm.taobao.org/parse-uri/download/parse-uri-1.0.3.tgz#f3c24a74907a4e357c1741e96ca9faadecfd6db5" + integrity sha1-88JKdJB6TjV8F0HpbKn6rez9bbU= + +parse5-html-rewriting-stream@6.0.1: + version "6.0.1" + resolved "https://registry.npm.taobao.org/parse5-html-rewriting-stream/download/parse5-html-rewriting-stream-6.0.1.tgz#de1820559317ab4e451ea72dba05fddfd914480b" + integrity sha1-3hggVZMXq05FHqctugX939kUSAs= + dependencies: + parse5 "^6.0.1" + parse5-sax-parser "^6.0.1" + +parse5-htmlparser2-tree-adapter@^6.0.1: + version "6.0.1" + resolved "https://registry.npm.taobao.org/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY= + dependencies: + parse5 "^6.0.1" + +parse5-sax-parser@^6.0.1: + version "6.0.1" + resolved "https://registry.npm.taobao.org/parse5-sax-parser/download/parse5-sax-parser-6.0.1.tgz#98b4d366b5b266a7cd90b4b58906667af882daba" + integrity sha1-mLTTZrWyZqfNkLS1iQZmeviC2ro= + dependencies: + parse5 "^6.0.1" + +parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg= + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.npm.taobao.org/parse5/download/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws= + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha1-5sTd1+06onxoogzE5Q4aTug7vEo= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.nlark.com/path-dirname/download/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha1-UTvb4tO5XXdi6METfvoZXGxhtbM= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1617971691339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha1-1i27VnlAXXLEc37FhgDp3c8G0kw= + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.nlark.com/path-to-regexp/download/path-to-regexp-0.1.7.tgz?cache=0&sync_timestamp=1618847046445&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpath-to-regexp%2Fdownload%2Fpath-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz?cache=0&sync_timestamp=1611752074264&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-type%2Fdownload%2Fpath-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= + +pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha1-3YIqoIh1gOUvGgOdw+2hCO+uMHU= + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.2.3" + resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.3.tgz?cache=0&sync_timestamp=1618049925917&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpicomatch%2Fdownload%2Fpicomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" + integrity sha1-RlVH81nMwgbTxI5Goby4m/fuYZ0= + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npm.taobao.org/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pixi-stats@^1.0.6: + version "1.0.6" + resolved "https://registry.nlark.com/pixi-stats/download/pixi-stats-1.0.6.tgz#f4f19f1d8e64997a7a8665a4f6f5cad05fa793d2" + integrity sha1-9PGfHY5kmXp6hmWk9vXK0F+nk9I= + dependencies: + "@jacekpietal/gstats" "^0.1.0" + pixi.js "*" + +pixi.js@*: + version "6.0.4" + resolved "https://registry.nlark.com/pixi.js/download/pixi.js-6.0.4.tgz#86a44cdedd9150e59660781e440cb6f5dfdfb574" + integrity sha1-hqRM3t2RUOWWYHgeRAy29d/ftXQ= + dependencies: + "@pixi/accessibility" "6.0.4" + "@pixi/app" "6.0.4" + "@pixi/compressed-textures" "6.0.4" + "@pixi/constants" "6.0.4" + "@pixi/core" "6.0.4" + "@pixi/display" "6.0.4" + "@pixi/extract" "6.0.4" + "@pixi/filter-alpha" "6.0.4" + "@pixi/filter-blur" "6.0.4" + "@pixi/filter-color-matrix" "6.0.4" + "@pixi/filter-displacement" "6.0.4" + "@pixi/filter-fxaa" "6.0.4" + "@pixi/filter-noise" "6.0.4" + "@pixi/graphics" "6.0.4" + "@pixi/interaction" "6.0.4" + "@pixi/loaders" "6.0.4" + "@pixi/math" "6.0.4" + "@pixi/mesh" "6.0.4" + "@pixi/mesh-extras" "6.0.4" + "@pixi/mixin-cache-as-bitmap" "6.0.4" + "@pixi/mixin-get-child-by-name" "6.0.4" + "@pixi/mixin-get-global-position" "6.0.4" + "@pixi/particles" "6.0.4" + "@pixi/polyfill" "6.0.4" + "@pixi/prepare" "6.0.4" + "@pixi/runner" "6.0.4" + "@pixi/settings" "6.0.4" + "@pixi/sprite" "6.0.4" + "@pixi/sprite-animated" "6.0.4" + "@pixi/sprite-tiling" "6.0.4" + "@pixi/spritesheet" "6.0.4" + "@pixi/text" "6.0.4" + "@pixi/text-bitmap" "6.0.4" + "@pixi/ticker" "6.0.4" + "@pixi/utils" "6.0.4" + +pixi.js@^5.3.10: + version "5.3.10" + resolved "https://registry.nlark.com/pixi.js/download/pixi.js-5.3.10.tgz#602a8411690bbc4009561f07b189cb574e53c43f" + integrity sha1-YCqEEWkLvEAJVh8HsYnLV05TxD8= + dependencies: + "@pixi/accessibility" "5.3.10" + "@pixi/app" "5.3.10" + "@pixi/constants" "5.3.10" + "@pixi/core" "5.3.10" + "@pixi/display" "5.3.10" + "@pixi/extract" "5.3.10" + "@pixi/filter-alpha" "5.3.10" + "@pixi/filter-blur" "5.3.10" + "@pixi/filter-color-matrix" "5.3.10" + "@pixi/filter-displacement" "5.3.10" + "@pixi/filter-fxaa" "5.3.10" + "@pixi/filter-noise" "5.3.10" + "@pixi/graphics" "5.3.10" + "@pixi/interaction" "5.3.10" + "@pixi/loaders" "5.3.10" + "@pixi/math" "5.3.10" + "@pixi/mesh" "5.3.10" + "@pixi/mesh-extras" "5.3.10" + "@pixi/mixin-cache-as-bitmap" "5.3.10" + "@pixi/mixin-get-child-by-name" "5.3.10" + "@pixi/mixin-get-global-position" "5.3.10" + "@pixi/particles" "5.3.10" + "@pixi/polyfill" "5.3.10" + "@pixi/prepare" "5.3.10" + "@pixi/runner" "5.3.10" + "@pixi/settings" "5.3.10" + "@pixi/sprite" "5.3.10" + "@pixi/sprite-animated" "5.3.10" + "@pixi/sprite-tiling" "5.3.10" + "@pixi/spritesheet" "5.3.10" + "@pixi/text" "5.3.10" + "@pixi/text-bitmap" "5.3.10" + "@pixi/ticker" "5.3.10" + "@pixi/utils" "5.3.10" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.nlark.com/pkg-dir/download/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM= + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.nlark.com/pkg-dir/download/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM= + dependencies: + find-up "^4.0.0" + +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.npm.taobao.org/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha1-yXEaxNxIpoXauvyG+Lbdn434QUk= + dependencies: + ts-pnp "^1.1.6" + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g= + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npm.taobao.org/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha1-+KbpnxLmGcLrwjz2xIb9wVhgkz4= + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.3.tgz?cache=0&sync_timestamp=1618056303067&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-colormin%2Fdownload%2Fpostcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha1-rgYLzpPteUrHEmTwgTLVUJVr04E= + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz?cache=0&sync_timestamp=1618056302291&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-convert-values%2Fdownload%2Fpostcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8= + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz?cache=0&sync_timestamp=1618056302844&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-comments%2Fdownload%2Fpostcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha1-H7q9LCRr/2qq15l7KwkY9NevQDM= + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.nlark.com/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha1-P+EzzTyCKC5VD8myORdqkge3hOs= + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz?cache=0&sync_timestamp=1618056303643&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-empty%2Fdownload%2Fpostcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha1-yMlR6fc+2UKAGUWERKAq2Qu592U= + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz?cache=0&sync_timestamp=1618056508784&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-overridden%2Fdownload%2Fpostcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha1-ZSrvipZybwKfXj4AFG7npOdV/1c= + dependencies: + postcss "^7.0.0" + +postcss-import@14.0.0: + version "14.0.0" + resolved "https://registry.npm.taobao.org/postcss-import/download/postcss-import-14.0.0.tgz#3ed1dadac5a16650bde3f4cdea6633b9c3c78296" + integrity sha1-PtHa2sWhZlC94/TN6mYzucPHgpY= + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-loader@4.2.0: + version "4.2.0" + resolved "https://registry.npm.taobao.org/postcss-loader/download/postcss-loader-4.2.0.tgz#f6993ea3e0f46600fb3ee49bbd010448123a7db4" + integrity sha1-9pk+o+D0ZgD7PuSbvQEESBI6fbQ= + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.4" + loader-utils "^2.0.0" + schema-utils "^3.0.0" + semver "^7.3.4" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz?cache=0&sync_timestamp=1618056314601&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-longhand%2Fdownload%2Fpostcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ= + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz?cache=0&sync_timestamp=1618056312725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-rules%2Fdownload%2Fpostcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha1-NivqT/Wh+Y5AdacTxsslrv75plA= + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz?cache=0&sync_timestamp=1618056613147&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-font-values%2Fdownload%2Fpostcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY= + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE= + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz?cache=0&sync_timestamp=1618056313372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-params%2Fdownload%2Fpostcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ= + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz?cache=0&sync_timestamp=1618056509958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-selectors%2Fdownload%2Fpostcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g= + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.nlark.com/postcss-modules-extract-imports/download/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha1-zaHwR8CugMl9vijD52pDuIAldB0= + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.nlark.com/postcss-modules-local-by-default/download/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha1-67tU+uFZjuz99pGgKz/zs5ClpRw= + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.nlark.com/postcss-modules-scope/download/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha1-nvMVFFbTu/oSDKRImN/Kby+gHwY= + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha1-18Xn5ow7s8myfL9Iyguz/7RgLJw= + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz?cache=0&sync_timestamp=1618056311007&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-charset%2Fdownload%2Fpostcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha1-izWt067oOhNrBHHg1ZvlilAoXdQ= + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz?cache=0&sync_timestamp=1618056614219&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-display-values%2Fdownload%2Fpostcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha1-Db4EpM6QY9RmftK+R2u4MMglk1o= + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.nlark.com/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8= + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz?cache=0&sync_timestamp=1618056314160&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-repeat-style%2Fdownload%2Fpostcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw= + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz?cache=0&sync_timestamp=1618056308191&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-string%2Fdownload%2Fpostcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw= + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.nlark.com/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha1-jgCcoqOUnNr4rSPmtquZy159KNk= + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.nlark.com/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs= + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.nlark.com/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE= + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz?cache=0&sync_timestamp=1618056611686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-whitespace%2Fdownload%2Fpostcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI= + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz?cache=0&sync_timestamp=1618056313133&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-ordered-values%2Fdownload%2Fpostcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4= + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz?cache=0&sync_timestamp=1618056309143&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-initial%2Fdownload%2Fpostcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha1-f9QuvqXpyBRgljniwuhK4nC6SN8= + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz?cache=0&sync_timestamp=1618056613869&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-transforms%2Fdownload%2Fpostcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha1-F++kBerMbge+NBSlyi0QdGgdTik= + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA= + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.0.5" + resolved "https://registry.nlark.com/postcss-selector-parser/download/postcss-selector-parser-6.0.5.tgz#042d74e137db83e6f294712096cb413f5aa612c4" + integrity sha1-BC104Tfbg+bylHEglstBP1qmEsQ= + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^4.0.3: + version "4.0.3" + resolved "https://registry.npm.taobao.org/postcss-svgo/download/postcss-svgo-4.0.3.tgz?cache=0&sync_timestamp=1618056310155&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-svgo%2Fdownload%2Fpostcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" + integrity sha1-NDos26yVBdQWJD1Jb3JPOIlMlB4= + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz?cache=0&sync_timestamp=1618056512038&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-unique-selectors%2Fdownload%2Fpostcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w= + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0: + version "3.3.1" + resolved "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha1-n/giVH4okyE88cMO+lGsX9G6goE= + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha1-RD9qIM7WSBor2k+oUypuVdeJoss= + +postcss@7.0.21: + version "7.0.21" + resolved "https://registry.nlark.com/postcss/download/postcss-7.0.21.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" + integrity sha1-BrsHgkwZwgIcXQVtWxDDW5iffhc= + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@8.2.4: + version "8.2.4" + resolved "https://registry.nlark.com/postcss/download/postcss-8.2.4.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-8.2.4.tgz#20a98a39cf303d15129c2865a9ec37eda0031d04" + integrity sha1-IKmKOc8wPRUSnChlqew37aADHQQ= + dependencies: + colorette "^1.2.1" + nanoid "^3.1.20" + source-map "^0.6.1" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.27: + version "7.0.35" + resolved "https://registry.nlark.com/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha1-0r4AuZj38hHYonaXQHny6SuXDiQ= + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^8.1.4: + version "8.2.13" + resolved "https://registry.nlark.com/postcss/download/postcss-8.2.13.tgz?cache=0&sync_timestamp=1619440039303&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpostcss%2Fdownload%2Fpostcss-8.2.13.tgz#dbe043e26e3c068e45113b1ed6375d2d37e2129f" + integrity sha1-2+BD4m48Bo5FETse1jddLTfiEp8= + dependencies: + colorette "^1.2.2" + nanoid "^3.1.22" + source-map "^0.6.1" + +pretty-bytes@^5.3.0: + version "5.6.0" + resolved "https://registry.npm.taobao.org/pretty-bytes/download/pretty-bytes-5.6.0.tgz?cache=0&sync_timestamp=1613916423464&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpretty-bytes%2Fdownload%2Fpretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha1-NWJW9kOAR3PIL2RyP+eMksYr6us= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npm.taobao.org/process/download/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-polyfill@^8.2.0: + version "8.2.0" + resolved "https://registry.npm.taobao.org/promise-polyfill/download/promise-polyfill-8.2.0.tgz#367394726da7561457aba2133c9ceefbd6267da0" + integrity sha1-NnOUcm2nVhRXq6ITPJzu+9YmfaA= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/promise-retry/download/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/promise-retry/download/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha1-/3R6E2IKtXumiPX8Z4VUEMNw2iI= + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +protractor@~7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/protractor/download/protractor-7.0.0.tgz#c3e263608bd72e2c2dc802b11a772711a4792d03" + integrity sha1-w+JjYIvXLiwtyAKxGncnEaR5LQM= + dependencies: + "@types/q" "^0.0.32" + "@types/selenium-webdriver" "^3.0.0" + blocking-proxy "^1.0.0" + browserstack "^1.5.1" + chalk "^1.1.3" + glob "^7.0.3" + jasmine "2.8.0" + jasminewd2 "^2.1.0" + q "1.4.1" + saucelabs "^1.5.0" + selenium-webdriver "3.6.0" + source-map-support "~0.4.0" + webdriver-js-extender "2.1.0" + webdriver-manager "^12.1.7" + yargs "^15.3.1" + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8= + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/prr/download/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA= + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/pump/download/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.npm.taobao.org/pumpify/download/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4= + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.nlark.com/punycode/download/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.nlark.com/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.nlark.com/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= + +q@1.4.1: + version "1.4.1" + resolved "https://registry.npm.taobao.org/q/download/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= + +q@^1.1.2, q@^1.4.1: + version "1.5.1" + resolved "https://registry.npm.taobao.org/q/download/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qjobs@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/qjobs/download/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha1-xF6cYYAL0IfviNfiVkI73Unl0HE= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.nlark.com/qs/download/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha1-QdwaAV49WB8WIXdr4xr7KHapsbw= + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.nlark.com/qs/download/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY= + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.npm.taobao.org/querystring-es3/download/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/querystring/download/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.npm.taobao.org/querystringify/download/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y= + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npm.taobao.org/queue-microtask/download/queue-microtask-1.2.3.tgz?cache=0&sync_timestamp=1616391583732&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fqueue-microtask%2Fdownload%2Fqueue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha1-SSkii7xyTfrEPg77BYyve2z7YkM= + +quicksettings@^3.0.1: + version "3.0.1" + resolved "https://registry.nlark.com/quicksettings/download/quicksettings-3.0.1.tgz#2ecb8b5ec78ddb3e2e0e3b9b7f1e509e6c4c8004" + integrity sha1-LsuLXseN2z4uDjubfx5QnmxMgAQ= + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo= + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha1-ySGW/IarQr6YPxvzF3giSTHWFFg= + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE= + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha1-oc5vucm8NWylLoklarWQWeE9AzI= + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/raw-loader/download/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" + integrity sha1-GqxrfRrRUB5m79rBUixz5ZpYTrY= + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/read-cache/download/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= + dependencies: + pify "^2.3.0" + +read-package-json-fast@^1.1.3: + version "1.2.2" + resolved "https://registry.npm.taobao.org/read-package-json-fast/download/read-package-json-fast-1.2.2.tgz#fba77b0b0d66b1ab344e214cb0876577e749c423" + integrity sha1-+6d7Cw1msas0TiFMsIdld+dJxCM= + dependencies: + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" + +read-package-json-fast@^2.0.1: + version "2.0.2" + resolved "https://registry.npm.taobao.org/read-package-json-fast/download/read-package-json-fast-2.0.2.tgz#2dcb24d9e8dd50fb322042c8c35a954e6cc7ac9e" + integrity sha1-Lcsk2ejdUPsyIELIw1qVTmzHrJ4= + dependencies: + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.nlark.com/readable-stream/download/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.nlark.com/readdirp/download/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha1-DodiKjMlqjPokihcr4tOhGUppSU= + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.nlark.com/readdirp/download/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha1-m6dMAZsV02UnjS6Ru4xI17TULJ4= + dependencies: + picomatch "^2.2.1" + +reflect-metadata@^0.1.2: + version "0.1.13" + resolved "https://registry.npm.taobao.org/reflect-metadata/download/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha1-Z648pXyXKiqhZCsQ/jY/4y1J3Ag= + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha1-5d5xEdZV57pgwFfb6f83yH5lzew= + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo= + +regenerator-runtime@0.13.7, regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha1-ysLazIoepnX+qrrriugziYrkb1U= + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ= + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw= + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regex-parser@^2.2.11: + version "2.2.11" + resolved "https://registry.nlark.com/regex-parser/download/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha1-OzfskEnhlHmAboeMq+fByoPM/lg= + +regexp.prototype.flags@^1.2.0: + version "1.3.1" + resolved "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.1.tgz?cache=0&sync_timestamp=1610725711521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexp.prototype.flags%2Fdownload%2Fregexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha1-fvNSro0VnnWMDq3Kb4/LTu8HviY= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.nlark.com/regexpu-core/download/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha1-LepamgcjMpj78NuR+pq8TG4PitY= + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.nlark.com/regjsgen/download/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM= + +regjsparser@^0.6.4: + version "0.6.9" + resolved "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" + integrity sha1-tInu98mizkNydicBFCnPgzpxg+Y= + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.npm.taobao.org/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.npm.taobao.org/repeat-element/download/repeat-element-1.1.4.tgz?cache=0&sync_timestamp=1617837642601&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frepeat-element%2Fdownload%2Frepeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek= + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npm.taobao.org/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request@^2.87.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha1-1zyRhzHLWofaBH4gcjQUb2ZNErM= + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs= + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/requires-port/download/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz?cache=0&sync_timestamp=1610371330596&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-from%2Fdownload%2Fresolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz?cache=0&sync_timestamp=1610371330596&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve-from%2Fdownload%2Fresolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY= + +resolve-url-loader@3.1.2: + version "3.1.2" + resolved "https://registry.npm.taobao.org/resolve-url-loader/download/resolve-url-loader-3.1.2.tgz#235e2c28e22e3e432ba7a5d4e305c59a58edfc08" + integrity sha1-I14sKOIuPkMrp6XU4wXFmljt/Ag= + dependencies: + adjust-sourcemap-loader "3.0.0" + camelcase "5.3.1" + compose-function "3.0.3" + convert-source-map "1.7.0" + es6-iterator "2.0.3" + loader-utils "1.2.3" + postcss "7.0.21" + rework "1.0.1" + rework-visit "1.0.0" + source-map "0.6.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.nlark.com/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.19.0: + version "1.19.0" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.19.0.tgz?cache=0&sync_timestamp=1613055183799&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha1-GvW/YwQJc0oGfK4pMYqsf6KaJnw= + dependencies: + is-core-module "^2.1.0" + path-parse "^1.0.6" + +resolve@^1.1.7, resolve@^1.3.2: + version "1.20.0" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz?cache=0&sync_timestamp=1613055183799&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU= + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +resource-loader@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/resource-loader/download/resource-loader-3.0.1.tgz#33355bb5421e2994f59454bbc7f6dbff8df06d47" + integrity sha1-MzVbtUIeKZT1lFS7x/bb/43wbUc= + dependencies: + mini-signals "^1.2.0" + parse-uri "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha1-OfZ8VLOnpYzqUjbZXPADQjljH34= + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npm.taobao.org/ret/download/ret-0.1.15.tgz?cache=0&sync_timestamp=1613002640681&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fret%2Fdownload%2Fret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w= + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.npm.taobao.org/retry/download/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npm.taobao.org/retry/download/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/reusify/download/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= + +rework-visit@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/rework-visit/download/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" + integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + +rework@1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/rework/download/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" + integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + +rfdc@^1.1.4: + version "1.3.0" + resolved "https://registry.npm.taobao.org/rfdc/download/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha1-0LfEQasnINBdxM8m4ByJYx2doIs= + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/rgb-regex/download/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/rgba-regex/download/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho= + dependencies: + glob "^7.1.3" + +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.npm.taobao.org/rimraf/download/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw= + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rollup@2.38.4: + version "2.38.4" + resolved "https://registry.npm.taobao.org/rollup/download/rollup-2.38.4.tgz?cache=0&sync_timestamp=1618289798736&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frollup%2Fdownload%2Frollup-2.38.4.tgz#1b84ea8728c73b1a00a6a6e9c630ec8c3fe48cea" + integrity sha1-G4TqhyjHOxoApqbpxjDsjD/kjOo= + optionalDependencies: + fsevents "~2.3.1" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU= + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npm.taobao.org/run-parallel/download/run-parallel-1.2.0.tgz?cache=0&sync_timestamp=1612925912322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-parallel%2Fdownload%2Frun-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4= + dependencies: + queue-microtask "^1.2.2" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/run-queue/download/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@6.6.3: + version "6.6.3" + resolved "https://registry.nlark.com/rxjs/download/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha1-jKhGNcTaqQDA05Z6buesYCce5VI= + dependencies: + tslib "^1.9.0" + +rxjs@^6.5.3, rxjs@^6.6.0, rxjs@~6.6.0: + version "6.6.7" + resolved "https://registry.nlark.com/rxjs/download/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha1-kKwBisq/SRv2UEQjXVhjxNq4BMk= + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= + +sass-loader@10.1.1: + version "10.1.1" + resolved "https://registry.npm.taobao.org/sass-loader/download/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" + integrity sha1-Td1aPXY455SQZd1unHwEA39+Zj0= + dependencies: + klona "^2.0.4" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^3.0.0" + semver "^7.3.2" + +sass@1.32.6: + version "1.32.6" + resolved "https://registry.nlark.com/sass/download/sass-1.32.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsass%2Fdownload%2Fsass-1.32.6.tgz#e3646c8325cd97ff75a8a15226007f3ccd221393" + integrity sha1-42RsgyXNl/91qKFSJgB/PM0iE5M= + dependencies: + chokidar ">=2.0.0 <4.0.0" + +saucelabs@^1.5.0: + version "1.5.0" + resolved "https://registry.npm.taobao.org/saucelabs/download/saucelabs-1.5.0.tgz?cache=0&sync_timestamp=1618314383298&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsaucelabs%2Fdownload%2Fsaucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" + integrity sha1-lAWnPDYNRJsjKDmRmobDltN5/Z0= + dependencies: + https-proxy-agent "^2.2.1" + +sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A= + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc= + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/schema-utils/download/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha1-Z1AvaqK2ai1AMrQnmilEl4oJE+8= + dependencies: + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: + version "3.6.0" + resolved "https://registry.npm.taobao.org/selenium-webdriver/download/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" + integrity sha1-K6h6FmLAILiYjJga5iyyoBKY6vw= + dependencies: + jszip "^3.1.3" + rimraf "^2.5.4" + tmp "0.0.30" + xml2js "^0.4.17" + +selfsigned@^1.10.8: + version "1.10.8" + resolved "https://registry.nlark.com/selfsigned/download/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha1-DRcgi30Swz+OrIXEGDXyf8PYGjA= + dependencies: + node-forge "^0.10.0" + +semver-dsl@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/semver-dsl/download/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" + integrity sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA= + dependencies: + semver "^5.3.0" + +semver-intersect@1.4.0: + version "1.4.0" + resolved "https://registry.npm.taobao.org/semver-intersect/download/semver-intersect-1.4.0.tgz#bdd9c06bedcdd2fedb8cd352c3c43ee8c61321f3" + integrity sha1-vdnAa+3N0v7bjNNSw8Q+6MYTIfM= + dependencies: + semver "^5.0.0" + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha1-XzyjV2HkfgWyBsba/yz4FPAxa44= + +semver@7.3.4: + version "7.3.4" + resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.4.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc= + dependencies: + lru-cache "^6.0.0" + +semver@^5.0.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= + +semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.npm.taobao.org/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1616463550093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc= + dependencies: + lru-cache "^6.0.0" + +send@0.17.1: + version "0.17.1" + resolved "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg= + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao= + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha1-eIbshIBJpGJGepfT2Rjrsqr5NPQ= + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.nlark.com/serve-index/download/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk= + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.nlark.com/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha1-oY1AUw5vB95CKMfe/kInr4ytAFs= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.npm.taobao.org/setimmediate/download/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM= + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npm.taobao.org/shallow-clone/download/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha1-jymBrZJTH1UDWwH7IwdppA4C76M= + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw= + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/slash/download/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ= + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.nlark.com/smart-buffer/download/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha1-kWBcJdkWUvRmHqacz0XxszHKIbo= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha1-bBdfhv8UvbByRWPo88GwIaKGhTs= + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI= + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npm.taobao.org/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0= + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socket.io-adapter@~2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/socket.io-adapter/download/socket.io-adapter-2.1.0.tgz?cache=0&sync_timestamp=1614388357720&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io-adapter%2Fdownload%2Fsocket.io-adapter-2.1.0.tgz#edc5dc36602f2985918d631c1399215e97a1b527" + integrity sha1-7cXcNmAvKYWRjWMcE5khXpehtSc= + +socket.io-parser@~4.0.3: + version "4.0.4" + resolved "https://registry.nlark.com/socket.io-parser/download/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0" + integrity sha1-nqIbDWFQjRgZbvBKLGuatjD0wrA= + dependencies: + "@types/component-emitter" "^1.2.10" + component-emitter "~1.3.0" + debug "~4.3.1" + +socket.io@^3.1.0: + version "3.1.2" + resolved "https://registry.npm.taobao.org/socket.io/download/socket.io-3.1.2.tgz?cache=0&sync_timestamp=1617235913811&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsocket.io%2Fdownload%2Fsocket.io-3.1.2.tgz#06e27caa1c4fc9617547acfbb5da9bc1747da39a" + integrity sha1-BuJ8qhxPyWF1R6z7tdqbwXR9o5o= + dependencies: + "@types/cookie" "^0.4.0" + "@types/cors" "^2.8.8" + "@types/node" ">=10.0.0" + accepts "~1.3.4" + base64id "~2.0.0" + debug "~4.3.1" + engine.io "~4.1.0" + socket.io-adapter "~2.1.0" + socket.io-parser "~4.0.3" + +sockjs-client@^1.5.0: + version "1.5.1" + resolved "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.5.1.tgz?cache=0&sync_timestamp=1616686625852&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.5.1.tgz#256908f6d5adfb94dabbdbd02c66362cca0f9ea6" + integrity sha1-JWkI9tWt+5Tau9vQLGY2LMoPnqY= + dependencies: + debug "^3.2.6" + eventsource "^1.0.7" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.5.1" + +sockjs@^0.3.21: + version "0.3.21" + resolved "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" + integrity sha1-s0/7mOeWkwtgoM+hGQTWozmn1Bc= + dependencies: + faye-websocket "^0.11.3" + uuid "^3.4.0" + websocket-driver "^0.7.4" + +socks-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/socks-proxy-agent/download/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + integrity sha1-fA82Tnsc9KekN+cSU77XLpAEvmA= + dependencies: + agent-base "6" + debug "4" + socks "^2.3.3" + +socks@^2.3.3: + version "2.6.1" + resolved "https://registry.npm.taobao.org/socks/download/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" + integrity sha1-mJ5lNKB88zfesbHJSqpEKWUg0w4= + dependencies: + ip "^1.1.5" + smart-buffer "^4.1.0" + +source-list-map@^2.0.0, source-list-map@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ= + +source-map-loader@1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/source-map-loader/download/source-map-loader-1.1.3.tgz#7dbc2fe7ea09d3e43c51fd9fc478b7f016c1f820" + integrity sha1-fbwv5+oJ0+Q8Uf2fxHi38BbB+CA= + dependencies: + abab "^2.0.5" + iconv-lite "^0.6.2" + loader-utils "^2.0.0" + schema-utils "^3.0.0" + source-map "^0.6.1" + whatwg-mimetype "^2.3.0" + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha1-GQhmvs51U+H48mei7oLGBrVQmho= + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-resolve@^0.6.0: + version "0.6.0" + resolved "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" + integrity sha1-PZ34fiNrU/FtAeWBUPx3EROOXtI= + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + +source-map-support@0.5.19, source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha1-qYti+G3K9PZzmWSMCFKRq56P7WE= + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.4.0: + version "0.4.18" + resolved "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8= + dependencies: + source-map "^0.5.6" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.npm.taobao.org/source-map-url/download/source-map-url-0.4.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-url%2Fdownload%2Fsource-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha1-CvZmBadFpaL5HPG7+KevvCg97FY= + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= + +source-map@0.7.3, source-map@^0.7.3, source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha1-UwL4FpAxc1ImVECS5kmB91F1A4M= + +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha1-6oBL2UhXQC5pktBaOO8a41qatMQ= + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/spdy-transport/download/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha1-ANSGOmQArXXfkzYaFghgXl3NzzE= + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha1-t09GYgOj7aRSwCSSuR+56EonZ3s= + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +speed-measure-webpack-plugin@1.4.2: + version "1.4.2" + resolved "https://registry.npm.taobao.org/speed-measure-webpack-plugin/download/speed-measure-webpack-plugin-1.4.2.tgz?cache=0&sync_timestamp=1616943640455&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspeed-measure-webpack-plugin%2Fdownload%2Fspeed-measure-webpack-plugin-1.4.2.tgz#1608e62d3bdb45f01810010e1b5bfedefedfa58f" + integrity sha1-FgjmLTvbRfAYEAEOG1v+3v7fpY8= + dependencies: + chalk "^4.1.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha1-fLCd2jqGWFcFxks5pkZgOGguj+I= + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha1-2hdlJiv4wPVxdJ8q1sJjACB65nM= + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.npm.taobao.org/sshpk/download/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha1-+2YcC+8ps520B2nuOfpwCT1vaHc= + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.2" + resolved "https://registry.nlark.com/ssri/download/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha1-FXk5E08gRk5zAd26PpD/qPdyisU= + dependencies: + figgy-pudding "^3.5.1" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.nlark.com/ssri/download/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha1-Y45OQ54v+9LNKJd21cpFfE9Roq8= + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.npm.taobao.org/stable/download/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88= + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npm.taobao.org/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1609654060878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs= + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.npm.taobao.org/stream-each/download/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha1-6+J6DDibBPvMIzZClS4Qcxr6m64= + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.npm.taobao.org/stream-http/download/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw= + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/stream-shift/download/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha1-1wiCgVWasneEJCebCHfaPDktWj0= + +streamroller@^2.2.4: + version "2.2.4" + resolved "https://registry.npm.taobao.org/streamroller/download/streamroller-2.2.4.tgz#c198ced42db94086a6193608187ce80a5f2b0e53" + integrity sha1-wZjO1C25QIamGTYIGHzoCl8rDlM= + dependencies: + date-format "^2.1.0" + debug "^4.1.1" + fs-extra "^8.1.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4= + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE= + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.npm.taobao.org/string-width/download/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU= + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha1-51rpDClCxjUEaGwYsoe0oLGkX4A= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.4.tgz?cache=0&sync_timestamp=1614127357785&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1618553320591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI= + dependencies: + ansi-regex "^5.0.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +style-loader@2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/style-loader/download/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" + integrity sha1-lmlgL9RpB0DqrsE3eZoDrdu8OTw= + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.npm.taobao.org/stylehacks/download/stylehacks-4.0.3.tgz?cache=0&sync_timestamp=1618056315496&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylehacks%2Fdownload%2Fstylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU= + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +stylus-loader@4.3.3: + version "4.3.3" + resolved "https://registry.npm.taobao.org/stylus-loader/download/stylus-loader-4.3.3.tgz#381bb6341272ac50bcdfd0b877707eac99b6b757" + integrity sha1-OBu2NBJyrFC839C4d3B+rJm2t1c= + dependencies: + fast-glob "^3.2.4" + klona "^2.0.4" + loader-utils "^2.0.0" + normalize-path "^3.0.0" + schema-utils "^3.0.0" + +stylus@0.54.8: + version "0.54.8" + resolved "https://registry.npm.taobao.org/stylus/download/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147" + integrity sha1-PaPmWWa8Vnp7BEv+DuzmU+CZ0Uc= + dependencies: + css-parse "~2.0.0" + debug "~3.1.0" + glob "^7.1.6" + mkdirp "~1.0.4" + safer-buffer "^2.1.2" + sax "~1.2.4" + semver "^6.3.0" + source-map "^0.7.3" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha1-B2Srxpxj1ayELdSGfo0CXogN+PM= + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1618561008172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= + dependencies: + has-flag "^4.0.0" + +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.npm.taobao.org/svgo/download/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc= + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +symbol-observable@3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-3.0.0.tgz?cache=0&sync_timestamp=1618452041830&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsymbol-observable%2Fdownload%2Fsymbol-observable-3.0.0.tgz#eea8f6478c651018e059044268375c408c15c533" + integrity sha1-7qj2R4xlEBjgWQRCaDdcQIwVxTM= + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz?cache=0&sync_timestamp=1607088891056&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha1-ofzMBrWNth/XpF2i2kT186Pme6I= + +tapable@^2.2.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/tapable/download/tapable-2.2.0.tgz?cache=0&sync_timestamp=1607088891056&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" + integrity sha1-XDc9KB2cZyhIIT0OA30cQWWrQms= + +tar@^6.0.2, tar@^6.1.0: + version "6.1.0" + resolved "https://registry.npm.taobao.org/tar/download/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" + integrity sha1-0XJOm8wEuXexjVxXOzM6IgcimoM= + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +terser-webpack-plugin@4.2.3: + version "4.2.3" + resolved "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-4.2.3.tgz?cache=0&sync_timestamp=1610194262897&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" + integrity sha1-KNrvSoO9F8HbApcHCtwH/Iz8apo= + dependencies: + cacache "^15.0.5" + find-cache-dir "^3.3.1" + jest-worker "^26.5.0" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" + source-map "^0.6.1" + terser "^5.3.4" + webpack-sources "^1.4.3" + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz?cache=0&sync_timestamp=1610194262897&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha1-oheu+uozDnNP+sthIOwfoxLWBAs= + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@5.5.1: + version "5.5.1" + resolved "https://registry.nlark.com/terser/download/terser-5.5.1.tgz#540caa25139d6f496fdea056e414284886fb2289" + integrity sha1-VAyqJROdb0lv3qBW5BQoSIb7Iok= + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +terser@^4.1.2: + version "4.8.0" + resolved "https://registry.nlark.com/terser/download/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc= + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +terser@^5.3.4: + version "5.7.0" + resolved "https://registry.nlark.com/terser/download/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" + integrity sha1-p2Hu7CBryHtgWrEwKYdurZOK5pM= + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +text-table@0.2.0: + version "0.2.0" + resolved "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0= + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@X.X.X, through@^2.3.6: + version "2.3.8" + resolved "https://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.npm.taobao.org/thunky/download/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30= + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.nlark.com/timers-browserify/download/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha1-RKRcEfv0B/NPl7zNFXfGUjYbAO4= + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.npm.taobao.org/timsort/download/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tmp@0.0.30: + version "0.0.30" + resolved "https://registry.npm.taobao.org/tmp/download/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" + integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= + dependencies: + os-tmpdir "~1.0.1" + +tmp@0.2.1: + version "0.2.1" + resolved "https://registry.npm.taobao.org/tmp/download/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha1-hFf8MDfc9HGcJRNnoa9lAO4czxQ= + dependencies: + rimraf "^3.0.0" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= + dependencies: + os-tmpdir "~1.0.2" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.nlark.com/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npm.taobao.org/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4= + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM= + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.nlark.com/tough-cookie/download/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha1-zZ+yoKodWhK0c72fuW+j3P9lreI= + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tree-kill@1.2.2: + version "1.2.2" + resolved "https://registry.npm.taobao.org/tree-kill/download/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha1-TKCakJLIi3OnzcXooBtQeweQoMw= + +ts-node@~8.3.0: + version "8.3.0" + resolved "https://registry.npm.taobao.org/ts-node/download/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" + integrity sha1-5AWWGEETcZJKH7XzsSWRXzJO+1c= + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.6" + yn "^3.0.0" + +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.nlark.com/ts-pnp/download/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha1-pQCtCEsHmPHDBxrzkeZZEshrypI= + +tslib@2.1.0: + version "2.1.0" + resolved "https://registry.nlark.com/tslib/download/tslib-2.1.0.tgz?cache=0&sync_timestamp=1618846758811&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha1-2mCGDxwuyqVwOrfTm8Bba/mIuXo= + +tslib@^1.10.0, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.nlark.com/tslib/download/tslib-1.14.1.tgz?cache=0&sync_timestamp=1618846758811&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha1-zy04vcNKE0vK8QkcQfZhni9nLQA= + +tslib@^2.0.0: + version "2.2.0" + resolved "https://registry.nlark.com/tslib/download/tslib-2.2.0.tgz?cache=0&sync_timestamp=1618846758811&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftslib%2Fdownload%2Ftslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" + integrity sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w= + +tslint@~6.1.0: + version "6.1.3" + resolved "https://registry.npm.taobao.org/tslint/download/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" + integrity sha1-XCOy7MwySH1VI706Rw6aoxeJ2QQ= + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^4.0.1" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.3" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.13.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.npm.taobao.org/tsutils/download/tsutils-2.29.0.tgz?cache=0&sync_timestamp=1615138637708&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftsutils%2Fdownload%2Ftsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha1-MrSIUBRnrL7dS4VJhnOggSrKC5k= + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.nlark.com/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npm.taobao.org/tweetnacl/download/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npm.taobao.org/type-fest/download/type-fest-0.21.3.tgz?cache=0&sync_timestamp=1618335162053&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc= + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha1-TlUs0F3wlGfcvE73Od6J8s83wTE= + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.npm.taobao.org/type/download/type-1.2.0.tgz?cache=0&sync_timestamp=1615215448661&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha1-hI3XaY2vo+VKbEeedZxLw/GIR6A= + +type@^2.0.0: + version "2.5.0" + resolved "https://registry.npm.taobao.org/type/download/type-2.5.0.tgz?cache=0&sync_timestamp=1615215448661&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype%2Fdownload%2Ftype-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha1-Ci54wud5B7JSq+XymMGwHGPw2z0= + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@4.1.5, typescript@~4.1.5: + version "4.1.5" + resolved "https://registry.nlark.com/typescript/download/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" + integrity sha1-Ejo7IUqv874ykm8Njx9ucE64mnI= + +ua-parser-js@^0.7.23: + version "0.7.28" + resolved "https://registry.npm.taobao.org/ua-parser-js/download/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31" + integrity sha1-i6BOZT81ziECOcZGYWhb+RId7DE= + +unbox-primitive@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/unbox-primitive/download/unbox-primitive-1.0.1.tgz?cache=0&sync_timestamp=1616706427948&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funbox-primitive%2Fdownload%2Funbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha1-CF4hViXsMWJXTciFmr7nilmxRHE= + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha1-JhmADEyCWADv3YNDr33Zkzy+KBg= + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw= + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha1-DZH2AO7rMJaqlisdb8iIduZOpTE= + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ= + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/union-value/download/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.nlark.com/uniq/download/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/uniqs/download/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/unique-filename/download/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA= + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npm.taobao.org/unique-slug/download/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha1-uqvOkQg/xk6UWw861hPiZPfNTmw= + dependencies: + imurmurhash "^0.1.4" + +universal-analytics@0.4.23: + version "0.4.23" + resolved "https://registry.npm.taobao.org/universal-analytics/download/universal-analytics-0.4.23.tgz#d915e676850c25c4156762471bdd7cf2eaaca8ac" + integrity sha1-2RXmdoUMJcQVZ2JHG9188uqsqKw= + dependencies: + debug "^4.1.1" + request "^2.88.2" + uuid "^3.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.nlark.com/universalify/download/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/unquote/download/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/unset-value/download/unset-value-1.0.0.tgz?cache=0&sync_timestamp=1616088640915&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funset-value%2Fdownload%2Funset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ= + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.1.tgz?cache=0&sync_timestamp=1610237756396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furi-js%2Fdownload%2Furi-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34= + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse@^1.4.3, url-parse@^1.5.1: + version "1.5.1" + resolved "https://registry.npm.taobao.org/url-parse/download/url-parse-1.5.1.tgz?cache=0&sync_timestamp=1613659698159&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furl-parse%2Fdownload%2Furl-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" + integrity sha1-1fqYkK+KXh8nSiyYN2UQ9kJfbjs= + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npm.taobao.org/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8= + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.1.tgz?cache=0&sync_timestamp=1610159885628&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil.promisify%2Fdownload%2Futil.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha1-a693dLgO6w91INi4HQeYKlmruu4= + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE= + dependencies: + inherits "2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@8.3.2: + version "8.3.2" + resolved "https://registry.npm.taobao.org/uuid/download/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha1-gNW1ztJxu5r2xEXyGhoExgbO++I= + +uuid@^3.0.0, uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4= + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/validate-npm-package-name/download/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.npm.taobao.org/vendors/download/vendors-1.0.4.tgz?cache=0&sync_timestamp=1615203397897&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvendors%2Fdownload%2Fvendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha1-4rgApT56Kbk1BsPPQRANFsTErY4= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npm.taobao.org/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha1-eGQcSIuObKkadfUR56OzKobl3aA= + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.npm.taobao.org/void-elements/download/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.1.tgz?cache=0&sync_timestamp=1604989063099&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack-chokidar2%2Fdownload%2Fwatchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc= + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.5.tgz?cache=0&sync_timestamp=1612715955072&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha1-EmfmxV4Lm1vkTCAjrtVDeiwmxFM= + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.npm.taobao.org/wbuf/download/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha1-wdjRSTFtPqhShIiVy2oL/oh7h98= + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npm.taobao.org/wcwidth/download/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webdriver-js-extender@2.1.0: + version "2.1.0" + resolved "https://registry.npm.taobao.org/webdriver-js-extender/download/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" + integrity sha1-V9epPADbTMjVVuTT20tdsKgMO7c= + dependencies: + "@types/selenium-webdriver" "^3.0.0" + selenium-webdriver "^3.0.1" + +webdriver-manager@^12.1.7: + version "12.1.8" + resolved "https://registry.npm.taobao.org/webdriver-manager/download/webdriver-manager-12.1.8.tgz#5e70e73eaaf53a0767d5745270addafbc5905fd4" + integrity sha1-XnDnPqr1Ogdn1XRScK3a+8WQX9Q= + dependencies: + adm-zip "^0.4.9" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.87.0" + rimraf "^2.5.2" + semver "^5.3.0" + xml2js "^0.4.17" + +webpack-dev-middleware@3.7.2: + version "3.7.2" + resolved "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.7.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha1-ABnD23FuP6XOy/ZPKriKdLqzMfM= + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.7.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha1-Bjk3KxQyYuK4SrldO5GnWXBhwsU= + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@3.11.2: + version "3.11.2" + resolved "https://registry.nlark.com/webpack-dev-server/download/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" + integrity sha1-aV687Xakkp8NXef9c/r+GF/jNwg= + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.8" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "^0.3.21" + sockjs-client "^1.5.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/webpack-log/download/webpack-log-2.0.0.tgz?cache=0&sync_timestamp=1615477493300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-log%2Fdownload%2Fwebpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8= + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@5.7.3: + version "5.7.3" + resolved "https://registry.npm.taobao.org/webpack-merge/download/webpack-merge-5.7.3.tgz?cache=0&sync_timestamp=1608705507443&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-merge%2Fdownload%2Fwebpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" + integrity sha1-KgdU4Yd6Jai7qz0kdcpwoFJwghM= + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@2.2.0: + version "2.2.0" + resolved "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" + integrity sha1-BYkm8549RDGTtsMVRyKYBv/QK6w= + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack-sources@^1.1.0, webpack-sources@^1.2.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha1-7t2OwLko+/HL/plOItLYkPMwqTM= + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-subresource-integrity@1.5.2: + version "1.5.2" + resolved "https://registry.npm.taobao.org/webpack-subresource-integrity/download/webpack-subresource-integrity-1.5.2.tgz?cache=0&sync_timestamp=1614754880659&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-subresource-integrity%2Fdownload%2Fwebpack-subresource-integrity-1.5.2.tgz#e40b6578d3072e2d24104975249c52c66e9a743e" + integrity sha1-5AtleNMHLi0kEEl1JJxSxm6adD4= + dependencies: + webpack-sources "^1.3.0" + +webpack@4.44.2: + version "4.44.2" + resolved "https://registry.nlark.com/webpack/download/webpack-4.44.2.tgz?cache=0&sync_timestamp=1619203095974&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack%2Fdownload%2Fwebpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha1-a/4rCvBVyLLR6Q7SzZNj+EEma3I= + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A= + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha1-f4RzvIOd/YdgituV1+sHUhFXikI= + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78= + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY= + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.1, which@^1.2.9: + version "1.3.1" + resolved "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= + dependencies: + isexe "^2.0.0" + +which@^2.0.2: + version "2.0.2" + resolved "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE= + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha1-rgdOa9wMFKQx6ATmJFScYzsABFc= + dependencies: + string-width "^1.0.2 || 2" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/wildcard/download/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha1-p30g5SAMb6qsl55LOq3Hs91/j+w= + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag= + dependencies: + errno "~0.1.7" + +worker-plugin@5.0.0: + version "5.0.0" + resolved "https://registry.npm.taobao.org/worker-plugin/download/worker-plugin-5.0.0.tgz#113b5fe1f4a5d6a957cecd29915bedafd70bb537" + integrity sha1-ETtf4fSl1qlXzs0pkVvtr9cLtTc= + dependencies: + loader-utils "^1.1.0" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz?cache=0&sync_timestamp=1618558913931&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha1-H9H2cjXVttD+54EFYAG/tpTAOwk= + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz?cache=0&sync_timestamp=1618558913931&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha1-6Tk7oHEC5skaOyIUePAlfNKFblM= + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-7.0.0.tgz?cache=0&sync_timestamp=1618558913931&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwrap-ansi%2Fdownload%2Fwrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM= + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.nlark.com/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha1-RC/fCkftZPWbal2P8TD0dI7VJPs= + dependencies: + async-limiter "~1.0.0" + +ws@~7.4.2: + version "7.4.5" + resolved "https://registry.npm.taobao.org/ws/download/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" + integrity sha1-pITdhR6b62/bQgAn44hejOSJhsE= + +xml2js@^0.4.17: + version "0.4.23" + resolved "https://registry.npm.taobao.org/xml2js/download/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha1-oMaVFnUkIesqx1juTUzPWIQ+rGY= + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.npm.taobao.org/xmlbuilder/download/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha1-vpuuHIoEbnazESdyY0fQrXACvrM= + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.nlark.com/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.npm.taobao.org/y18n/download/y18n-4.0.3.tgz?cache=0&sync_timestamp=1617822642544&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8= + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npm.taobao.org/y18n/download/y18n-5.0.8.tgz?cache=0&sync_timestamp=1617822642544&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU= + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.nlark.com/yallist/download/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.nlark.com/yallist/download/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI= + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.nlark.com/yaml/download/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha1-IwHF/78StGfejaIzOkWeKeeSDks= + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.nlark.com/yargs-parser/download/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha1-Ew8JcC667vJlDVTObj5XBvek+zg= + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.nlark.com/yargs-parser/download/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A= + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.2: + version "20.2.7" + resolved "https://registry.nlark.com/yargs-parser/download/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha1-Yd+FwRPt+1p6TjbriqYO9CPLyQo= + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1619404265836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha1-rX/+/sGqWVZayRX4Lcyzipwxot0= + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.nlark.com/yargs/download/yargs-15.4.1.tgz?cache=0&sync_timestamp=1619404265836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg= + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^16.1.1, yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.nlark.com/yargs/download/yargs-16.2.0.tgz?cache=0&sync_timestamp=1619404265836&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha1-HIK/D2tqZur85+8w43b0mhJHf2Y= + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@^3.0.0: + version "3.1.1" + resolved "https://registry.npm.taobao.org/yn/download/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha1-HodAGgnXZ8HV6rJqbkwYUYLS61A= + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npm.taobao.org/yocto-queue/download/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha1-ApTrPe4FAo0x7hpfosVWpqrxChs= + +zone.js@~0.10.3: + version "0.10.3" + resolved "https://registry.npm.taobao.org/zone.js/download/zone.js-0.10.3.tgz#3e5e4da03c607c9dcd92e37dd35687a14a140c16" + integrity sha1-Pl5NoDxgfJ3NkuN901aHoUoUDBY= + +zone.js@~0.11.3: + version "0.11.4" + resolved "https://registry.npm.taobao.org/zone.js/download/zone.js-0.11.4.tgz#0f70dcf6aba80f698af5735cbb257969396e8025" + integrity sha1-D3Dc9quoD2mK9XNcuyV5aTlugCU= + dependencies: + tslib "^2.0.0"