Merge branch 'main' into run-ml-button
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
"root": true,
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es2021": true,
|
||||
|
|
72
.github/workflows/codeql-analysis.yml
vendored
Normal file
|
@ -0,0 +1,72 @@
|
|||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master, release ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '34 0 * * 2'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
|
||||
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||
# queries: security-extended,security-and-quality
|
||||
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
|
||||
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
||||
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
||||
|
||||
# - run: |
|
||||
# echo "Run, Build Application using script"
|
||||
# ./location_of_script_within_repo/buildscript.sh
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
4
.gitmodules
vendored
|
@ -5,3 +5,7 @@
|
|||
[submodule "thirdparty/tesseract"]
|
||||
path = thirdparty/tesseract
|
||||
url = git@github.com:abhinavkgrd/tesseract.js.git
|
||||
[submodule "ffmpeg-wasm"]
|
||||
path = thirdparty/ffmpeg-wasm
|
||||
url = https://github.com/abhinavkgrd/ffmpeg.wasm.git
|
||||
branch = single-thread
|
||||
|
|
77
README.md
|
@ -1,29 +1,58 @@
|
|||
Web application for [ente](https://ente.io) built with lots of ❤️ and a little bit of JavaScript.
|
||||
# ente - simple, safe photo storage
|
||||
|
||||
You can read more about ente's encryption protocol here: https://ente.io/architecture.
|
||||
**ente** is a cloud storage provider that provides end-to-end encryption for your data.
|
||||
|
||||
For more information about the project please visit: https://ente.io.
|
||||
We have open-source apps across [Android](https://github.com/ente-io/frame), [iOS](https://github.com/ente-io/frame), [web](https://github.com/ente-io/bada-frame) and [desktop](https://github.com/ente-io/bhari-frame) that automatically backup your photos and videos.
|
||||
|
||||
This repository contains the code for our web app, built with a lot of ❤️, and a little bit of JavaScript.
|
||||
<br/><br/><br/>
|
||||

|
||||
|
||||
## ✨ Features
|
||||
|
||||
- Client side encryption (only you can view your photos and videos)
|
||||
- Bulk uploader (from hard disk, Google Photos, Apple Photos, ...)
|
||||
- Shareable links for albums
|
||||
- Ability to filter photos by places, days, album and file names
|
||||
- 2FA
|
||||
- Recycle bin
|
||||
- EXIF viewer
|
||||
- Zero third-party tracking / analytics
|
||||
|
||||
## 💻 Deployed Application
|
||||
|
||||
The deployed application is accessible @ [web.ente.io](https://web.ente.io).
|
||||
|
||||
## 🧑💻 Building from source
|
||||
|
||||
1. Clone this repository with `git clone git@github.com:ente-io/bada-frame.git`
|
||||
2. Pull in all submodules with `git submodule update --init --recursive`
|
||||
3. Install dependencies with `yarn install`
|
||||
4. Finally, run the development server with `yarn dev`
|
||||
|
||||
Open [http://localhost:3000](http://localhost:3000) on your browser to see the live application.
|
||||
|
||||
## 🙋 Help
|
||||
|
||||
We provide human support to our customers. Please write to [support@ente.io](mailto:support@ente.io) sharing as many details as possible about whatever it is that you need help with, and we will get back to you as soon as possible.
|
||||
|
||||
## 🧭 Roadmap
|
||||
|
||||
We maintain a public roadmap, that's driven by our community @ [roadmap.ente.io](https://roadmap.ente.io).
|
||||
|
||||
## 🤗 Support
|
||||
|
||||
If you like this project, please consider upgrading to a paid subscription.
|
||||
|
||||
If you would like to motivate us to keep building, you can do so by [starring](https://github.com/ente-io/bada-frame/stargazers) this project.
|
||||
|
||||
## ❤️ Join the Community
|
||||
|
||||
Follow us on [Twitter](https://twitter.com/enteio) and join [r/enteio](https://reddit.com/r/enteio) to get regular updates, connect with other customers, and discuss your ideas.
|
||||
|
||||
An important part of our journey is to build better software by consistently listening to community feedback. Please feel free to [share your thoughts](mailto:feedback@ente.io) with us at any time.
|
||||
|
||||
---
|
||||
|
||||
## Building
|
||||
|
||||
First, pull and install dependencies
|
||||
```bash
|
||||
git submodule update --init --recursive
|
||||
yarn install
|
||||
```
|
||||
|
||||
Then run the development server:
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
# or
|
||||
yarn dev
|
||||
```
|
||||
|
||||
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
||||
|
||||
---
|
||||
|
||||
If there's something you need help with, please write to [support@ente.io](mailto:support@ente.io), we'd be happy to help!
|
||||
Cross-browser testing provided by
|
||||
[<img src="https://d98b8t1nnulk5.cloudfront.net/production/images/layout/logo-header.png?1469004780" width="115" height="25">](https://www.browserstack.com/open-source)
|
||||
|
|
|
@ -17,15 +17,24 @@ module.exports = {
|
|||
},
|
||||
|
||||
CSP_DIRECTIVES: {
|
||||
'default-src': "'none'",
|
||||
'img-src': "'self' blob:",
|
||||
// self is safe enough
|
||||
'default-src': "'self'",
|
||||
// data to allow two factor qr code
|
||||
'img-src': "'self' blob: data:",
|
||||
'media-src': "'self' blob:",
|
||||
'manifest-src': "'self'",
|
||||
'style-src': "'self' 'unsafe-inline'",
|
||||
'font-src ': "'self'; script-src 'self' 'unsafe-eval' blob:",
|
||||
'connect-src':
|
||||
"'self' https://*.ente.io data: blob: https://ente-prod-eu.s3.eu-central-003.backblazeb2.com ",
|
||||
"'self' https://*.ente.io http://localhost:8080 data: blob: https://ente-prod-eu.s3.eu-central-003.backblazeb2.com ",
|
||||
'base-uri ': "'self'",
|
||||
// to allow worker
|
||||
'child-src': "'self' blob:",
|
||||
'object-src': "'none'",
|
||||
'frame-ancestors': " 'none'",
|
||||
'form-action': "'none'",
|
||||
'report-uri': ' https://csp-reporter.ente.io/local',
|
||||
'report-to': ' https://csp-reporter.ente.io/local',
|
||||
},
|
||||
|
||||
WORKBOX_CONFIG: {
|
||||
|
|
1
next-env.d.ts
vendored
|
@ -1,5 +1,4 @@
|
|||
/// <reference types="next" />
|
||||
/// <reference types="next/types/global" />
|
||||
/// <reference types="next/image-types/global" />
|
||||
|
||||
// NOTE: This file should not be edited
|
||||
|
|
|
@ -6,6 +6,12 @@ const withWorkbox = require('@ente-io/next-with-workbox');
|
|||
const { withSentryConfig } = require('@sentry/nextjs');
|
||||
const { PHASE_DEVELOPMENT_SERVER } = require('next/constants');
|
||||
|
||||
const withTM = require('next-transpile-modules')([
|
||||
'@mui/material',
|
||||
'@mui/system',
|
||||
'@mui/icons-material',
|
||||
]);
|
||||
|
||||
const {
|
||||
getGitSha,
|
||||
convertToNextHeaderFormat,
|
||||
|
@ -25,33 +31,36 @@ const IS_SENTRY_ENABLED = getIsSentryEnabled();
|
|||
module.exports = (phase) =>
|
||||
withSentryConfig(
|
||||
withWorkbox(
|
||||
withBundleAnalyzer({
|
||||
env: {
|
||||
SENTRY_RELEASE: GIT_SHA,
|
||||
},
|
||||
workbox: WORKBOX_CONFIG,
|
||||
withBundleAnalyzer(
|
||||
withTM({
|
||||
env: {
|
||||
SENTRY_RELEASE: GIT_SHA,
|
||||
NEXT_PUBLIC_LATEST_COMMIT_HASH: GIT_SHA,
|
||||
},
|
||||
workbox: WORKBOX_CONFIG,
|
||||
|
||||
headers() {
|
||||
return [
|
||||
{
|
||||
// Apply these headers to all routes in your application....
|
||||
source: ALL_ROUTES,
|
||||
headers: convertToNextHeaderFormat({
|
||||
...COOP_COEP_HEADERS,
|
||||
...WEB_SECURITY_HEADERS,
|
||||
...buildCSPHeader(CSP_DIRECTIVES),
|
||||
}),
|
||||
},
|
||||
];
|
||||
},
|
||||
// https://dev.to/marcinwosinek/how-to-add-resolve-fallback-to-webpack-5-in-nextjs-10-i6j
|
||||
webpack: (config, { isServer }) => {
|
||||
if (!isServer) {
|
||||
config.resolve.fallback.fs = false;
|
||||
}
|
||||
return config;
|
||||
},
|
||||
})
|
||||
headers() {
|
||||
return [
|
||||
{
|
||||
// Apply these headers to all routes in your application....
|
||||
source: ALL_ROUTES,
|
||||
headers: convertToNextHeaderFormat({
|
||||
...COOP_COEP_HEADERS,
|
||||
...WEB_SECURITY_HEADERS,
|
||||
...buildCSPHeader(CSP_DIRECTIVES),
|
||||
}),
|
||||
},
|
||||
];
|
||||
},
|
||||
// https://dev.to/marcinwosinek/how-to-add-resolve-fallback-to-webpack-5-in-nextjs-10-i6j
|
||||
webpack: (config, { isServer }) => {
|
||||
if (!isServer) {
|
||||
config.resolve.fallback.fs = false;
|
||||
}
|
||||
return config;
|
||||
},
|
||||
})
|
||||
)
|
||||
),
|
||||
{
|
||||
release: GIT_SHA,
|
||||
|
|
35
package.json
|
@ -1,11 +1,11 @@
|
|||
{
|
||||
"name": "bada-frame",
|
||||
"version": "0.4.4",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"albums": "next dev -p 3002",
|
||||
"prebuild": "eslint 'src/**/*.{js,jsx,ts,tsx}'",
|
||||
"prebuild": "eslint \"src/**/*.{js,jsx,ts,tsx}\"",
|
||||
"build": "next build",
|
||||
"build-analyze": "ANALYZE=true next build",
|
||||
"postbuild": "next export",
|
||||
|
@ -13,9 +13,13 @@
|
|||
"prepare": "husky install"
|
||||
},
|
||||
"dependencies": {
|
||||
"@date-io/date-fns": "^2.14.0",
|
||||
"@ente-io/next-with-workbox": "^1.0.3",
|
||||
"@ffmpeg/core": "^0.10.0",
|
||||
"@ffmpeg/ffmpeg": "^0.10.1",
|
||||
"@mui/icons-material": "^5.6.2",
|
||||
"@mui/material": "^5.6.2",
|
||||
"@mui/styled-engine": "npm:@mui/styled-engine-sc@latest",
|
||||
"@mui/styled-engine-sc": "^5.6.1",
|
||||
"@mui/x-date-pickers": "^5.0.0-alpha.6",
|
||||
"@sentry/nextjs": "^6.7.1",
|
||||
"@stripe/stripe-js": "^1.13.2",
|
||||
"@tensorflow-models/coco-ssd": "^2.2.2",
|
||||
|
@ -31,6 +35,7 @@
|
|||
"bip39": "^3.0.4",
|
||||
"blazeface-back": "^0.0.8",
|
||||
"bootstrap": "^4.5.2",
|
||||
"bs58": "^4.0.1",
|
||||
"chrono-node": "^2.2.6",
|
||||
"comlink": "^4.3.0",
|
||||
"debounce-promise": "^3.1.2",
|
||||
|
@ -41,7 +46,8 @@
|
|||
"eslint-plugin-react-hooks": "^4.2.0",
|
||||
"eventemitter3": "^4.0.7",
|
||||
"exifr": "^7.1.3",
|
||||
"file-type": "^16.5.3",
|
||||
"ffmpeg-wasm": "file:./thirdparty/ffmpeg-wasm",
|
||||
"file-type": "^16.5.4",
|
||||
"formik": "^2.1.5",
|
||||
"hdbscan": "0.0.1-alpha.5",
|
||||
"heic-convert": "^1.2.4",
|
||||
|
@ -52,14 +58,13 @@
|
|||
"libsodium-wrappers": "^0.7.8",
|
||||
"localforage": "^1.9.0",
|
||||
"ml-matrix": "^6.8.2",
|
||||
"next": "^11.1.3",
|
||||
"p-queue": "^7.1.0",
|
||||
"next": "^12.1.0",
|
||||
"next-transpile-modules": "^9.0.0",
|
||||
"photoswipe": "file:./thirdparty/photoswipe",
|
||||
"piexifjs": "^1.0.6",
|
||||
"react": "^17.0.2",
|
||||
"react-bootstrap": "^1.3.0",
|
||||
"react-burger-menu": "^3.0.4",
|
||||
"react-collapse": "^5.1.0",
|
||||
"react-d3-tree": "^3.1.1",
|
||||
"react-datepicker": "^4.3.0",
|
||||
"react-dom": "^17.0.2",
|
||||
|
@ -70,13 +75,12 @@
|
|||
"react-top-loading-bar": "^2.0.1",
|
||||
"react-virtualized-auto-sizer": "^1.0.2",
|
||||
"react-window": "^1.8.6",
|
||||
"react-window-infinite-loader": "^1.0.5",
|
||||
"scrypt-js": "^3.0.1",
|
||||
"similarity-transformation": "^0.0.1",
|
||||
"styled-components": "^5.2.0",
|
||||
"tesseract.js": "file:./thirdparty/tesseract",
|
||||
"transformation-matrix": "^2.10.0",
|
||||
"tsne-js": "^1.0.3",
|
||||
"styled-components": "^5.3.5",
|
||||
"workbox-precaching": "^6.1.5",
|
||||
"workbox-recipes": "^6.1.5",
|
||||
"workbox-routing": "^6.1.5",
|
||||
|
@ -97,14 +101,20 @@
|
|||
"@types/react-select": "^4.0.15",
|
||||
"@types/react-window": "^1.8.2",
|
||||
"@types/react-window-infinite-loader": "^1.0.3",
|
||||
"@types/styled-components": "^5.1.3",
|
||||
"@types/wicg-file-system-access": "^2020.9.5",
|
||||
"@types/styled-components": "^5.1.25",
|
||||
"@types/yup": "^0.29.7",
|
||||
"@typescript-eslint/eslint-plugin": "^4.25.0",
|
||||
"@typescript-eslint/parser": "^4.25.0",
|
||||
"babel-plugin-styled-components": "^1.11.1",
|
||||
"eslint": "^7.27.0",
|
||||
"eslint-config-airbnb": "^18.2.1",
|
||||
"eslint-config-google": "^0.14.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-import": "^2.23.3",
|
||||
"eslint-plugin-jsx-a11y": "^6.4.1",
|
||||
"eslint-plugin-react": "^7.23.2",
|
||||
"eslint-plugin-react-hooks": "^4.2.0",
|
||||
"husky": "^7.0.1",
|
||||
"lint-staged": "^11.1.2",
|
||||
"prettier": "2.3.2",
|
||||
|
@ -118,5 +128,8 @@
|
|||
"eslint --fix",
|
||||
"prettier --write --ignore-unknown"
|
||||
]
|
||||
},
|
||||
"resolutions": {
|
||||
"@mui/styled-engine": "npm:@mui/styled-engine-sc@latest"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,5 +8,5 @@
|
|||
X-Frame-Options: deny
|
||||
X-XSS-Protection: 1; mode=block
|
||||
Referrer-Policy: same-origin
|
||||
Content-Security-Policy-Report-Only: default-src 'none'; img-src 'self' blob:; style-src 'self' 'unsafe-inline'; font-src 'self'; script-src 'self' 'unsafe-eval' blob:; connect-src 'self' https://*.ente.io data: blob: https://ente-prod-eu.s3.eu-central-003.backblazeb2.com ; base-uri 'self'; frame-ancestors 'none'; form-action 'none'; report-uri https://csp-reporter.ente.io; report-to https://csp-reporter.ente.io;
|
||||
Content-Security-Policy-Report-Only: default-src 'self'; img-src 'self' blob: data:; media-src 'self' blob:; style-src 'self' 'unsafe-inline'; font-src 'self'; script-src 'self' 'unsafe-eval' blob:; manifest-src 'self'; child-src 'self' blob:; object-src 'none'; connect-src 'self' https://*.ente.io data: blob: https://ente-prod-eu.s3.eu-central-003.backblazeb2.com ; base-uri 'self'; frame-ancestors 'none'; form-action 'none'; report-uri https://csp-reporter.ente.io; report-to https://csp-reporter.ente.io;
|
||||
|
||||
|
|
Before Width: | Height: | Size: 157 B |
Before Width: | Height: | Size: 11 KiB |
93
public/fonts/OFL.txt
Normal file
|
@ -0,0 +1,93 @@
|
|||
Copyright 2020 The Inter Project Authors (https://github.com/rsms/inter)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
@ -1,96 +0,0 @@
|
|||
-------------------------------
|
||||
UBUNTU FONT LICENCE Version 1.0
|
||||
-------------------------------
|
||||
|
||||
PREAMBLE
|
||||
This licence allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely. The fonts, including any derivative works, can be
|
||||
bundled, embedded, and redistributed provided the terms of this licence
|
||||
are met. The fonts and derivatives, however, cannot be released under
|
||||
any other licence. The requirement for fonts to remain under this
|
||||
licence does not require any document created using the fonts or their
|
||||
derivatives to be published under this licence, as long as the primary
|
||||
purpose of the document is not to be a vehicle for the distribution of
|
||||
the fonts.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this licence and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Original Version" refers to the collection of Font Software components
|
||||
as received under this licence.
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to
|
||||
a new environment.
|
||||
|
||||
"Copyright Holder(s)" refers to all individuals and companies who have a
|
||||
copyright ownership of the Font Software.
|
||||
|
||||
"Substantially Changed" refers to Modified Versions which can be easily
|
||||
identified as dissimilar to the Font Software by users of the Font
|
||||
Software comparing the Original Version with the Modified Version.
|
||||
|
||||
To "Propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification and with or without charging
|
||||
a redistribution fee), making available to the public, and in some
|
||||
countries other activities as well.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
This licence does not grant any rights under trademark law and all such
|
||||
rights are reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of the Font Software, to propagate the Font Software, subject to
|
||||
the below conditions:
|
||||
|
||||
1) Each copy of the Font Software must contain the above copyright
|
||||
notice and this licence. These can be included either as stand-alone
|
||||
text files, human-readable headers or in the appropriate machine-
|
||||
readable metadata fields within text or binary files as long as those
|
||||
fields can be easily viewed by the user.
|
||||
|
||||
2) The font name complies with the following:
|
||||
(a) The Original Version must retain its name, unmodified.
|
||||
(b) Modified Versions which are Substantially Changed must be renamed to
|
||||
avoid use of the name of the Original Version or similar names entirely.
|
||||
(c) Modified Versions which are not Substantially Changed must be
|
||||
renamed to both (i) retain the name of the Original Version and (ii) add
|
||||
additional naming elements to distinguish the Modified Version from the
|
||||
Original Version. The name of such Modified Versions must be the name of
|
||||
the Original Version, with "derivative X" where X represents the name of
|
||||
the new work, appended to that name.
|
||||
|
||||
3) The name(s) of the Copyright Holder(s) and any contributor to the
|
||||
Font Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except (i) as required by this licence, (ii) to
|
||||
acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with
|
||||
their explicit written permission.
|
||||
|
||||
4) The Font Software, modified or unmodified, in part or in whole, must
|
||||
be distributed entirely under this licence, and must not be distributed
|
||||
under any other licence. The requirement for fonts to remain under this
|
||||
licence does not affect any document created using the Font Software,
|
||||
except any version of the Font Software extracted from a document
|
||||
created using the Font Software may only be distributed under this
|
||||
licence.
|
||||
|
||||
TERMINATION
|
||||
This licence becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||
COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER
|
||||
DEALINGS IN THE FONT SOFTWARE.
|
BIN
public/fonts/inter-v11-latin-500.woff
Normal file
BIN
public/fonts/inter-v11-latin-500.woff2
Normal file
BIN
public/fonts/inter-v11-latin-600.woff
Normal file
BIN
public/fonts/inter-v11-latin-600.woff2
Normal file
BIN
public/fonts/inter-v11-latin-800.woff
Normal file
BIN
public/fonts/inter-v11-latin-800.woff2
Normal file
|
@ -1,7 +0,0 @@
|
|||
<svg width="652" height="191" viewBox="0 0 652 191" fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M158.192 111.968C158.192 114.464 158 118.016 157.616 122.624H36.944C39.056 133.952 44.528 142.976 53.36 149.696C62.384 156.224 73.52 159.488 86.768 159.488C103.664 159.488 117.584 153.92 128.528 142.784L147.824 164.96C140.912 173.216 132.176 179.456 121.616 183.68C111.056 187.904 99.152 190.016 85.904 190.016C69.008 190.016 54.128 186.656 41.264 179.936C28.4 173.216 18.416 163.904 11.312 152C4.39997 139.904 0.94397 126.272 0.94397 111.104C0.94397 96.128 4.30397 82.688 11.024 70.784C17.936 58.688 27.44 49.28 39.536 42.56C51.632 35.84 65.264 32.48 80.432 32.48C95.408 32.48 108.752 35.84 120.464 42.56C132.368 49.088 141.584 58.4 148.112 70.496C154.832 82.4 158.192 96.224 158.192 111.968ZM80.432 61.28C68.912 61.28 59.12 64.736 51.056 71.648C43.184 78.368 38.384 87.392 36.656 98.72H123.92C122.384 87.584 117.68 78.56 109.808 71.648C101.936 64.736 92.144 61.28 80.432 61.28Z" fill="#ddd"/>
|
||||
<path d="M280.036 32.48C299.428 32.48 314.98 38.144 326.692 49.472C338.404 60.8 344.26 77.6 344.26 99.872V188H308.26V104.48C308.26 91.04 305.092 80.96 298.756 74.24C292.42 67.328 283.396 63.872 271.684 63.872C258.436 63.872 247.972 67.904 240.292 75.968C232.612 83.84 228.772 95.264 228.772 110.24V188H192.772V34.208H227.044V54.08C232.996 46.976 240.484 41.6 249.508 37.952C258.532 34.304 268.708 32.48 280.036 32.48Z" fill="#ddd"/>
|
||||
<path d="M482.376 179.648C478.152 183.104 472.968 185.696 466.824 187.424C460.872 189.152 454.536 190.016 447.816 190.016C430.92 190.016 417.864 185.6 408.648 176.768C399.432 167.936 394.824 155.072 394.824 138.176V64.16H369.48V35.36H394.824V0.223999H430.824V35.36H472.008V64.16H430.824V137.312C430.824 144.8 432.648 150.56 436.296 154.592C439.944 158.432 445.224 160.352 452.136 160.352C460.2 160.352 466.92 158.24 472.296 154.016L482.376 179.648Z" fill="#ddd"/>
|
||||
<path d="M651.505 111.968C651.505 114.464 651.312 118.016 650.928 122.624H530.256C532.368 133.952 537.84 142.976 546.672 149.696C555.696 156.224 566.832 159.488 580.08 159.488C596.976 159.488 610.896 153.92 621.84 142.784L641.136 164.96C634.224 173.216 625.488 179.456 614.928 183.68C604.368 187.904 592.464 190.016 579.216 190.016C562.32 190.016 547.44 186.656 534.576 179.936C521.712 173.216 511.728 163.904 504.624 152C497.712 139.904 494.256 126.272 494.256 111.104C494.256 96.128 497.616 82.688 504.336 70.784C511.248 58.688 520.753 49.28 532.849 42.56C544.945 35.84 558.577 32.48 573.745 32.48C588.721 32.48 602.064 35.84 613.776 42.56C625.68 49.088 634.896 58.4 641.424 70.496C648.144 82.4 651.505 96.224 651.505 111.968ZM573.745 61.28C562.225 61.28 552.433 64.736 544.369 71.648C536.497 78.368 531.697 87.392 529.969 98.72H617.232C615.696 87.584 610.992 78.56 603.12 71.648C595.248 64.736 585.457 61.28 573.745 61.28Z" fill="#ddd"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.8 KiB |
|
@ -1,28 +0,0 @@
|
|||
export const BLACK_THUMBNAIL_BASE64 =
|
||||
'/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEB' +
|
||||
'AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQ' +
|
||||
'EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARC' +
|
||||
'ACWASwDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUF' +
|
||||
'BAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk' +
|
||||
'6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztL' +
|
||||
'W2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAA' +
|
||||
'AAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVY' +
|
||||
'nLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImK' +
|
||||
'kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oAD' +
|
||||
'AMBAAIRAxEAPwD/AD/6ACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA' +
|
||||
'CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACg' +
|
||||
'AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAC' +
|
||||
'gAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo' +
|
||||
'AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACg' +
|
||||
'AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACg' +
|
||||
'AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA' +
|
||||
'CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA' +
|
||||
'CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA' +
|
||||
'KACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACg' +
|
||||
'AoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo' +
|
||||
'AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKA' +
|
||||
'CgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAK' +
|
||||
'ACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA' +
|
||||
'KACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo' +
|
||||
'AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAo' +
|
||||
'AKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgD/9k=';
|
Before Width: | Height: | Size: 1.8 KiB |
3
public/images/ente.svg
Normal file
|
@ -0,0 +1,3 @@
|
|||
<svg width="43" height="13" viewBox="0 0 43 13" fill="#fff" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M6.102 12.144C4.998 12.144 4.026 11.928 3.186 11.496C2.358 11.064 1.716 10.476 1.26 9.732C0.804 8.976 0.576 8.118 0.576 7.158C0.576 6.186 0.798 5.328 1.242 4.584C1.698 3.828 2.316 3.24 3.096 2.82C3.876 2.388 4.758 2.172 5.742 2.172C6.69 2.172 7.542 2.376 8.298 2.784C9.066 3.18 9.672 3.756 10.116 4.512C10.56 5.256 10.782 6.15 10.782 7.194C10.782 7.302 10.776 7.428 10.764 7.572C10.752 7.704 10.74 7.83 10.728 7.95H2.862V6.312H9.252L8.172 6.798C8.172 6.294 8.07 5.856 7.866 5.484C7.662 5.112 7.38 4.824 7.02 4.62C6.66 4.404 6.24 4.296 5.76 4.296C5.28 4.296 4.854 4.404 4.482 4.62C4.122 4.824 3.84 5.118 3.636 5.502C3.432 5.874 3.33 6.318 3.33 6.834V7.266C3.33 7.794 3.444 8.262 3.672 8.67C3.912 9.066 4.242 9.372 4.662 9.588C5.094 9.792 5.598 9.894 6.174 9.894C6.69 9.894 7.14 9.816 7.524 9.66C7.92 9.504 8.28 9.27 8.604 8.958L10.098 10.578C9.654 11.082 9.096 11.472 8.424 11.748C7.752 12.012 6.978 12.144 6.102 12.144ZM18.5375 2.172C19.3055 2.172 19.9895 2.328 20.5895 2.64C21.2015 2.94 21.6815 3.408 22.0295 4.044C22.3775 4.668 22.5515 5.472 22.5515 6.456V12H19.7435V6.888C19.7435 6.108 19.5695 5.532 19.2215 5.16C18.8855 4.788 18.4055 4.602 17.7815 4.602C17.3375 4.602 16.9355 4.698 16.5755 4.89C16.2275 5.07 15.9515 5.352 15.7475 5.736C15.5555 6.12 15.4595 6.612 15.4595 7.212V12H12.6515V2.316H15.3335V4.998L14.8295 4.188C15.1775 3.54 15.6755 3.042 16.3235 2.694C16.9715 2.346 17.7095 2.172 18.5375 2.172ZM29.0568 12.144C27.9168 12.144 27.0288 11.856 26.3928 11.28C25.7568 10.692 25.4388 9.822 25.4388 8.67V0.174H28.2468V8.634C28.2468 9.042 28.3548 9.36 28.5708 9.588C28.7868 9.804 29.0808 9.912 29.4528 9.912C29.8968 9.912 30.2748 9.792 30.5868 9.552L31.3428 11.532C31.0548 11.736 30.7068 11.892 30.2988 12C29.9028 12.096 29.4888 12.144 29.0568 12.144ZM23.9448 4.692V2.532H30.6588V4.692H23.9448ZM37.4262 12.144C36.3222 12.144 35.3502 11.928 34.5102 11.496C33.6822 11.064 33.0402 10.476 32.5842 9.732C32.1282 8.976 31.9002 8.118 31.9002 7.158C31.9002 6.186 32.1222 5.328 32.5662 4.584C33.0222 3.828 33.6402 3.24 34.4202 2.82C35.2002 2.388 36.0822 2.172 37.0662 2.172C38.0142 2.172 38.8662 2.376 39.6222 2.784C40.3902 3.18 40.9962 3.756 41.4402 4.512C41.8842 5.256 42.1062 6.15 42.1062 7.194C42.1062 7.302 42.1002 7.428 42.0882 7.572C42.0762 7.704 42.0642 7.83 42.0522 7.95H34.1862V6.312H40.5762L39.4962 6.798C39.4962 6.294 39.3942 5.856 39.1902 5.484C38.9862 5.112 38.7042 4.824 38.3442 4.62C37.9842 4.404 37.5642 4.296 37.0842 4.296C36.6042 4.296 36.1782 4.404 35.8062 4.62C35.4462 4.824 35.1642 5.118 34.9602 5.502C34.7562 5.874 34.6542 6.318 34.6542 6.834V7.266C34.6542 7.794 34.7682 8.262 34.9962 8.67C35.2362 9.066 35.5662 9.372 35.9862 9.588C36.4182 9.792 36.9222 9.894 37.4982 9.894C38.0142 9.894 38.4642 9.816 38.8482 9.66C39.2442 9.504 39.6042 9.27 39.9282 8.958L41.4222 10.578C40.9782 11.082 40.4202 11.472 39.7482 11.748C39.0762 12.012 38.3022 12.144 37.4262 12.144Z" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
BIN
public/images/family-plan/1x.png
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
public/images/family-plan/2x.png
Normal file
After Width: | Height: | Size: 197 KiB |
BIN
public/images/family-plan/3x.png
Normal file
After Width: | Height: | Size: 408 KiB |
BIN
public/images/gallery-locked/1x.png
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
public/images/gallery-locked/2x.png
Normal file
After Width: | Height: | Size: 115 KiB |
BIN
public/images/gallery-locked/3x.png
Normal file
After Width: | Height: | Size: 127 KiB |
Before Width: | Height: | Size: 91 KiB |
BIN
public/images/onboarding-lock/1x.png
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
public/images/onboarding-lock/2x.png
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
public/images/onboarding-lock/3x.png
Normal file
After Width: | Height: | Size: 101 KiB |
BIN
public/images/onboarding-safe/1x.png
Normal file
After Width: | Height: | Size: 107 KiB |
BIN
public/images/onboarding-safe/2x.png
Normal file
After Width: | Height: | Size: 133 KiB |
BIN
public/images/onboarding-safe/3x.png
Normal file
After Width: | Height: | Size: 148 KiB |
BIN
public/images/onboarding-sync/1x.png
Normal file
After Width: | Height: | Size: 94 KiB |
BIN
public/images/onboarding-sync/2x.png
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
public/images/onboarding-sync/3x.png
Normal file
After Width: | Height: | Size: 128 KiB |
Before Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 106 KiB |
BIN
public/images/subscription-card-background/1x.png
Normal file
After Width: | Height: | Size: 51 KiB |
BIN
public/images/subscription-card-background/2x.png
Normal file
After Width: | Height: | Size: 193 KiB |
BIN
public/images/subscription-card-background/3x.png
Normal file
After Width: | Height: | Size: 422 KiB |
Before Width: | Height: | Size: 472 B |
|
@ -7,237 +7,154 @@ function(createFFmpegCore) {
|
|||
createFFmpegCore = createFFmpegCore || {};
|
||||
|
||||
|
||||
var f;f||(f=typeof createFFmpegCore !== 'undefined' ? createFFmpegCore : {});var ba,ca;f.ready=new Promise(function(a,b){ba=a;ca=b});var da={},ea;for(ea in f)f.hasOwnProperty(ea)&&(da[ea]=f[ea]);var fa=[],ha="./this.program";function ja(a,b){throw b;}var ka=!1,la=!1,h=!1,ma=!1;ka="object"===typeof window;la="function"===typeof importScripts;h="object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node;ma=!ka&&!h&&!la;var l=f.ENVIRONMENT_IS_PTHREAD||!1;
|
||||
l&&(oa=f.buffer);var pa="";function qa(a){return f.locateFile?f.locateFile(a,pa):pa+a}var ra,sa,ta,va;
|
||||
if(h){pa=la?require("path").dirname(pa)+"/":__dirname+"/";ra=function(a,b){ta||(ta=require("fs"));va||(va=require("path"));a=va.normalize(a);return ta.readFileSync(a,b?null:"utf8")};sa=function(a){a=ra(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};1<process.argv.length&&(ha=process.argv[1].replace(/\\/g,"/"));fa=process.argv.slice(2);process.on("uncaughtException",function(a){if(!(a instanceof wa))throw a;});process.on("unhandledRejection",n);ja=function(a){process.exit(a)};f.inspect=
|
||||
function(){return"[Emscripten Module object]"};var xa;try{xa=require("worker_threads")}catch(a){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),a;}global.Worker=xa.Worker}else if(ma)"undefined"!=typeof read&&(ra=function(a){return read(a)}),sa=function(a){if("function"===typeof readbuffer)return new Uint8Array(readbuffer(a));a=read(a,"binary");assert("object"===typeof a);return a},"undefined"!=typeof scriptArgs?fa=scriptArgs:
|
||||
"undefined"!=typeof arguments&&(fa=arguments),"function"===typeof quit&&(ja=function(a){quit(a)}),"undefined"!==typeof print&&("undefined"===typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!==typeof printErr?printErr:print);else if(ka||la)la?pa=self.location.href:"undefined"!==typeof document&&document.currentScript&&(pa=document.currentScript.src),_scriptDir&&(pa=_scriptDir),0!==pa.indexOf("blob:")?pa=pa.substr(0,pa.lastIndexOf("/")+1):pa="",h?(ra=function(a,
|
||||
b){ta||(ta=require("fs"));va||(va=require("path"));a=va.normalize(a);return ta.readFileSync(a,b?null:"utf8")},sa=function(a){a=ra(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a}):(ra=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},la&&(sa=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}));h&&"undefined"===typeof performance&&(global.performance=require("perf_hooks").performance);
|
||||
var ya=f.print||console.log.bind(console),u=f.printErr||console.warn.bind(console);for(ea in da)da.hasOwnProperty(ea)&&(f[ea]=da[ea]);da=null;f.arguments&&(fa=f.arguments);f.thisProgram&&(ha=f.thisProgram);f.quit&&(ja=f.quit);var za,Aa=0,Ba;f.wasmBinary&&(Ba=f.wasmBinary);var noExitRuntime;f.noExitRuntime&&(noExitRuntime=f.noExitRuntime);"object"!==typeof WebAssembly&&n("no native wasm support detected");var Ca,Da,threadInfoStruct=0,selfThreadId=0,Ea=!1;
|
||||
function assert(a,b){a||n("Assertion failed: "+b)}function Fa(a){var b=f["_"+a];assert(b,"Cannot call unknown function "+a+", make sure it is exported");return b}
|
||||
function Ga(a,b,c,d){var e={string:function(q){var t=0;if(null!==q&&void 0!==q&&0!==q){var w=(q.length<<2)+1;t=Ha(w);Ia(q,v,t,w)}return t},array:function(q){var t=Ha(q.length);y.set(q,t);return t}},g=Fa(a),k=[];a=0;if(d)for(var m=0;m<d.length;m++){var r=e[c[m]];r?(0===a&&(a=A()),k[m]=r(d[m])):k[m]=d[m]}c=g.apply(null,k);c="string"===b?C(c):"boolean"===b?!!c:c;0!==a&&D(a);return c}
|
||||
function Ja(a,b,c){c=b+c;for(var d="";!(b>=c);){var e=a[b++];if(!e)break;if(e&128){var g=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|g);else{var k=a[b++]&63;e=224==(e&240)?(e&15)<<12|g<<6|k:(e&7)<<18|g<<12|k<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}function C(a,b){return a?Ja(v,a,b):""}
|
||||
function Ia(a,b,c,d){if(!(0<d))return 0;var e=c;d=c+d-1;for(var g=0;g<a.length;++g){var k=a.charCodeAt(g);if(55296<=k&&57343>=k){var m=a.charCodeAt(++g);k=65536+((k&1023)<<10)|m&1023}if(127>=k){if(c>=d)break;b[c++]=k}else{if(2047>=k){if(c+1>=d)break;b[c++]=192|k>>6}else{if(65535>=k){if(c+2>=d)break;b[c++]=224|k>>12}else{if(c+3>=d)break;b[c++]=240|k>>18;b[c++]=128|k>>12&63}b[c++]=128|k>>6&63}b[c++]=128|k&63}}b[c]=0;return c-e}
|
||||
function Ka(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}function La(a){var b=Ka(a)+1,c=Ma(b);c&&Ia(a,y,c,b);return c}function Na(a){var b=Ka(a)+1,c=Ha(b);Ia(a,y,c,b);return c}function Pa(a,b,c){for(var d=0;d<a.length;++d)y[b++>>0]=a.charCodeAt(d);c||(y[b>>0]=0)}var oa,y,v,Qa,Ra,E,F,G,Sa,Ta=f.INITIAL_MEMORY||2146435072;
|
||||
if(l)Ca=f.wasmMemory,oa=f.buffer;else if(f.wasmMemory)Ca=f.wasmMemory;else if(Ca=new WebAssembly.Memory({initial:Ta/65536,maximum:Ta/65536,shared:!0}),!(Ca.buffer instanceof SharedArrayBuffer))throw u("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),h&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),
|
||||
Error("bad memory");Ca&&(oa=Ca.buffer);Ta=oa.byteLength;var Ua=oa;oa=Ua;f.HEAP8=y=new Int8Array(Ua);f.HEAP16=Qa=new Int16Array(Ua);f.HEAP32=E=new Int32Array(Ua);f.HEAPU8=v=new Uint8Array(Ua);f.HEAPU16=Ra=new Uint16Array(Ua);f.HEAPU32=F=new Uint32Array(Ua);f.HEAPF32=G=new Float32Array(Ua);f.HEAPF64=Sa=new Float64Array(Ua);var H,Va=[],Wa=[],Xa=[],Ya=[],Za=[];function $a(){var a=f.preRun.shift();Va.unshift(a)}var ab=0,bb=null,cb=null;
|
||||
function eb(){assert(!l,"addRunDependency cannot be used in a pthread worker");ab++;f.monitorRunDependencies&&f.monitorRunDependencies(ab)}function fb(){ab--;f.monitorRunDependencies&&f.monitorRunDependencies(ab);if(0==ab&&(null!==bb&&(clearInterval(bb),bb=null),cb)){var a=cb;cb=null;a()}}f.preloadedImages={};f.preloadedAudios={};
|
||||
function n(a){if(f.onAbort)f.onAbort(a);l&&console.error("Pthread aborting at "+Error().stack);u(a);Ea=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");ca(a);throw a;}function gb(a){var b=hb;return String.prototype.startsWith?b.startsWith(a):0===b.indexOf(a)}function ib(){return gb("data:application/octet-stream;base64,")}var hb="ffmpeg-core.wasm";ib()||(hb=qa(hb));
|
||||
function jb(){try{if(Ba)return new Uint8Array(Ba);if(sa)return sa(hb);throw"both async and sync fetching of the wasm failed";}catch(a){n(a)}}function kb(){return Ba||!ka&&!la||"function"!==typeof fetch||gb("file://")?Promise.resolve().then(jb):fetch(hb,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+hb+"'";return a.arrayBuffer()}).catch(function(){return jb()})}
|
||||
var J,L,mb={5454720:function(){throw"Canceled!";},5454940:function(a,b){setTimeout(function(){lb(a,b)},0)},5455042:function(){return 5242880}};function nb(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(f);else{var c=b.vh;"number"===typeof c?void 0===b.Tf?H.get(c)():H.get(c)(b.Tf):c(void 0===b.Tf?null:b.Tf)}}}function ob(a){return a.replace(/\b_Z[\w\d_]+/g,function(b){return b===b?b:b+" ["+b+"]"})}
|
||||
f.dynCall=function(a,b,c){var d;-1!=a.indexOf("j")?d=c&&c.length?f["dynCall_"+a].apply(null,[b].concat(c)):f["dynCall_"+a].call(null,b):d=H.get(b).apply(null,c);return d};var pb=0,qb=0,rb=0;function sb(a,b,c){pb=a|0;rb=b|0;qb=c|0}f.registerPthreadPtr=sb;
|
||||
function tb(a,b){if(0>=a||a>y.length||a&1||0>b)return-28;if(0==b)return 0;2147483647<=b&&(b=Infinity);var c=Atomics.load(E,M.Vf>>2),d=0;if(c==a&&Atomics.compareExchange(E,M.Vf>>2,c,0)==c&&(--b,d=1,0>=b))return 1;a=Atomics.notify(E,a>>2,b);if(0<=a)return a+d;throw"Atomics.notify returned an unexpected value "+a;}f._emscripten_futex_wake=tb;
|
||||
function ub(a){if(l)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!a)throw"Internal Error! Null pthread_ptr in cancelThread!";M.Ef[a].worker.postMessage({cmd:"cancel"})}function vb(a){if(l)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!a)throw"Internal Error! Null pthread_ptr in cleanupThread!";E[a+12>>2]=0;(a=M.Ef[a])&&M.Ag(a.worker)}
|
||||
var M={Ph:1,nj:{Ih:0,Jh:0},Gf:[],Kf:[],lj:function(){},pi:function(){M.xf=Ma(232);for(var a=0;58>a;++a)F[M.xf/4+a]=0;E[M.xf+12>>2]=M.xf;a=M.xf+156;E[a>>2]=a;var b=Ma(512);for(a=0;128>a;++a)F[b/4+a]=0;Atomics.store(F,M.xf+104>>2,b);Atomics.store(F,M.xf+40>>2,M.xf);Atomics.store(F,M.xf+44>>2,42);M.Ch();sb(M.xf,!la,1);wb(M.xf)},ri:function(){M.Ch();ba(f);M.receiveObjectTransfer=M.Ii;M.setThreadStatus=M.Li;M.threadCancel=M.Pi;M.threadExit=M.Qi},Ch:function(){M.Vf=xb},Ef:{},Dg:[],Li:function(){},eh:function(){for(;0<
|
||||
M.Dg.length;)M.Dg.pop()();l&&threadInfoStruct&&yb()},Qi:function(a){var b=pb|0;b&&(Atomics.store(F,b+4>>2,a),Atomics.store(F,b+0>>2,1),Atomics.store(F,b+60>>2,1),Atomics.store(F,b+64>>2,0),M.eh(),tb(b+0,2147483647),sb(0,0,0),threadInfoStruct=0,l&&postMessage({cmd:"exit"}))},Pi:function(){M.eh();Atomics.store(F,threadInfoStruct+4>>2,-1);Atomics.store(F,threadInfoStruct+0>>2,1);tb(threadInfoStruct+0,2147483647);threadInfoStruct=selfThreadId=0;sb(0,0,0);postMessage({cmd:"cancelDone"})},Oi:function(){for(var a in M.Ef){var b=
|
||||
M.Ef[a];b&&b.worker&&M.Ag(b.worker)}M.Ef={};for(a=0;a<M.Gf.length;++a){var c=M.Gf[a];c.terminate()}M.Gf=[];for(a=0;a<M.Kf.length;++a)c=M.Kf[a],b=c.yf,M.Pg(b),c.terminate();M.Kf=[]},Pg:function(a){if(a){if(a.threadInfoStruct){var b=E[a.threadInfoStruct+104>>2];E[a.threadInfoStruct+104>>2]=0;zb(b);zb(a.threadInfoStruct)}a.threadInfoStruct=0;a.Kg&&a.Rf&&zb(a.Rf);a.Rf=0;a.worker&&(a.worker.yf=null)}},Ag:function(a){delete M.Ef[a.yf.Lh];M.Gf.push(a);M.Kf.splice(M.Kf.indexOf(a),1);M.Pg(a.yf);a.yf=void 0},
|
||||
Ii:function(){},vi:function(a,b){a.onmessage=function(c){var d=c.data,e=d.cmd;a.yf&&(M.Mg=a.yf.threadInfoStruct);if(d.targetThread&&d.targetThread!=(pb|0)){var g=M.Ef[d.xj];g?g.worker.postMessage(c.data,d.transferList):console.error('Internal error! Worker sent a message "'+e+'" to target pthread '+d.targetThread+", but that thread no longer exists!")}else if("processQueuedMainThreadWork"===e)Ab();else if("spawnThread"===e)Bb(c.data);else if("cleanupThread"===e)vb(d.thread);else if("killThread"===
|
||||
e){c=d.thread;if(l)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!c)throw"Internal Error! Null pthread_ptr in killThread!";E[c+12>>2]=0;c=M.Ef[c];c.worker.terminate();M.Pg(c);M.Kf.splice(M.Kf.indexOf(c.worker),1);c.worker.yf=void 0}else if("cancelThread"===e)ub(d.thread);else if("loaded"===e)a.loaded=!0,b&&b(a),a.og&&(a.og(),delete a.og);else if("print"===e)ya("Thread "+d.threadId+": "+d.text);else if("printErr"===e)u("Thread "+d.threadId+": "+d.text);
|
||||
else if("alert"===e)alert("Thread "+d.threadId+": "+d.text);else if("exit"===e)a.yf&&Atomics.load(F,a.yf.Lh+68>>2)&&M.Ag(a);else if("exitProcess"===e){noExitRuntime=!1;try{Cb(d.returnCode)}catch(k){if(k instanceof wa)return;throw k;}}else"cancelDone"===e?M.Ag(a):"objectTransfer"!==e&&("setimmediate"===c.data.target?a.postMessage(c.data):u("worker sent an unknown command "+e));M.Mg=void 0};a.onerror=function(c){u("pthread sent an error! "+c.filename+":"+c.lineno+": "+c.message)};h&&(a.on("message",
|
||||
function(c){a.onmessage({data:c})}),a.on("error",function(c){a.onerror(c)}),a.on("exit",function(){}));a.postMessage({cmd:"load",urlOrBlob:f.mainScriptUrlOrBlob||_scriptDir,wasmMemory:Ca,wasmModule:Da})},Vh:function(){var a=qa("ffmpeg-core.worker.js");M.Gf.push(new Worker(a))},li:function(){0==M.Gf.length&&(M.Vh(),M.vi(M.Gf[0]));return 0<M.Gf.length?M.Gf.pop():null},Zi:function(a){for(a=performance.now()+a;performance.now()<a;);}};f.establishStackSpace=function(a){D(a)};f.getNoExitRuntime=function(){return noExitRuntime};
|
||||
var Db;h?Db=function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:l?Db=function(){return performance.now()-f.__performance_now_clock_drift}:"undefined"!==typeof dateNow?Db=dateNow:Db=function(){return performance.now()};function Eb(a){return E[Fb()>>2]=a}function Gb(a,b){if(0===a)a=Date.now();else if(1===a||4===a)a=Db();else return Eb(28),-1;E[b>>2]=a/1E3|0;E[b+4>>2]=a%1E3*1E6|0;return 0}function Hb(a,b){if(l)return N(1,1,a,b);Ya.unshift({vh:a,Tf:b})}
|
||||
function Ib(a,b){a=new Date(1E3*E[a>>2]);E[b>>2]=a.getUTCSeconds();E[b+4>>2]=a.getUTCMinutes();E[b+8>>2]=a.getUTCHours();E[b+12>>2]=a.getUTCDate();E[b+16>>2]=a.getUTCMonth();E[b+20>>2]=a.getUTCFullYear()-1900;E[b+24>>2]=a.getUTCDay();E[b+36>>2]=0;E[b+32>>2]=0;E[b+28>>2]=(a.getTime()-Date.UTC(a.getUTCFullYear(),0,1,0,0,0,0))/864E5|0;Ib.ih||(Ib.ih=La("GMT"));E[b+40>>2]=Ib.ih;return b}
|
||||
function Jb(){function a(k){return(k=k.toTimeString().match(/\(([A-Za-z ]+)\)$/))?k[1]:"GMT"}if(l)return N(2,1);if(!Jb.Yh){Jb.Yh=!0;var b=(new Date).getFullYear(),c=new Date(b,0,1),d=new Date(b,6,1);b=c.getTimezoneOffset();var e=d.getTimezoneOffset(),g=Math.max(b,e);E[Kb()>>2]=60*g;E[Lb()>>2]=Number(b!=e);c=a(c);d=a(d);c=La(c);d=La(d);e<b?(E[Mb()>>2]=c,E[Mb()+4>>2]=d):(E[Mb()>>2]=d,E[Mb()+4>>2]=c)}}
|
||||
function Nb(a,b){Jb();a=new Date(1E3*E[a>>2]);E[b>>2]=a.getSeconds();E[b+4>>2]=a.getMinutes();E[b+8>>2]=a.getHours();E[b+12>>2]=a.getDate();E[b+16>>2]=a.getMonth();E[b+20>>2]=a.getFullYear()-1900;E[b+24>>2]=a.getDay();var c=new Date(a.getFullYear(),0,1);E[b+28>>2]=(a.getTime()-c.getTime())/864E5|0;E[b+36>>2]=-(60*a.getTimezoneOffset());var d=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();c=c.getTimezoneOffset();a=(d!=c&&a.getTimezoneOffset()==Math.min(c,d))|0;E[b+32>>2]=a;a=E[Mb()+(a?4:0)>>2];
|
||||
E[b+40>>2]=a;return b}function Ob(a,b){for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a}function Pb(a){var b="/"===a.charAt(0),c="/"===a.substr(-1);(a=Ob(a.split("/").filter(function(d){return!!d}),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a}
|
||||
function Qb(a){var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&(b=b.substr(0,b.length-1));return a+b}function Rb(a){if("/"===a)return"/";a=Pb(a);a=a.replace(/\/$/,"");var b=a.lastIndexOf("/");return-1===b?a:a.substr(b+1)}function Sb(a,b){return Pb(a+"/"+b)}
|
||||
function Tb(){if("object"===typeof crypto&&"function"===typeof crypto.getRandomValues){var a=new Uint8Array(1);return function(){crypto.getRandomValues(a);return a[0]}}if(h)try{var b=require("crypto");return function(){return b.randomBytes(1)[0]}}catch(c){}return function(){n("randomDevice")}}
|
||||
function Ub(){for(var a="",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:O.cwd();if("string"!==typeof b)throw new TypeError("Arguments to path.resolve must be strings");if(!b)return"";a=b+"/"+a;b="/"===b.charAt(0)}a=Ob(a.split("/").filter(function(d){return!!d}),!b).join("/");return(b?"/":"")+a||"."}
|
||||
function Vb(a,b){function c(k){for(var m=0;m<k.length&&""===k[m];m++);for(var r=k.length-1;0<=r&&""===k[r];r--);return m>r?[]:k.slice(m,r-m+1)}a=Ub(a).substr(1);b=Ub(b).substr(1);a=c(a.split("/"));b=c(b.split("/"));for(var d=Math.min(a.length,b.length),e=d,g=0;g<d;g++)if(a[g]!==b[g]){e=g;break}d=[];for(g=e;g<a.length;g++)d.push("..");d=d.concat(b.slice(e));return d.join("/")}var Wb=[];function Xb(a,b){Wb[a]={input:[],output:[],Yf:b};O.dh(a,Yb)}
|
||||
var Yb={open:function(a){var b=Wb[a.node.rdev];if(!b)throw new O.af(43);a.tty=b;a.seekable=!1},close:function(a){a.tty.Yf.flush(a.tty)},flush:function(a){a.tty.Yf.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.Yf.xh)throw new O.af(60);for(var e=0,g=0;g<d;g++){try{var k=a.tty.Yf.xh(a.tty)}catch(m){throw new O.af(29);}if(void 0===k&&0===e)throw new O.af(6);if(null===k||void 0===k)break;e++;b[c+g]=k}e&&(a.node.timestamp=Date.now());return e},write:function(a,b,c,d){if(!a.tty||!a.tty.Yf.Zg)throw new O.af(60);
|
||||
try{for(var e=0;e<d;e++)a.tty.Yf.Zg(a.tty,b[c+e])}catch(g){throw new O.af(29);}d&&(a.node.timestamp=Date.now());return e}},$b={xh:function(a){if(!a.input.length){var b=null;if(h){var c=Buffer.Sf?Buffer.Sf(256):new Buffer(256),d=0;try{d=ta.readSync(process.stdin.fd,c,0,256,null)}catch(e){if(-1!=e.toString().indexOf("EOF"))d=0;else throw e;}0<d?b=c.slice(0,d).toString("utf-8"):b=null}else"undefined"!=typeof window&&"function"==typeof window.prompt?(b=window.prompt("Input: "),null!==b&&(b+="\n")):"function"==
|
||||
typeof readline&&(b=readline(),null!==b&&(b+="\n"));if(!b)return null;a.input=Zb(b,!0)}return a.input.shift()},Zg:function(a,b){null===b||10===b?(ya(Ja(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&(ya(Ja(a.output,0)),a.output=[])}},dc={Zg:function(a,b){null===b||10===b?(u(Ja(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&(u(Ja(a.output,0)),a.output=[])}},P={Df:null,jf:function(){return P.createNode(null,
|
||||
"/",16895,0)},createNode:function(a,b,c,d){if(O.si(c)||O.isFIFO(c))throw new O.af(63);P.Df||(P.Df={dir:{node:{Af:P.cf.Af,nf:P.cf.nf,lookup:P.cf.lookup,Ff:P.cf.Ff,rename:P.cf.rename,unlink:P.cf.unlink,rmdir:P.cf.rmdir,readdir:P.cf.readdir,symlink:P.cf.symlink},stream:{tf:P.df.tf}},file:{node:{Af:P.cf.Af,nf:P.cf.nf},stream:{tf:P.df.tf,read:P.df.read,write:P.df.write,fg:P.df.fg,Wf:P.df.Wf,Xf:P.df.Xf}},link:{node:{Af:P.cf.Af,nf:P.cf.nf,readlink:P.cf.readlink},stream:{}},lh:{node:{Af:P.cf.Af,nf:P.cf.nf},
|
||||
stream:O.$h}});c=O.createNode(a,b,c,d);O.kf(c.mode)?(c.cf=P.Df.dir.node,c.df=P.Df.dir.stream,c.bf={}):O.isFile(c.mode)?(c.cf=P.Df.file.node,c.df=P.Df.file.stream,c.gf=0,c.bf=null):O.Mf(c.mode)?(c.cf=P.Df.link.node,c.df=P.Df.link.stream):O.hg(c.mode)&&(c.cf=P.Df.lh.node,c.df=P.Df.lh.stream);c.timestamp=Date.now();a&&(a.bf[b]=c);return c},gj:function(a){if(a.bf&&a.bf.subarray){for(var b=[],c=0;c<a.gf;++c)b.push(a.bf[c]);return b}return a.bf},hj:function(a){return a.bf?a.bf.subarray?a.bf.subarray(0,
|
||||
a.gf):new Uint8Array(a.bf):new Uint8Array(0)},sh:function(a,b){var c=a.bf?a.bf.length:0;c>=b||(b=Math.max(b,c*(1048576>c?2:1.125)>>>0),0!=c&&(b=Math.max(b,256)),c=a.bf,a.bf=new Uint8Array(b),0<a.gf&&a.bf.set(c.subarray(0,a.gf),0))},Ji:function(a,b){if(a.gf!=b)if(0==b)a.bf=null,a.gf=0;else{if(!a.bf||a.bf.subarray){var c=a.bf;a.bf=new Uint8Array(b);c&&a.bf.set(c.subarray(0,Math.min(b,a.gf)))}else if(a.bf||(a.bf=[]),a.bf.length>b)a.bf.length=b;else for(;a.bf.length<b;)a.bf.push(0);a.gf=b}},cf:{Af:function(a){var b=
|
||||
{};b.dev=O.hg(a.mode)?a.id:1;b.ino=a.id;b.mode=a.mode;b.nlink=1;b.uid=0;b.gid=0;b.rdev=a.rdev;O.kf(a.mode)?b.size=4096:O.isFile(a.mode)?b.size=a.gf:O.Mf(a.mode)?b.size=a.link.length:b.size=0;b.atime=new Date(a.timestamp);b.mtime=new Date(a.timestamp);b.ctime=new Date(a.timestamp);b.Xh=4096;b.blocks=Math.ceil(b.size/b.Xh);return b},nf:function(a,b){void 0!==b.mode&&(a.mode=b.mode);void 0!==b.timestamp&&(a.timestamp=b.timestamp);void 0!==b.size&&P.Ji(a,b.size)},lookup:function(){throw O.Qg[44];},Ff:function(a,
|
||||
b,c,d){return P.createNode(a,b,c,d)},rename:function(a,b,c){if(O.kf(a.mode)){try{var d=O.Bf(b,c)}catch(g){}if(d)for(var e in d.bf)throw new O.af(55);}delete a.parent.bf[a.name];a.name=c;b.bf[c]=a;a.parent=b},unlink:function(a,b){delete a.bf[b]},rmdir:function(a,b){var c=O.Bf(a,b),d;for(d in c.bf)throw new O.af(55);delete a.bf[b]},readdir:function(a){var b=[".",".."],c;for(c in a.bf)a.bf.hasOwnProperty(c)&&b.push(c);return b},symlink:function(a,b,c){a=P.createNode(a,b,41471,0);a.link=c;return a},readlink:function(a){if(!O.Mf(a.mode))throw new O.af(28);
|
||||
return a.link}},df:{read:function(a,b,c,d,e){var g=a.node.bf;if(e>=a.node.gf)return 0;a=Math.min(a.node.gf-e,d);if(8<a&&g.subarray)b.set(g.subarray(e,e+a),c);else for(d=0;d<a;d++)b[c+d]=g[e+d];return a},write:function(a,b,c,d,e,g){if(!d)return 0;a=a.node;a.timestamp=Date.now();if(b.subarray&&(!a.bf||a.bf.subarray)){if(g)return a.bf=b.subarray(c,c+d),a.gf=d;if(0===a.gf&&0===e)return a.bf=b.slice(c,c+d),a.gf=d;if(e+d<=a.gf)return a.bf.set(b.subarray(c,c+d),e),d}P.sh(a,e+d);if(a.bf.subarray&&b.subarray)a.bf.set(b.subarray(c,
|
||||
c+d),e);else for(g=0;g<d;g++)a.bf[e+g]=b[c+g];a.gf=Math.max(a.gf,e+d);return d},tf:function(a,b,c){1===c?b+=a.position:2===c&&O.isFile(a.node.mode)&&(b+=a.node.gf);if(0>b)throw new O.af(28);return b},fg:function(a,b,c){P.sh(a.node,b+c);a.node.gf=Math.max(a.node.gf,b+c)},Wf:function(a,b,c,d,e,g){assert(0===b);if(!O.isFile(a.node.mode))throw new O.af(43);a=a.node.bf;if(g&2||a.buffer!==oa){if(0<d||d+c<a.length)a.subarray?a=a.subarray(d,d+c):a=Array.prototype.slice.call(a,d,d+c);d=!0;g=16384*Math.ceil(c/
|
||||
16384);for(b=Ma(g);c<g;)y[b+c++]=0;c=b;if(!c)throw new O.af(48);y.set(a,c)}else d=!1,c=a.byteOffset;return{Hi:c,Jg:d}},Xf:function(a,b,c,d,e){if(!O.isFile(a.node.mode))throw new O.af(43);if(e&2)return 0;P.df.write(a,b,0,d,c,!1);return 0}}},O={root:null,mg:[],ph:{},streams:[],Ai:1,Cf:null,oh:"/",Tg:!1,Bh:!0,mf:{},Mh:{Gh:{Rh:1,Sh:2}},af:null,Qg:{},ii:null,Cg:0,kj:function(a){if(!(a instanceof O.af)){a:{var b=Error();if(!b.stack){try{throw Error();}catch(c){b=c}if(!b.stack){b="(no stack trace available)";
|
||||
break a}}b=b.stack.toString()}f.extraStackTrace&&(b+="\n"+f.extraStackTrace());b=ob(b);throw a+" : "+b;}return Eb(a.ef)},ff:function(a,b){a=Ub(O.cwd(),a);b=b||{};if(!a)return{path:"",node:null};var c={Og:!0,ah:0},d;for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8<b.ah)throw new O.af(32);a=Ob(a.split("/").filter(function(k){return!!k}),!1);var e=O.root;c="/";for(d=0;d<a.length;d++){var g=d===a.length-1;if(g&&b.parent)break;e=O.Bf(e,a[d]);c=Sb(c,a[d]);O.Nf(e)&&(!g||g&&b.Og)&&(e=e.lg.root);if(!g||b.wf)for(g=
|
||||
0;O.Mf(e.mode);)if(e=O.readlink(c),c=Ub(Qb(c),e),e=O.ff(c,{ah:b.ah}).node,40<g++)throw new O.af(32);}return{path:c,node:e}},If:function(a){for(var b;;){if(O.wg(a))return a=a.jf.Eh,b?"/"!==a[a.length-1]?a+"/"+b:a+b:a;b=b?a.name+"/"+b:a.name;a=a.parent}},Sg:function(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return(a+c>>>0)%O.Cf.length},zh:function(a){var b=O.Sg(a.parent.id,a.name);a.Pf=O.Cf[b];O.Cf[b]=a},Ah:function(a){var b=O.Sg(a.parent.id,a.name);if(O.Cf[b]===a)O.Cf[b]=a.Pf;
|
||||
else for(b=O.Cf[b];b;){if(b.Pf===a){b.Pf=a.Pf;break}b=b.Pf}},Bf:function(a,b){var c=O.yi(a);if(c)throw new O.af(c,a);for(c=O.Cf[O.Sg(a.id,b)];c;c=c.Pf){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return O.lookup(a,b)},createNode:function(a,b,c,d){a=new O.Oh(a,b,c,d);O.zh(a);return a},Ng:function(a){O.Ah(a)},wg:function(a){return a===a.parent},Nf:function(a){return!!a.lg},isFile:function(a){return 32768===(a&61440)},kf:function(a){return 16384===(a&61440)},Mf:function(a){return 40960===(a&61440)},
|
||||
hg:function(a){return 8192===(a&61440)},si:function(a){return 24576===(a&61440)},isFIFO:function(a){return 4096===(a&61440)},isSocket:function(a){return 49152===(a&49152)},ji:{r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218},Dh:function(a){var b=O.ji[a];if("undefined"===typeof b)throw Error("Unknown file open mode: "+a);return b},th:function(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b},Jf:function(a,b){if(O.Bh)return 0;
|
||||
if(-1===b.indexOf("r")||a.mode&292){if(-1!==b.indexOf("w")&&!(a.mode&146)||-1!==b.indexOf("x")&&!(a.mode&73))return 2}else return 2;return 0},yi:function(a){var b=O.Jf(a,"x");return b?b:a.cf.lookup?0:2},Yg:function(a,b){try{return O.Bf(a,b),20}catch(c){}return O.Jf(a,"wx")},xg:function(a,b,c){try{var d=O.Bf(a,b)}catch(e){return e.ef}if(a=O.Jf(a,"wx"))return a;if(c){if(!O.kf(d.mode))return 54;if(O.wg(d)||O.If(d)===O.cwd())return 10}else if(O.kf(d.mode))return 31;return 0},zi:function(a,b){return a?
|
||||
O.Mf(a.mode)?32:O.kf(a.mode)&&("r"!==O.th(b)||b&512)?31:O.Jf(a,O.th(b)):44},Qh:4096,Bi:function(a,b){b=b||O.Qh;for(a=a||0;a<=b;a++)if(!O.streams[a])return a;throw new O.af(33);},zf:function(a){return O.streams[a]},nh:function(a,b,c){O.Hg||(O.Hg=function(){},O.Hg.prototype={object:{get:function(){return this.node},set:function(g){this.node=g}}});var d=new O.Hg,e;for(e in a)d[e]=a[e];a=d;b=O.Bi(b,c);a.fd=b;return O.streams[b]=a},ai:function(a){O.streams[a]=null},$h:{open:function(a){a.df=O.ki(a.node.rdev).df;
|
||||
a.df.open&&a.df.open(a)},tf:function(){throw new O.af(70);}},Wg:function(a){return a>>8},oj:function(a){return a&255},Of:function(a,b){return a<<8|b},dh:function(a,b){O.ph[a]={df:b}},ki:function(a){return O.ph[a]},wh:function(a){var b=[];for(a=[a];a.length;){var c=a.pop();b.push(c);a.push.apply(a,c.mg)}return b},Kh:function(a,b){function c(k){O.Cg--;return b(k)}function d(k){if(k){if(!d.gi)return d.gi=!0,c(k)}else++g>=e.length&&c(null)}"function"===typeof a&&(b=a,a=!1);O.Cg++;1<O.Cg&&u("warning: "+
|
||||
O.Cg+" FS.syncfs operations in flight at once, probably just doing extra work");var e=O.wh(O.root.jf),g=0;e.forEach(function(k){if(!k.type.Kh)return d(null);k.type.Kh(k,a,d)})},jf:function(a,b,c){var d="/"===c,e=!c;if(d&&O.root)throw new O.af(10);if(!d&&!e){var g=O.ff(c,{Og:!1});c=g.path;g=g.node;if(O.Nf(g))throw new O.af(10);if(!O.kf(g.mode))throw new O.af(54);}b={type:a,tj:b,Eh:c,mg:[]};a=a.jf(b);a.jf=b;b.root=a;d?O.root=a:g&&(g.lg=b,g.jf&&g.jf.mg.push(b));return a},zj:function(a){a=O.ff(a,{Og:!1});
|
||||
if(!O.Nf(a.node))throw new O.af(28);a=a.node;var b=a.lg,c=O.wh(b);Object.keys(O.Cf).forEach(function(d){for(d=O.Cf[d];d;){var e=d.Pf;-1!==c.indexOf(d.jf)&&O.Ng(d);d=e}});a.lg=null;a.jf.mg.splice(a.jf.mg.indexOf(b),1)},lookup:function(a,b){return a.cf.lookup(a,b)},Ff:function(a,b,c){var d=O.ff(a,{parent:!0}).node;a=Rb(a);if(!a||"."===a||".."===a)throw new O.af(28);var e=O.Yg(d,a);if(e)throw new O.af(e);if(!d.cf.Ff)throw new O.af(63);return d.cf.Ff(d,a,b,c)},create:function(a,b){return O.Ff(a,(void 0!==
|
||||
b?b:438)&4095|32768,0)},mkdir:function(a,b){return O.Ff(a,(void 0!==b?b:511)&1023|16384,0)},qj:function(a,b){a=a.split("/");for(var c="",d=0;d<a.length;++d)if(a[d]){c+="/"+a[d];try{O.mkdir(c,b)}catch(e){if(20!=e.ef)throw e;}}},yg:function(a,b,c){"undefined"===typeof c&&(c=b,b=438);return O.Ff(a,b|8192,c)},symlink:function(a,b){if(!Ub(a))throw new O.af(44);var c=O.ff(b,{parent:!0}).node;if(!c)throw new O.af(44);b=Rb(b);var d=O.Yg(c,b);if(d)throw new O.af(d);if(!c.cf.symlink)throw new O.af(63);return c.cf.symlink(c,
|
||||
b,a)},rename:function(a,b){var c=Qb(a),d=Qb(b),e=Rb(a),g=Rb(b);var k=O.ff(a,{parent:!0});var m=k.node;k=O.ff(b,{parent:!0});k=k.node;if(!m||!k)throw new O.af(44);if(m.jf!==k.jf)throw new O.af(75);var r=O.Bf(m,e);d=Vb(a,d);if("."!==d.charAt(0))throw new O.af(28);d=Vb(b,c);if("."!==d.charAt(0))throw new O.af(55);try{var q=O.Bf(k,g)}catch(t){}if(r!==q){c=O.kf(r.mode);if(e=O.xg(m,e,c))throw new O.af(e);if(e=q?O.xg(k,g,c):O.Yg(k,g))throw new O.af(e);if(!m.cf.rename)throw new O.af(63);if(O.Nf(r)||q&&O.Nf(q))throw new O.af(10);
|
||||
if(k!==m&&(e=O.Jf(m,"w")))throw new O.af(e);try{O.mf.willMovePath&&O.mf.willMovePath(a,b)}catch(t){u("FS.trackingDelegate['willMovePath']('"+a+"', '"+b+"') threw an exception: "+t.message)}O.Ah(r);try{m.cf.rename(r,k,g)}catch(t){throw t;}finally{O.zh(r)}try{if(O.mf.onMovePath)O.mf.onMovePath(a,b)}catch(t){u("FS.trackingDelegate['onMovePath']('"+a+"', '"+b+"') threw an exception: "+t.message)}}},rmdir:function(a){var b=O.ff(a,{parent:!0}).node,c=Rb(a),d=O.Bf(b,c),e=O.xg(b,c,!0);if(e)throw new O.af(e);
|
||||
if(!b.cf.rmdir)throw new O.af(63);if(O.Nf(d))throw new O.af(10);try{O.mf.willDeletePath&&O.mf.willDeletePath(a)}catch(g){u("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+g.message)}b.cf.rmdir(b,c);O.Ng(d);try{if(O.mf.onDeletePath)O.mf.onDeletePath(a)}catch(g){u("FS.trackingDelegate['onDeletePath']('"+a+"') threw an exception: "+g.message)}},readdir:function(a){a=O.ff(a,{wf:!0}).node;if(!a.cf.readdir)throw new O.af(54);return a.cf.readdir(a)},unlink:function(a){var b=O.ff(a,
|
||||
{parent:!0}).node,c=Rb(a),d=O.Bf(b,c),e=O.xg(b,c,!1);if(e)throw new O.af(e);if(!b.cf.unlink)throw new O.af(63);if(O.Nf(d))throw new O.af(10);try{O.mf.willDeletePath&&O.mf.willDeletePath(a)}catch(g){u("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+g.message)}b.cf.unlink(b,c);O.Ng(d);try{if(O.mf.onDeletePath)O.mf.onDeletePath(a)}catch(g){u("FS.trackingDelegate['onDeletePath']('"+a+"') threw an exception: "+g.message)}},readlink:function(a){a=O.ff(a).node;if(!a)throw new O.af(44);
|
||||
if(!a.cf.readlink)throw new O.af(28);return Ub(O.If(a.parent),a.cf.readlink(a))},stat:function(a,b){a=O.ff(a,{wf:!b}).node;if(!a)throw new O.af(44);if(!a.cf.Af)throw new O.af(63);return a.cf.Af(a)},lstat:function(a){return O.stat(a,!0)},chmod:function(a,b,c){var d;"string"===typeof a?d=O.ff(a,{wf:!c}).node:d=a;if(!d.cf.nf)throw new O.af(63);d.cf.nf(d,{mode:b&4095|d.mode&-4096,timestamp:Date.now()})},lchmod:function(a,b){O.chmod(a,b,!0)},fchmod:function(a,b){a=O.zf(a);if(!a)throw new O.af(8);O.chmod(a.node,
|
||||
b)},chown:function(a,b,c,d){var e;"string"===typeof a?e=O.ff(a,{wf:!d}).node:e=a;if(!e.cf.nf)throw new O.af(63);e.cf.nf(e,{timestamp:Date.now()})},lchown:function(a,b,c){O.chown(a,b,c,!0)},fchown:function(a,b,c){a=O.zf(a);if(!a)throw new O.af(8);O.chown(a.node,b,c)},truncate:function(a,b){if(0>b)throw new O.af(28);var c;"string"===typeof a?c=O.ff(a,{wf:!0}).node:c=a;if(!c.cf.nf)throw new O.af(63);if(O.kf(c.mode))throw new O.af(31);if(!O.isFile(c.mode))throw new O.af(28);if(a=O.Jf(c,"w"))throw new O.af(a);
|
||||
c.cf.nf(c,{size:b,timestamp:Date.now()})},fj:function(a,b){a=O.zf(a);if(!a)throw new O.af(8);if(0===(a.flags&2097155))throw new O.af(28);O.truncate(a.node,b)},Aj:function(a,b,c){a=O.ff(a,{wf:!0}).node;a.cf.nf(a,{timestamp:Math.max(b,c)})},open:function(a,b,c,d,e){if(""===a)throw new O.af(44);b="string"===typeof b?O.Dh(b):b;c=b&64?("undefined"===typeof c?438:c)&4095|32768:0;if("object"===typeof a)var g=a;else{a=Pb(a);try{g=O.ff(a,{wf:!(b&131072)}).node}catch(m){}}var k=!1;if(b&64)if(g){if(b&128)throw new O.af(20);
|
||||
}else g=O.Ff(a,c,0),k=!0;if(!g)throw new O.af(44);O.hg(g.mode)&&(b&=-513);if(b&65536&&!O.kf(g.mode))throw new O.af(54);if(!k&&(c=O.zi(g,b)))throw new O.af(c);b&512&&O.truncate(g,0);b&=-131713;d=O.nh({node:g,path:O.If(g),flags:b,seekable:!0,position:0,df:g.df,Wi:[],error:!1},d,e);d.df.open&&d.df.open(d);!f.logReadFiles||b&1||(O.$g||(O.$g={}),a in O.$g||(O.$g[a]=1,u("FS.trackingDelegate error on read file: "+a)));try{O.mf.onOpenFile&&(e=0,1!==(b&2097155)&&(e|=O.Mh.Gh.Rh),0!==(b&2097155)&&(e|=O.Mh.Gh.Sh),
|
||||
O.mf.onOpenFile(a,e))}catch(m){u("FS.trackingDelegate['onOpenFile']('"+a+"', flags) threw an exception: "+m.message)}return d},close:function(a){if(O.ig(a))throw new O.af(8);a.Lf&&(a.Lf=null);try{a.df.close&&a.df.close(a)}catch(b){throw b;}finally{O.ai(a.fd)}a.fd=null},ig:function(a){return null===a.fd},tf:function(a,b,c){if(O.ig(a))throw new O.af(8);if(!a.seekable||!a.df.tf)throw new O.af(70);if(0!=c&&1!=c&&2!=c)throw new O.af(28);a.position=a.df.tf(a,b,c);a.Wi=[];return a.position},read:function(a,
|
||||
b,c,d,e){if(0>d||0>e)throw new O.af(28);if(O.ig(a))throw new O.af(8);if(1===(a.flags&2097155))throw new O.af(8);if(O.kf(a.node.mode))throw new O.af(31);if(!a.df.read)throw new O.af(28);var g="undefined"!==typeof e;if(!g)e=a.position;else if(!a.seekable)throw new O.af(70);b=a.df.read(a,b,c,d,e);g||(a.position+=b);return b},write:function(a,b,c,d,e,g){if(0>d||0>e)throw new O.af(28);if(O.ig(a))throw new O.af(8);if(0===(a.flags&2097155))throw new O.af(8);if(O.kf(a.node.mode))throw new O.af(31);if(!a.df.write)throw new O.af(28);
|
||||
a.seekable&&a.flags&1024&&O.tf(a,0,2);var k="undefined"!==typeof e;if(!k)e=a.position;else if(!a.seekable)throw new O.af(70);b=a.df.write(a,b,c,d,e,g);k||(a.position+=b);try{if(a.path&&O.mf.onWriteToFile)O.mf.onWriteToFile(a.path)}catch(m){u("FS.trackingDelegate['onWriteToFile']('"+a.path+"') threw an exception: "+m.message)}return b},fg:function(a,b,c){if(O.ig(a))throw new O.af(8);if(0>b||0>=c)throw new O.af(28);if(0===(a.flags&2097155))throw new O.af(8);if(!O.isFile(a.node.mode)&&!O.kf(a.node.mode))throw new O.af(43);
|
||||
if(!a.df.fg)throw new O.af(138);a.df.fg(a,b,c)},Wf:function(a,b,c,d,e,g){if(0!==(e&2)&&0===(g&2)&&2!==(a.flags&2097155))throw new O.af(2);if(1===(a.flags&2097155))throw new O.af(2);if(!a.df.Wf)throw new O.af(43);return a.df.Wf(a,b,c,d,e,g)},Xf:function(a,b,c,d,e){return a&&a.df.Xf?a.df.Xf(a,b,c,d,e):0},sj:function(){return 0},Uf:function(a,b,c){if(!a.df.Uf)throw new O.af(59);return a.df.Uf(a,b,c)},readFile:function(a,b){b=b||{};b.flags=b.flags||"r";b.encoding=b.encoding||"binary";if("utf8"!==b.encoding&&
|
||||
"binary"!==b.encoding)throw Error('Invalid encoding type "'+b.encoding+'"');var c,d=O.open(a,b.flags);a=O.stat(a).size;var e=new Uint8Array(a);O.read(d,e,0,a,0);"utf8"===b.encoding?c=Ja(e,0):"binary"===b.encoding&&(c=e);O.close(d);return c},writeFile:function(a,b,c){c=c||{};c.flags=c.flags||"w";a=O.open(a,c.flags,c.mode);if("string"===typeof b){var d=new Uint8Array(Ka(b)+1);b=Ia(b,d,0,d.length);O.write(a,d,0,b,void 0,c.Zh)}else if(ArrayBuffer.isView(b))O.write(a,b,0,b.byteLength,void 0,c.Zh);else throw Error("Unsupported data type");
|
||||
O.close(a)},cwd:function(){return O.oh},chdir:function(a){a=O.ff(a,{wf:!0});if(null===a.node)throw new O.af(44);if(!O.kf(a.node.mode))throw new O.af(54);var b=O.Jf(a.node,"x");if(b)throw new O.af(b);O.oh=a.path},ci:function(){O.mkdir("/tmp");O.mkdir("/home");O.mkdir("/home/web_user")},bi:function(){O.mkdir("/dev");O.dh(O.Of(1,3),{read:function(){return 0},write:function(b,c,d,e){return e}});O.yg("/dev/null",O.Of(1,3));Xb(O.Of(5,0),$b);Xb(O.Of(6,0),dc);O.yg("/dev/tty",O.Of(5,0));O.yg("/dev/tty1",O.Of(6,
|
||||
0));var a=Tb();O.Hf("/dev","random",a);O.Hf("/dev","urandom",a);O.mkdir("/dev/shm");O.mkdir("/dev/shm/tmp")},ei:function(){O.mkdir("/proc");O.mkdir("/proc/self");O.mkdir("/proc/self/fd");O.jf({jf:function(){var a=O.createNode("/proc/self","fd",16895,73);a.cf={lookup:function(b,c){var d=O.zf(+c);if(!d)throw new O.af(8);b={parent:null,jf:{Eh:"fake"},cf:{readlink:function(){return d.path}}};return b.parent=b}};return a}},{},"/proc/self/fd")},fi:function(){f.stdin?O.Hf("/dev","stdin",f.stdin):O.symlink("/dev/tty",
|
||||
"/dev/stdin");f.stdout?O.Hf("/dev","stdout",null,f.stdout):O.symlink("/dev/tty","/dev/stdout");f.stderr?O.Hf("/dev","stderr",null,f.stderr):O.symlink("/dev/tty1","/dev/stderr");O.open("/dev/stdin","r");O.open("/dev/stdout","w");O.open("/dev/stderr","w")},rh:function(){O.af||(O.af=function(a,b){this.node=b;this.Ki=function(c){this.ef=c};this.Ki(a);this.message="FS error"},O.af.prototype=Error(),O.af.prototype.constructor=O.af,[44].forEach(function(a){O.Qg[a]=new O.af(a);O.Qg[a].stack="<generic error, no stack>"}))},
|
||||
Ni:function(){O.rh();O.Cf=Array(4096);O.jf(P,{},"/");O.ci();O.bi();O.ei();O.ii={MEMFS:P}},gg:function(a,b,c){O.gg.Tg=!0;O.rh();f.stdin=a||f.stdin;f.stdout=b||f.stdout;f.stderr=c||f.stderr;O.fi()},quit:function(){O.gg.Tg=!1;var a=f._fflush;a&&a(0);for(a=0;a<O.streams.length;a++){var b=O.streams[a];b&&O.close(b)}},Rg:function(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c},ej:function(a,b){a=O.Lg(a,b);if(a.exists)return a.object;Eb(a.error);return null},Lg:function(a,b){try{var c=O.ff(a,{wf:!b});a=c.path}catch(e){}var d=
|
||||
{wg:!1,exists:!1,error:0,name:null,path:null,object:null,Ci:!1,Ei:null,Di:null};try{c=O.ff(a,{parent:!0}),d.Ci=!0,d.Ei=c.path,d.Di=c.node,d.name=Rb(a),c=O.ff(a,{wf:!b}),d.exists=!0,d.path=c.path,d.object=c.node,d.name=c.node.name,d.wg="/"===c.path}catch(e){d.error=e.ef}return d},cj:function(a,b){a="string"===typeof a?a:O.If(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=Sb(a,c);try{O.mkdir(d)}catch(e){}a=d}}return d},di:function(a,b,c,d,e){a=Sb("string"===typeof a?a:O.If(a),
|
||||
b);return O.create(a,O.Rg(d,e))},mh:function(a,b,c,d,e,g){a=b?Sb("string"===typeof a?a:O.If(a),b):a;d=O.Rg(d,e);e=O.create(a,d);if(c){if("string"===typeof c){a=Array(c.length);b=0;for(var k=c.length;b<k;++b)a[b]=c.charCodeAt(b);c=a}O.chmod(e,d|146);a=O.open(e,"w");O.write(a,c,0,c.length,0,g);O.close(a);O.chmod(e,d)}return e},Hf:function(a,b,c,d){a=Sb("string"===typeof a?a:O.If(a),b);b=O.Rg(!!c,!!d);O.Hf.Wg||(O.Hf.Wg=64);var e=O.Of(O.Hf.Wg++,0);O.dh(e,{open:function(g){g.seekable=!1},close:function(){d&&
|
||||
d.buffer&&d.buffer.length&&d(10)},read:function(g,k,m,r){for(var q=0,t=0;t<r;t++){try{var w=c()}catch(B){throw new O.af(29);}if(void 0===w&&0===q)throw new O.af(6);if(null===w||void 0===w)break;q++;k[m+t]=w}q&&(g.node.timestamp=Date.now());return q},write:function(g,k,m,r){for(var q=0;q<r;q++)try{d(k[m+q])}catch(t){throw new O.af(29);}r&&(g.node.timestamp=Date.now());return q}});return O.yg(a,b,e)},uh:function(a){if(a.Ug||a.ti||a.link||a.bf)return!0;var b=!0;if("undefined"!==typeof XMLHttpRequest)throw Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
|
||||
if(ra)try{a.bf=Zb(ra(a.url),!0),a.gf=a.bf.length}catch(c){b=!1}else throw Error("Cannot load without read() or XMLHttpRequest.");b||Eb(29);return b},bj:function(a,b,c,d,e){function g(){this.Vg=!1;this.Sf=[]}g.prototype.get=function(q){if(!(q>this.length-1||0>q)){var t=q%this.chunkSize;return this.yh(q/this.chunkSize|0)[t]}};g.prototype.Wh=function(q){this.yh=q};g.prototype.kh=function(){var q=new XMLHttpRequest;q.open("HEAD",c,!1);q.send(null);if(!(200<=q.status&&300>q.status||304===q.status))throw Error("Couldn't load "+
|
||||
c+". Status: "+q.status);var t=Number(q.getResponseHeader("Content-length")),w,B=(w=q.getResponseHeader("Accept-Ranges"))&&"bytes"===w;q=(w=q.getResponseHeader("Content-Encoding"))&&"gzip"===w;var p=1048576;B||(p=t);var x=this;x.Wh(function(z){var I=z*p,W=(z+1)*p-1;W=Math.min(W,t-1);if("undefined"===typeof x.Sf[z]){var db=x.Sf;if(I>W)throw Error("invalid range ("+I+", "+W+") or no bytes requested!");if(W>t-1)throw Error("only "+t+" bytes available! programmer error!");var K=new XMLHttpRequest;K.open("GET",
|
||||
c,!1);t!==p&&K.setRequestHeader("Range","bytes="+I+"-"+W);"undefined"!=typeof Uint8Array&&(K.responseType="arraybuffer");K.overrideMimeType&&K.overrideMimeType("text/plain; charset=x-user-defined");K.send(null);if(!(200<=K.status&&300>K.status||304===K.status))throw Error("Couldn't load "+c+". Status: "+K.status);I=void 0!==K.response?new Uint8Array(K.response||[]):Zb(K.responseText||"",!0);db[z]=I}if("undefined"===typeof x.Sf[z])throw Error("doXHR failed!");return x.Sf[z]});if(q||!t)p=t=1,p=t=this.yh(0).length,
|
||||
ya("LazyFiles on gzip forces download of the whole file when length is accessed");this.Uh=t;this.Th=p;this.Vg=!0};if("undefined"!==typeof XMLHttpRequest){if(!la)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var k=new g;Object.defineProperties(k,{length:{get:function(){this.Vg||this.kh();return this.Uh}},chunkSize:{get:function(){this.Vg||this.kh();return this.Th}}});k={Ug:!1,bf:k}}else k={Ug:!1,url:c};var m=O.di(a,b,k,d,
|
||||
e);k.bf?m.bf=k.bf:k.url&&(m.bf=null,m.url=k.url);Object.defineProperties(m,{gf:{get:function(){return this.bf.length}}});var r={};Object.keys(m.df).forEach(function(q){var t=m.df[q];r[q]=function(){if(!O.uh(m))throw new O.af(29);return t.apply(null,arguments)}});r.read=function(q,t,w,B,p){if(!O.uh(m))throw new O.af(29);q=q.node.bf;if(p>=q.length)return 0;B=Math.min(q.length-p,B);if(q.slice)for(var x=0;x<B;x++)t[w+x]=q[p+x];else for(x=0;x<B;x++)t[w+x]=q.get(p+x);return B};m.df=r;return m},dj:function(a,
|
||||
b,c,d,e,g,k,m,r,q){function t(B){function p(z){q&&q();m||O.mh(a,b,z,d,e,r);g&&g();fb()}var x=!1;f.preloadPlugins.forEach(function(z){!x&&z.canHandle(w)&&(z.handle(B,w,p,function(){k&&k();fb()}),x=!0)});x||p(B)}ec.gg();var w=b?Ub(Sb(a,b)):a;eb();"string"==typeof c?ec.Xi(c,function(B){t(B)},k):t(c)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},gh:function(){return"EM_FS_"+window.location.pathname},hh:20,eg:"FILE_DATA",wj:function(a,b,
|
||||
c){b=b||function(){};c=c||function(){};var d=O.indexedDB();try{var e=d.open(O.gh(),O.hh)}catch(g){return c(g)}e.onupgradeneeded=function(){ya("creating db");e.result.createObjectStore(O.eg)};e.onsuccess=function(){var g=e.result.transaction([O.eg],"readwrite"),k=g.objectStore(O.eg),m=0,r=0,q=a.length;a.forEach(function(t){t=k.put(O.Lg(t).object.bf,t);t.onsuccess=function(){m++;m+r==q&&(0==r?b():c())};t.onerror=function(){r++;m+r==q&&(0==r?b():c())}});g.onerror=c};e.onerror=c},mj:function(a,b,c){b=
|
||||
b||function(){};c=c||function(){};var d=O.indexedDB();try{var e=d.open(O.gh(),O.hh)}catch(g){return c(g)}e.onupgradeneeded=c;e.onsuccess=function(){var g=e.result;try{var k=g.transaction([O.eg],"readonly")}catch(w){c(w);return}var m=k.objectStore(O.eg),r=0,q=0,t=a.length;a.forEach(function(w){var B=m.get(w);B.onsuccess=function(){O.Lg(w).exists&&O.unlink(w);O.mh(Qb(w),Rb(w),B.result,!0,!0,!0);r++;r+q==t&&(0==q?b():c())};B.onerror=function(){q++;r+q==t&&(0==q?b():c())}});k.onerror=c};e.onerror=c}},
|
||||
fc={};
|
||||
function hc(a,b,c){try{var d=a(b)}catch(e){if(e&&e.node&&Pb(b)!==Pb(O.If(e.node)))return-54;throw e;}E[c>>2]=d.dev;E[c+4>>2]=0;E[c+8>>2]=d.ino;E[c+12>>2]=d.mode;E[c+16>>2]=d.nlink;E[c+20>>2]=d.uid;E[c+24>>2]=d.gid;E[c+28>>2]=d.rdev;E[c+32>>2]=0;L=[d.size>>>0,(J=d.size,1<=+Math.abs(J)?0<J?(Math.min(+Math.floor(J/4294967296),4294967295)|0)>>>0:~~+Math.ceil((J-+(~~J>>>0))/4294967296)>>>0:0)];E[c+40>>2]=L[0];E[c+44>>2]=L[1];E[c+48>>2]=4096;E[c+52>>2]=d.blocks;E[c+56>>2]=d.atime.getTime()/1E3|0;E[c+60>>
|
||||
2]=0;E[c+64>>2]=d.mtime.getTime()/1E3|0;E[c+68>>2]=0;E[c+72>>2]=d.ctime.getTime()/1E3|0;E[c+76>>2]=0;L=[d.ino>>>0,(J=d.ino,1<=+Math.abs(J)?0<J?(Math.min(+Math.floor(J/4294967296),4294967295)|0)>>>0:~~+Math.ceil((J-+(~~J>>>0))/4294967296)>>>0:0)];E[c+80>>2]=L[0];E[c+84>>2]=L[1];return 0}var ic=void 0;function Q(){ic+=4;return E[ic-4>>2]}function jc(a){a=O.zf(a);if(!a)throw new O.af(8);return a}
|
||||
function kc(a,b,c,d,e){if(l)return N(3,1,a,b,c,d,e);try{e=0;for(var g=b?E[b>>2]:0,k=b?E[b+4>>2]:0,m=c?E[c>>2]:0,r=c?E[c+4>>2]:0,q=d?E[d>>2]:0,t=d?E[d+4>>2]:0,w=0,B=0,p=0,x=0,z=0,I=0,W=(b?E[b>>2]:0)|(c?E[c>>2]:0)|(d?E[d>>2]:0),db=(b?E[b+4>>2]:0)|(c?E[c+4>>2]:0)|(d?E[d+4>>2]:0),K=0;K<a;K++){var Y=1<<K%32;if(32>K?W&Y:db&Y){var ia=O.zf(K);if(!ia)throw new O.af(8);var na=5;ia.df.Zf&&(na=ia.df.Zf(ia));na&1&&(32>K?g&Y:k&Y)&&(32>K?w|=Y:B|=Y,e++);na&4&&(32>K?m&Y:r&Y)&&(32>K?p|=Y:x|=Y,e++);na&2&&(32>K?q&Y:
|
||||
t&Y)&&(32>K?z|=Y:I|=Y,e++)}}b&&(E[b>>2]=w,E[b+4>>2]=B);c&&(E[c>>2]=p,E[c+4>>2]=x);d&&(E[d>>2]=z,E[d+4>>2]=I);return e}catch(ua){return"undefined"!==typeof O&&ua instanceof O.af||n(ua),-ua.ef}}function lc(a,b){if(l)return N(4,1,a,b);try{a=C(a);if(b&-8)var c=-28;else{var d;(d=O.ff(a,{wf:!0}).node)?(a="",b&4&&(a+="r"),b&2&&(a+="w"),b&1&&(a+="x"),c=a&&O.Jf(d,a)?-2:0):c=-44}return c}catch(e){return"undefined"!==typeof O&&e instanceof O.af||n(e),-e.ef}}
|
||||
function mc(a,b,c){if(l)return N(5,1,a,b,c);ic=c;try{var d=jc(a);switch(b){case 0:var e=Q();return 0>e?-28:O.open(d.path,d.flags,0,e).fd;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=Q(),d.flags|=e,0;case 12:return e=Q(),Qa[e+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Eb(28),-1;default:return-28}}catch(g){return"undefined"!==typeof O&&g instanceof O.af||n(g),-g.ef}}
|
||||
function nc(a,b){if(l)return N(6,1,a,b);try{var c=jc(a);return hc(O.stat,c.path,b)}catch(d){return"undefined"!==typeof O&&d instanceof O.af||n(d),-d.ef}}
|
||||
function oc(a,b,c){if(l)return N(7,1,a,b,c);try{var d=jc(a);d.Lf||(d.Lf=O.readdir(d.path));a=0;for(var e=O.tf(d,0,1),g=Math.floor(e/280);g<d.Lf.length&&a+280<=c;){var k=d.Lf[g];if("."===k[0]){var m=1;var r=4}else{var q=O.Bf(d.node,k);m=q.id;r=O.hg(q.mode)?2:O.kf(q.mode)?4:O.Mf(q.mode)?10:8}L=[m>>>0,(J=m,1<=+Math.abs(J)?0<J?(Math.min(+Math.floor(J/4294967296),4294967295)|0)>>>0:~~+Math.ceil((J-+(~~J>>>0))/4294967296)>>>0:0)];E[b+a>>2]=L[0];E[b+a+4>>2]=L[1];L=[280*(g+1)>>>0,(J=280*(g+1),1<=+Math.abs(J)?
|
||||
0<J?(Math.min(+Math.floor(J/4294967296),4294967295)|0)>>>0:~~+Math.ceil((J-+(~~J>>>0))/4294967296)>>>0:0)];E[b+a+8>>2]=L[0];E[b+a+12>>2]=L[1];Qa[b+a+16>>1]=280;y[b+a+18>>0]=r;Ia(k,v,b+a+19,256);a+=280;g+=1}O.tf(d,280*g,0);return a}catch(t){return"undefined"!==typeof O&&t instanceof O.af||n(t),-t.ef}}function pc(a,b){if(l)return N(8,1,a,b);try{return qc(b,0,136),E[b>>2]=1,E[b+4>>2]=2,E[b+8>>2]=3,E[b+12>>2]=4,0}catch(c){return"undefined"!==typeof O&&c instanceof O.af||n(c),-c.ef}}
|
||||
function rc(a,b,c){if(l)return N(9,1,a,b,c);ic=c;try{var d=jc(a);switch(b){case 21509:case 21505:return d.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return d.tty?0:-59;case 21519:if(!d.tty)return-59;var e=Q();return E[e>>2]=0;case 21520:return d.tty?-28:-59;case 21531:return e=Q(),O.Uf(d,b,e);case 21523:return d.tty?0:-59;case 21524:return d.tty?0:-59;default:n("bad ioctl syscall "+b)}}catch(g){return"undefined"!==typeof O&&g instanceof O.af||n(g),-g.ef}}
|
||||
function sc(a,b){if(l)return N(10,1,a,b);try{return a=C(a),hc(O.lstat,a,b)}catch(c){return"undefined"!==typeof O&&c instanceof O.af||n(c),-c.ef}}function tc(a,b){if(l)return N(11,1,a,b);try{return a=C(a),a=Pb(a),"/"===a[a.length-1]&&(a=a.substr(0,a.length-1)),O.mkdir(a,b,0),0}catch(c){return"undefined"!==typeof O&&c instanceof O.af||n(c),-c.ef}}
|
||||
function uc(a,b,c,d,e,g){if(l)return N(12,1,a,b,c,d,e,g);try{a:{g<<=12;var k=!1;if(0!==(d&16)&&0!==a%16384)var m=-28;else{if(0!==(d&32)){var r=vc(16384,b);if(!r){m=-48;break a}qc(r,0,b);k=!0}else{var q=O.zf(e);if(!q){m=-8;break a}var t=O.Wf(q,a,b,g,c,d);r=t.Hi;k=t.Jg}fc[r]={xi:r,ui:b,Jg:k,fd:e,Gi:c,flags:d,offset:g};m=r}}return m}catch(w){return"undefined"!==typeof O&&w instanceof O.af||n(w),-w.ef}}
|
||||
function wc(a,b){if(l)return N(13,1,a,b);try{if(-1===(a|0)||0===b)var c=-28;else{var d=fc[a];if(d&&b===d.ui){var e=O.zf(d.fd);if(d.Gi&2){var g=d.flags,k=d.offset,m=v.slice(a,a+b);O.Xf(e,m,k,b,g)}fc[a]=null;d.Jg&&zb(d.xi)}c=0}return c}catch(r){return"undefined"!==typeof O&&r instanceof O.af||n(r),-r.ef}}function xc(a,b,c){if(l)return N(14,1,a,b,c);ic=c;try{var d=C(a),e=Q();return O.open(d,b,e).fd}catch(g){return"undefined"!==typeof O&&g instanceof O.af||n(g),-g.ef}}
|
||||
function yc(a,b,c){if(l)return N(15,1,a,b,c);try{for(var d=c=0;d<b;d++){var e=a+8*d,g=Qa[e+4>>1],k=32,m=O.zf(E[e>>2]);m&&(k=5,m.df.Zf&&(k=m.df.Zf(m)));(k&=g|24)&&c++;Qa[e+6>>1]=k}return c}catch(r){return"undefined"!==typeof O&&r instanceof O.af||n(r),-r.ef}}function zc(a,b,c,d){if(l)return N(16,1,a,b,c,d);try{return d&&(E[d>>2]=-1,E[d+4>>2]=-1,E[d+8>>2]=-1,E[d+12>>2]=-1),0}catch(e){return"undefined"!==typeof O&&e instanceof O.af||n(e),-e.ef}}
|
||||
function Ac(a,b,c){if(l)return N(17,1,a,b,c);try{var d=jc(a);return O.read(d,y,b,c)}catch(e){return"undefined"!==typeof O&&e instanceof O.af||n(e),-e.ef}}function Bc(a,b){if(l)return N(18,1,a,b);try{return a=C(a),b=C(b),O.rename(a,b),0}catch(c){return"undefined"!==typeof O&&c instanceof O.af||n(c),-c.ef}}function Cc(a){if(l)return N(19,1,a);try{return a=C(a),O.rmdir(a),0}catch(b){return"undefined"!==typeof O&&b instanceof O.af||n(b),-b.ef}}
|
||||
var R={jf:function(){f.websocket=f.websocket&&"object"===typeof f.websocket?f.websocket:{};f.websocket.Ig={};f.websocket.on=function(a,b){"function"===typeof b&&(this.Ig[a]=b);return this};f.websocket.emit=function(a,b){"function"===typeof this.Ig[a]&&this.Ig[a].call(this,b)};return O.createNode(null,"/",16895,0)},createSocket:function(a,b,c){b&=-526337;c&&assert(1==b==(6==c));a={family:a,type:b,protocol:c,lf:null,error:null,ng:{},pending:[],ag:[],pf:R.qf};b=R.zg();c=O.createNode(R.root,b,49152,0);
|
||||
c.bg=a;b=O.nh({path:b,node:c,flags:O.Dh("r+"),seekable:!1,df:R.df});a.stream=b;return a},mi:function(a){return(a=O.zf(a))&&O.isSocket(a.node.mode)?a.node.bg:null},df:{Zf:function(a){a=a.node.bg;return a.pf.Zf(a)},Uf:function(a,b,c){a=a.node.bg;return a.pf.Uf(a,b,c)},read:function(a,b,c,d){a=a.node.bg;d=a.pf.bh(a,d);if(!d)return 0;b.set(d.buffer,c);return d.buffer.length},write:function(a,b,c,d){a=a.node.bg;return a.pf.fh(a,b,c,d)},close:function(a){a=a.node.bg;a.pf.close(a)}},zg:function(){R.zg.current||
|
||||
(R.zg.current=0);return"socket["+R.zg.current++ +"]"},qf:{tg:function(a,b,c){if("object"===typeof b){var d=b;c=b=null}if(d)if(d._socket)b=d._socket.remoteAddress,c=d._socket.remotePort;else{c=/ws[s]?:\/\/([^:]+):(\d+)/.exec(d.url);if(!c)throw Error("WebSocket URL must be in the format ws(s)://address:port");b=c[1];c=parseInt(c[2],10)}else try{var e=f.websocket&&"object"===typeof f.websocket,g="ws:#".replace("#","//");e&&"string"===typeof f.websocket.url&&(g=f.websocket.url);if("ws://"===g||"wss://"===
|
||||
g){var k=b.split("/");g=g+k[0]+":"+c+"/"+k.slice(1).join("/")}k="binary";e&&"string"===typeof f.websocket.subprotocol&&(k=f.websocket.subprotocol);var m=void 0;"null"!==k&&(k=k.replace(/^ +| +$/g,"").split(/ *, */),m=h?{protocol:k.toString()}:k);e&&null===f.websocket.subprotocol&&(m=void 0);d=new (h?require("ws"):WebSocket)(g,m);d.binaryType="arraybuffer"}catch(r){throw new O.af(23);}b={hf:b,port:c,socket:d,ug:[]};R.qf.jh(a,b);R.qf.ni(a,b);2===a.type&&"undefined"!==typeof a.Qf&&b.ug.push(new Uint8Array([255,
|
||||
255,255,255,112,111,114,116,(a.Qf&65280)>>8,a.Qf&255]));return b},vg:function(a,b,c){return a.ng[b+":"+c]},jh:function(a,b){a.ng[b.hf+":"+b.port]=b},Hh:function(a,b){delete a.ng[b.hf+":"+b.port]},ni:function(a,b){function c(){f.websocket.emit("open",a.stream.fd);try{for(var g=b.ug.shift();g;)b.socket.send(g),g=b.ug.shift()}catch(k){b.socket.close()}}function d(g){if("string"===typeof g)g=(new TextEncoder).encode(g);else{assert(void 0!==g.byteLength);if(0==g.byteLength)return;g=new Uint8Array(g)}var k=
|
||||
e;e=!1;k&&10===g.length&&255===g[0]&&255===g[1]&&255===g[2]&&255===g[3]&&112===g[4]&&111===g[5]&&114===g[6]&&116===g[7]?(g=g[8]<<8|g[9],R.qf.Hh(a,b),b.port=g,R.qf.jh(a,b)):(a.ag.push({hf:b.hf,port:b.port,data:g}),f.websocket.emit("message",a.stream.fd))}var e=!0;h?(b.socket.on("open",c),b.socket.on("message",function(g,k){k.Yi&&d((new Uint8Array(g)).buffer)}),b.socket.on("close",function(){f.websocket.emit("close",a.stream.fd)}),b.socket.on("error",function(){a.error=14;f.websocket.emit("error",[a.stream.fd,
|
||||
a.error,"ECONNREFUSED: Connection refused"])})):(b.socket.onopen=c,b.socket.onclose=function(){f.websocket.emit("close",a.stream.fd)},b.socket.onmessage=function(g){d(g.data)},b.socket.onerror=function(){a.error=14;f.websocket.emit("error",[a.stream.fd,a.error,"ECONNREFUSED: Connection refused"])})},Zf:function(a){if(1===a.type&&a.lf)return a.pending.length?65:0;var b=0,c=1===a.type?R.qf.vg(a,a.sf,a.vf):null;if(a.ag.length||!c||c&&c.socket.readyState===c.socket.CLOSING||c&&c.socket.readyState===c.socket.CLOSED)b|=
|
||||
65;if(!c||c&&c.socket.readyState===c.socket.OPEN)b|=4;if(c&&c.socket.readyState===c.socket.CLOSING||c&&c.socket.readyState===c.socket.CLOSED)b|=16;return b},Uf:function(a,b,c){switch(b){case 21531:return b=0,a.ag.length&&(b=a.ag[0].data.length),E[c>>2]=b,0;default:return 28}},close:function(a){if(a.lf){try{a.lf.close()}catch(e){}a.lf=null}for(var b=Object.keys(a.ng),c=0;c<b.length;c++){var d=a.ng[b[c]];try{d.socket.close()}catch(e){}R.qf.Hh(a,d)}return 0},bind:function(a,b,c){if("undefined"!==typeof a.Bg||
|
||||
"undefined"!==typeof a.Qf)throw new O.af(28);a.Bg=b;a.Qf=c;if(2===a.type){a.lf&&(a.lf.close(),a.lf=null);try{a.pf.listen(a,0)}catch(d){if(!(d instanceof O.af))throw d;if(138!==d.ef)throw d;}}},connect:function(a,b,c){if(a.lf)throw new O.af(138);if("undefined"!==typeof a.sf&&"undefined"!==typeof a.vf){var d=R.qf.vg(a,a.sf,a.vf);if(d){if(d.socket.readyState===d.socket.CONNECTING)throw new O.af(7);throw new O.af(30);}}b=R.qf.tg(a,b,c);a.sf=b.hf;a.vf=b.port;throw new O.af(26);},listen:function(a){if(!h)throw new O.af(138);
|
||||
if(a.lf)throw new O.af(28);var b=require("ws").Server;a.lf=new b({host:a.Bg,port:a.Qf});f.websocket.emit("listen",a.stream.fd);a.lf.on("connection",function(c){if(1===a.type){var d=R.createSocket(a.family,a.type,a.protocol);c=R.qf.tg(d,c);d.sf=c.hf;d.vf=c.port;a.pending.push(d);f.websocket.emit("connection",d.stream.fd)}else R.qf.tg(a,c),f.websocket.emit("connection",a.stream.fd)});a.lf.on("closed",function(){f.websocket.emit("close",a.stream.fd);a.lf=null});a.lf.on("error",function(){a.error=23;
|
||||
f.websocket.emit("error",[a.stream.fd,a.error,"EHOSTUNREACH: Host is unreachable"])})},accept:function(a){if(!a.lf)throw new O.af(28);var b=a.pending.shift();b.stream.flags=a.stream.flags;return b},ij:function(a,b){if(b){if(void 0===a.sf||void 0===a.vf)throw new O.af(53);b=a.sf;a=a.vf}else b=a.Bg||0,a=a.Qf||0;return{hf:b,port:a}},fh:function(a,b,c,d,e,g){if(2===a.type){if(void 0===e||void 0===g)e=a.sf,g=a.vf;if(void 0===e||void 0===g)throw new O.af(17);}else e=a.sf,g=a.vf;var k=R.qf.vg(a,e,g);if(1===
|
||||
a.type){if(!k||k.socket.readyState===k.socket.CLOSING||k.socket.readyState===k.socket.CLOSED)throw new O.af(53);if(k.socket.readyState===k.socket.CONNECTING)throw new O.af(6);}ArrayBuffer.isView(b)&&(c+=b.byteOffset,b=b.buffer);var m;b instanceof SharedArrayBuffer?m=(new Uint8Array(new Uint8Array(b.slice(c,c+d)))).buffer:m=b.slice(c,c+d);if(2===a.type&&(!k||k.socket.readyState!==k.socket.OPEN))return k&&k.socket.readyState!==k.socket.CLOSING&&k.socket.readyState!==k.socket.CLOSED||(k=R.qf.tg(a,e,
|
||||
g)),k.ug.push(m),d;try{return k.socket.send(m),d}catch(r){throw new O.af(28);}},bh:function(a,b){if(1===a.type&&a.lf)throw new O.af(53);var c=a.ag.shift();if(!c){if(1===a.type){if(a=R.qf.vg(a,a.sf,a.vf)){if(a.socket.readyState===a.socket.CLOSING||a.socket.readyState===a.socket.CLOSED)return null;throw new O.af(6);}throw new O.af(53);}throw new O.af(6);}var d=c.data.byteLength||c.data.length,e=c.data.byteOffset||0,g=c.data.buffer||c.data;b=Math.min(b,d);var k={buffer:new Uint8Array(g,e,b),hf:c.hf,
|
||||
port:c.port};1===a.type&&b<d&&(c.data=new Uint8Array(g,e+b,d-b),a.ag.unshift(c));return k}}};function Dc(a){a=a.split(".");for(var b=0;4>b;b++){var c=Number(a[b]);if(isNaN(c))return null;a[b]=c}return(a[0]|a[1]<<8|a[2]<<16|a[3]<<24)>>>0}
|
||||
function Ec(a){var b,c,d=[];if(!/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i.test(a))return null;if("::"===a)return[0,0,0,0,0,0,0,0];a=0===a.indexOf("::")?a.replace("::","Z:"):a.replace("::",":Z:");0<a.indexOf(".")?(a=a.replace(/[.]/g,":"),a=a.split(":"),a[a.length-4]=parseInt(a[a.length-4])+256*parseInt(a[a.length-3]),a[a.length-3]=parseInt(a[a.length-2])+256*parseInt(a[a.length-
|
||||
1]),a=a.slice(0,a.length-2)):a=a.split(":");for(b=c=0;b<a.length;b++)if("string"===typeof a[b])if("Z"===a[b]){for(c=0;c<8-a.length+1;c++)d[b+c]=0;--c}else d[b+c]=Fc(parseInt(a[b],16));else d[b+c]=a[b];return[d[1]<<16|d[0],d[3]<<16|d[2],d[5]<<16|d[4],d[7]<<16|d[6]]}var Gc=1,Hc={},Ic={};
|
||||
function Jc(a){var b=Dc(a);if(null!==b)return a;b=Ec(a);if(null!==b)return a;Hc[a]?b=Hc[a]:(b=Gc++,assert(65535>b,"exceeded max address mappings of 65535"),b="172.29."+(b&255)+"."+(b&65280),Ic[b]=a,Hc[a]=b);return b}function Kc(a){return Ic[a]?Ic[a]:null}function Lc(a){return(a&255)+"."+(a>>8&255)+"."+(a>>16&255)+"."+(a>>24&255)}
|
||||
function Mc(a){var b="",c,d=0,e=0,g=0,k=0;a=[a[0]&65535,a[0]>>16,a[1]&65535,a[1]>>16,a[2]&65535,a[2]>>16,a[3]&65535,a[3]>>16];var m=!0;for(c=0;5>c;c++)if(0!==a[c]){m=!1;break}if(m){c=Lc(a[6]|a[7]<<16);if(-1===a[5])return"::ffff:"+c;if(0===a[5])return"0.0.0.0"===c&&(c=""),"0.0.0.1"===c&&(c="1"),"::"+c}for(c=0;8>c;c++)0===a[c]&&(1<c-e&&(k=0),e=c,k++),k>d&&(d=k,g=c-d+1);for(c=0;8>c;c++)1<d&&0===a[c]&&c>=g&&c<g+d?c===g&&(b+=":",0===g&&(b+=":")):(b+=Number(Nc(a[c]&65535)).toString(16),b+=7>c?":":"");return b}
|
||||
function Oc(a,b){var c=Qa[a>>1],d=Nc(Ra[a+2>>1]);switch(c){case 2:if(16!==b)return{ef:28};a=E[a+4>>2];a=Lc(a);break;case 10:if(28!==b)return{ef:28};a=[E[a+8>>2],E[a+12>>2],E[a+16>>2],E[a+20>>2]];a=Mc(a);break;default:return{ef:5}}return{family:c,hf:a,port:d}}
|
||||
function Pc(a,b,c,d){switch(b){case 2:c=Dc(c);Qa[a>>1]=b;E[a+4>>2]=c;Qa[a+2>>1]=Fc(d);break;case 10:c=Ec(c);E[a>>2]=b;E[a+8>>2]=c[0];E[a+12>>2]=c[1];E[a+16>>2]=c[2];E[a+20>>2]=c[3];Qa[a+2>>1]=Fc(d);E[a+4>>2]=0;E[a+24>>2]=0;break;default:return{ef:5}}return{}}
|
||||
function Qc(a,b){if(l)return N(20,1,a,b);try{ic=b;b=function(){var aa=R.mi(Q());if(!aa)throw new O.af(8);return aa};var c=function(aa){var pd=Q(),ge=Q();if(aa&&0===pd)return null;aa=Oc(pd,ge);if(aa.ef)throw new O.af(aa.ef);aa.hf=Kc(aa.hf)||aa.hf;return aa};switch(a){case 1:var d=Q(),e=Q(),g=Q(),k=R.createSocket(d,e,g);return k.stream.fd;case 2:k=b();var m=c();k.pf.bind(k,m.hf,m.port);return 0;case 3:return k=b(),m=c(),k.pf.connect(k,m.hf,m.port),0;case 4:k=b();var r=Q();k.pf.listen(k,r);return 0;
|
||||
case 5:k=b();var q=Q();Q();var t=k.pf.accept(k);q&&Pc(q,t.family,Jc(t.sf),t.vf);return t.stream.fd;case 6:return k=b(),q=Q(),Q(),Pc(q,k.family,Jc(k.Bg||"0.0.0.0"),k.Qf),0;case 7:k=b();q=Q();Q();if(!k.sf)return-53;Pc(q,k.family,Jc(k.sf),k.vf);return 0;case 11:k=b();var w=Q(),B=Q();Q();var p=c(!0);return p?k.pf.fh(k,y,w,B,p.hf,p.port):O.write(k.stream,y,w,B);case 12:k=b();var x=Q(),z=Q();Q();q=Q();Q();var I=k.pf.bh(k,z);if(!I)return 0;q&&Pc(q,k.family,Jc(I.hf),I.port);v.set(I.buffer,x);return I.buffer.byteLength;
|
||||
case 14:return-50;case 15:k=b();var W=Q(),db=Q(),K=Q(),Y=Q();return 1===W&&4===db?(E[K>>2]=k.error,E[Y>>2]=4,k.error=null,0):-50;case 16:k=b();w=Q();Q();var ia=E[w+8>>2],na=E[w+12>>2],ua=E[w>>2],he=E[w+4>>2];if(ua){m=Oc(ua,he);if(m.ef)return-m.ef;var ie=m.port;q=Kc(m.hf)||m.hf}for(var Oa=0,X=0;X<na;X++)Oa+=E[ia+(8*X+4)>>2];var qd=new Uint8Array(Oa);for(X=B=0;X<na;X++){var ac=E[ia+8*X>>2],bc=E[ia+(8*X+4)>>2];for(x=0;x<bc;x++)qd[B++]=y[ac+x>>0]}return k.pf.fh(k,qd,0,Oa,q,ie);case 17:k=b();w=Q();Q();
|
||||
ia=E[w+8>>2];na=E[w+12>>2];for(X=Oa=0;X<na;X++)Oa+=E[ia+(8*X+4)>>2];I=k.pf.bh(k,Oa);if(!I)return 0;(ua=E[w>>2])&&Pc(ua,k.family,Jc(I.hf),I.port);k=0;var cc=I.buffer.byteLength;for(X=0;0<cc&&X<na;X++)if(ac=E[ia+8*X>>2],bc=E[ia+(8*X+4)>>2])B=Math.min(bc,cc),x=I.buffer.subarray(k,k+B),v.set(x,ac+k),k+=B,cc-=B;return k;default:return-52}}catch(aa){return"undefined"!==typeof O&&aa instanceof O.af||n(aa),-aa.ef}}
|
||||
function Rc(a,b){if(l)return N(21,1,a,b);try{return a=C(a),hc(O.stat,a,b)}catch(c){return"undefined"!==typeof O&&c instanceof O.af||n(c),-c.ef}}function Sc(a){if(l)return N(22,1,a);try{return a=C(a),O.unlink(a),0}catch(b){return"undefined"!==typeof O&&b instanceof O.af||n(b),-b.ef}}function Tc(){void 0===Tc.start&&(Tc.start=Date.now());return 1E3*(Date.now()-Tc.start)|0}
|
||||
function Uc(){h||la||(za||(za={}),za["Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread"]||(za["Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread"]=1,u("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")))}
|
||||
function Vc(a,b,c){if(0>=a||a>y.length||a&1)return-28;if(ka){if(Atomics.load(E,a>>2)!=b)return-6;var d=performance.now();c=d+c;for(Atomics.exchange(E,M.Vf>>2,a);;){d=performance.now();if(d>c)return Atomics.exchange(E,M.Vf>>2,0),-73;d=Atomics.exchange(E,M.Vf>>2,0);if(0==d)break;Ab();if(Atomics.load(E,a>>2)!=b)return-6;Atomics.exchange(E,M.Vf>>2,a)}return 0}a=Atomics.wait(E,a>>2,b,c);if("timed-out"===a)return-73;if("not-equal"===a)return-6;if("ok"===a)return 0;throw"Atomics.wait returned an unexpected value "+
|
||||
a;}function Wc(a){var b=a.getExtension("ANGLE_instanced_arrays");b&&(a.vertexAttribDivisor=function(c,d){b.vertexAttribDivisorANGLE(c,d)},a.drawArraysInstanced=function(c,d,e,g){b.drawArraysInstancedANGLE(c,d,e,g)},a.drawElementsInstanced=function(c,d,e,g,k){b.drawElementsInstancedANGLE(c,d,e,g,k)})}
|
||||
function Xc(a){var b=a.getExtension("OES_vertex_array_object");b&&(a.createVertexArray=function(){return b.createVertexArrayOES()},a.deleteVertexArray=function(c){b.deleteVertexArrayOES(c)},a.bindVertexArray=function(c){b.bindVertexArrayOES(c)},a.isVertexArray=function(c){return b.isVertexArrayOES(c)})}function Yc(a){var b=a.getExtension("WEBGL_draw_buffers");b&&(a.drawBuffers=function(c,d){b.drawBuffersWEBGL(c,d)})}var Zc=1,$c=[],S=[],ad=[],bd=[],cd=[],T=[],dd=[],ed=[],fd=[],gd={},hd={},id=4;
|
||||
function U(a){jd||(jd=a)}function kd(a){for(var b=Zc++,c=a.length;c<b;c++)a[c]=null;return b}
|
||||
function ld(a){a||(a=md);if(!a.oi){a.oi=!0;var b=a.qg;Wc(b);Xc(b);Yc(b);b.uf=b.getExtension("EXT_disjoint_timer_query");b.rj=b.getExtension("WEBGL_multi_draw");var c="OES_texture_float OES_texture_half_float OES_standard_derivatives OES_vertex_array_object WEBGL_compressed_texture_s3tc WEBGL_depth_texture OES_element_index_uint EXT_texture_filter_anisotropic EXT_frag_depth WEBGL_draw_buffers ANGLE_instanced_arrays OES_texture_float_linear OES_texture_half_float_linear EXT_blend_minmax EXT_shader_texture_lod EXT_texture_norm16 WEBGL_compressed_texture_pvrtc EXT_color_buffer_half_float WEBGL_color_buffer_float EXT_sRGB WEBGL_compressed_texture_etc1 EXT_disjoint_timer_query WEBGL_compressed_texture_etc WEBGL_compressed_texture_astc EXT_color_buffer_float WEBGL_compressed_texture_s3tc_srgb EXT_disjoint_timer_query_webgl2 WEBKIT_WEBGL_compressed_texture_pvrtc".split(" ");(b.getSupportedExtensions()||
|
||||
[]).forEach(function(d){-1!=c.indexOf(d)&&b.getExtension(d)})}}var jd,md,nd=[];function od(a,b,c,d){for(var e=0;e<a;e++){var g=V[c](),k=g&&kd(d);g?(g.name=k,d[k]=g):U(1282);E[b+4*e>>2]=k}}function rd(a,b,c,d,e,g,k,m){b=S[b];if(a=V[a](b,c))d=m&&Ia(a.name,v,m,d),e&&(E[e>>2]=d),g&&(E[g>>2]=a.size),k&&(E[k>>2]=a.type)}function sd(a,b){F[a>>2]=b;F[a+4>>2]=(b-F[a>>2])/4294967296}
|
||||
function td(a,b,c){if(b){var d=void 0;switch(a){case 36346:d=1;break;case 36344:0!=c&&1!=c&&U(1280);return;case 36345:d=0;break;case 34466:var e=V.getParameter(34467);d=e?e.length:0}if(void 0===d)switch(e=V.getParameter(a),typeof e){case "number":d=e;break;case "boolean":d=e?1:0;break;case "string":U(1280);return;case "object":if(null===e)switch(a){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:d=0;break;default:U(1280);return}else{if(e instanceof Float32Array||
|
||||
e instanceof Uint32Array||e instanceof Int32Array||e instanceof Array){for(a=0;a<e.length;++a)switch(c){case 0:E[b+4*a>>2]=e[a];break;case 2:G[b+4*a>>2]=e[a];break;case 4:y[b+a>>0]=e[a]?1:0}return}try{d=e.name|0}catch(g){U(1280);u("GL_INVALID_ENUM in glGet"+c+"v: Unknown object returned from WebGL getParameter("+a+")! (error: "+g+")");return}}break;default:U(1280);u("GL_INVALID_ENUM in glGet"+c+"v: Native code calling glGet"+c+"v("+a+") and it returns "+e+" of type "+typeof e+"!");return}switch(c){case 1:sd(b,
|
||||
d);break;case 0:E[b>>2]=d;break;case 2:G[b>>2]=d;break;case 4:y[b>>0]=d?1:0}}else U(1281)}function ud(a){var b=Ka(a)+1,c=Ma(b);Ia(a,v,c,b);return c}function vd(a,b,c,d){if(c)if(a=V.getUniform(S[a],T[b]),"number"==typeof a||"boolean"==typeof a)switch(d){case 0:E[c>>2]=a;break;case 2:G[c>>2]=a}else for(b=0;b<a.length;b++)switch(d){case 0:E[c+4*b>>2]=a[b];break;case 2:G[c+4*b>>2]=a[b]}else U(1281)}
|
||||
function wd(a,b,c,d){if(c)if(a=V.getVertexAttrib(a,b),34975==b)E[c>>2]=a&&a.name;else if("number"==typeof a||"boolean"==typeof a)switch(d){case 0:E[c>>2]=a;break;case 2:G[c>>2]=a;break;case 5:E[c>>2]=Math.fround(a)}else for(b=0;b<a.length;b++)switch(d){case 0:E[c+4*b>>2]=a[b];break;case 2:G[c+4*b>>2]=a[b];break;case 5:E[c+4*b>>2]=Math.fround(a[b])}else U(1281)}
|
||||
function xd(a,b,c,d,e){a-=5120;a=1==a?v:4==a?E:6==a?G:5==a||28922==a?F:Ra;var g=31-Math.clz32(a.BYTES_PER_ELEMENT),k=id;return a.subarray(e>>g,e+d*(c*({5:3,6:4,8:2,29502:3,29504:4}[b-6402]||1)*(1<<g)+k-1&-k)>>g)}var yd=[],zd=[];function N(a,b){for(var c=arguments.length-2,d=A(),e=Ha(8*c),g=e>>3,k=0;k<c;k++)Sa[g+k]=arguments[2+k];c=Ad(a,c,e,b);D(d);return c}var Bd=[],Cd=[],Dd=[0,"undefined"!==typeof document?document:0,"undefined"!==typeof window?window:0];
|
||||
function Ed(a){a=2<a?C(a):a;return Dd[a]||("undefined"!==typeof document?document.querySelector(a):void 0)}
|
||||
function Fd(a,b,c){var d=Ed(a);if(!d)return-4;d.sg&&(E[d.sg>>2]=b,E[d.sg+4>>2]=c);if(d.Fh||!d.aj)d.Fh&&(d=d.Fh),a=!1,d.rg&&d.rg.qg&&(a=d.rg.qg.getParameter(2978),a=0===a[0]&&0===a[1]&&a[2]===d.width&&a[3]===d.height),d.width=b,d.height=c,a&&d.rg.qg.viewport(0,0,b,c);else{if(d.sg){a=a?C(a):"";d=E[d.sg+8>>2];var e=A(),g=Ha(12),k=0;a&&(k=ud(a));E[g>>2]=k;E[g+4>>2]=b;E[g+8>>2]=c;Gd(0,d,657457152,0,k,g);D(e);return 1}return-4}return 0}function Hd(a,b,c){return l?N(23,1,a,b,c):Fd(a,b,c)}
|
||||
var Id=["default","low-power","high-performance"],Jd={};function Kd(){if(!Ld){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ha||"./this.program"},b;for(b in Jd)a[b]=Jd[b];var c=[];for(b in a)c.push(b+"="+a[b]);Ld=c}return Ld}var Ld;
|
||||
function Md(a){if(l)return N(24,1,a);try{var b=jc(a);O.close(b);return 0}catch(c){return"undefined"!==typeof O&&c instanceof O.af||n(c),c.ef}}function Nd(a,b){if(l)return N(25,1,a,b);try{var c=jc(a);y[b>>0]=c.tty?2:O.kf(c.mode)?3:O.Mf(c.mode)?7:4;return 0}catch(d){return"undefined"!==typeof O&&d instanceof O.af||n(d),d.ef}}
|
||||
function Od(a,b,c,d){if(l)return N(26,1,a,b,c,d);try{a:{for(var e=jc(a),g=a=0;g<c;g++){var k=E[b+(8*g+4)>>2],m=O.read(e,y,E[b+8*g>>2],k,void 0);if(0>m){var r=-1;break a}a+=m;if(m<k)break}r=a}E[d>>2]=r;return 0}catch(q){return"undefined"!==typeof O&&q instanceof O.af||n(q),q.ef}}
|
||||
function Pd(a,b,c,d,e){if(l)return N(27,1,a,b,c,d,e);try{var g=jc(a);a=4294967296*c+(b>>>0);if(-9007199254740992>=a||9007199254740992<=a)return-61;O.tf(g,a,d);L=[g.position>>>0,(J=g.position,1<=+Math.abs(J)?0<J?(Math.min(+Math.floor(J/4294967296),4294967295)|0)>>>0:~~+Math.ceil((J-+(~~J>>>0))/4294967296)>>>0:0)];E[e>>2]=L[0];E[e+4>>2]=L[1];g.Lf&&0===a&&0===d&&(g.Lf=null);return 0}catch(k){return"undefined"!==typeof O&&k instanceof O.af||n(k),k.ef}}
|
||||
function Qd(a,b,c,d){if(l)return N(28,1,a,b,c,d);try{a:{for(var e=jc(a),g=a=0;g<c;g++){var k=O.write(e,y,E[b+8*g>>2],E[b+(8*g+4)>>2],void 0);if(0>k){var m=-1;break a}a+=k}m=a}E[d>>2]=m;return 0}catch(r){return"undefined"!==typeof O&&r instanceof O.af||n(r),r.ef}}var Rd={};
|
||||
function Sd(a){Sd.buffer||(Sd.buffer=Ma(256),Rd["0"]="Success",Rd["-1"]="Invalid value for 'ai_flags' field",Rd["-2"]="NAME or SERVICE is unknown",Rd["-3"]="Temporary failure in name resolution",Rd["-4"]="Non-recoverable failure in name res",Rd["-6"]="'ai_family' not supported",Rd["-7"]="'ai_socktype' not supported",Rd["-8"]="SERVICE not supported for 'ai_socktype'",Rd["-10"]="Memory allocation failure",Rd["-11"]="System error returned in 'errno'",Rd["-12"]="Argument buffer overflow");var b="Unknown error";
|
||||
a in Rd&&(255<Rd[a].length?b="Message too long":b=Rd[a]);Pa(b,Sd.buffer);return Sd.buffer}
|
||||
function Td(a,b,c,d){function e(w,B,p,x,z,I){var W=10===w?28:16;z=10===w?Mc(z):Lc(z);W=Ma(W);z=Pc(W,w,z,I);assert(!z.ef);z=Ma(32);E[z+4>>2]=w;E[z+8>>2]=B;E[z+12>>2]=p;E[z+24>>2]=x;E[z+20>>2]=W;E[z+16>>2]=10===w?28:16;E[z+28>>2]=0;return z}if(l)return N(29,1,a,b,c,d);var g=0,k=0,m=0,r=0,q=0,t=0;c&&(m=E[c>>2],r=E[c+4>>2],q=E[c+8>>2],t=E[c+12>>2]);q&&!t&&(t=2===q?17:6);!q&&t&&(q=17===t?2:1);0===t&&(t=6);0===q&&(q=1);if(!a&&!b)return-2;if(m&-1088||0!==c&&E[c>>2]&2&&!a)return-1;if(m&32)return-2;if(0!==
|
||||
q&&1!==q&&2!==q)return-7;if(0!==r&&2!==r&&10!==r)return-6;if(b&&(b=C(b),k=parseInt(b,10),isNaN(k)))return m&1024?-2:-8;if(!a)return 0===r&&(r=2),0===(m&1)&&(2===r?g=Ud(2130706433):g=[0,0,0,1]),a=e(r,q,t,null,g,k),E[d>>2]=a,0;a=C(a);g=Dc(a);if(null!==g)if(0===r||2===r)r=2;else if(10===r&&m&8)g=[0,0,Ud(65535),g],r=10;else return-2;else if(g=Ec(a),null!==g)if(0===r||10===r)r=10;else return-2;if(null!=g)return a=e(r,q,t,a,g,k),E[d>>2]=a,0;if(m&4)return-2;a=Jc(a);g=Dc(a);0===r?r=2:10===r&&(g=[0,0,Ud(65535),
|
||||
g]);a=e(r,q,t,null,g,k);E[d>>2]=a;return 0}
|
||||
function Bb(a){if(l)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var b=M.li();if(void 0!==b.yf)throw"Internal error!";if(!a.$f)throw"Internal error, no pthread ptr!";M.Kf.push(b);for(var c=Ma(512),d=0;128>d;++d)E[c+4*d>>2]=0;var e=a.Rf+a.cg;d=M.Ef[a.$f]={worker:b,Rf:a.Rf,cg:a.cg,Kg:a.Kg,Lh:a.$f,threadInfoStruct:a.$f};var g=d.threadInfoStruct>>2;Atomics.store(F,g,0);Atomics.store(F,g+1,0);Atomics.store(F,g+2,0);Atomics.store(F,g+17,a.detached);Atomics.store(F,
|
||||
g+26,c);Atomics.store(F,g+12,0);Atomics.store(F,g+10,d.threadInfoStruct);Atomics.store(F,g+11,42);Atomics.store(F,g+27,a.cg);Atomics.store(F,g+21,a.cg);Atomics.store(F,g+20,e);Atomics.store(F,g+29,e);Atomics.store(F,g+30,a.detached);Atomics.store(F,g+32,a.Ih);Atomics.store(F,g+33,a.Jh);c=Vd()+40;Atomics.store(F,g+44,c);b.yf=d;var k={cmd:"run",start_routine:a.Mi,arg:a.Tf,threadInfoStruct:a.$f,selfThreadId:a.$f,parentThreadId:a.Fi,stackBase:a.Rf,stackSize:a.cg};b.og=function(){k.time=performance.now();
|
||||
b.postMessage(k,a.Vi)};b.loaded&&(b.og(),delete b.og)}function Wd(){return pb|0}f._pthread_self=Wd;
|
||||
function Xd(a,b){if(!a)return u("pthread_join attempted on a null thread pointer!"),71;if(l&&selfThreadId==a)return u("PThread "+a+" is attempting to join to itself!"),16;if(!l&&M.xf==a)return u("Main thread "+a+" is attempting to join to itself!"),16;if(E[a+12>>2]!==a)return u("pthread_join attempted on thread "+a+", which does not point to a valid thread, or does not exist anymore!"),71;if(Atomics.load(F,a+68>>2))return u("Attempted to join thread "+a+", which was already detached!"),28;for(Uc();;){var c=
|
||||
Atomics.load(F,a>>2);if(1==c)return c=Atomics.load(F,a+4>>2),b&&(E[b>>2]=c),Atomics.store(F,a+68>>2,1),l?postMessage({cmd:"cleanupThread",thread:a}):vb(a),0;if(l&&threadInfoStruct&&!Atomics.load(F,threadInfoStruct+60>>2)&&2==Atomics.load(F,threadInfoStruct+0>>2))throw"Canceled!";l||Ab();Vc(a,c,l?100:1)}}function Yd(a){return 0===a%4&&(0!==a%100||0===a%400)}function Zd(a,b){for(var c=0,d=0;d<=b;c+=a[d++]);return c}var $d=[31,29,31,30,31,30,31,31,30,31,30,31],ae=[31,28,31,30,31,30,31,31,30,31,30,31];
|
||||
function be(a,b){for(a=new Date(a.getTime());0<b;){var c=a.getMonth(),d=(Yd(a.getFullYear())?$d:ae)[c];if(b>d-a.getDate())b-=d-a.getDate()+1,a.setDate(1),11>c?a.setMonth(c+1):(a.setMonth(0),a.setFullYear(a.getFullYear()+1));else{a.setDate(a.getDate()+b);break}}return a}
|
||||
function ce(a){if(l)return N(30,1,a);switch(a){case 30:return 16384;case 85:return v.length/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;
|
||||
case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;
|
||||
case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}Eb(28);return-1}function de(a,b,c,d){a||(a=this);this.parent=a;this.jf=a.jf;this.lg=null;this.id=O.Ai++;this.name=b;this.mode=c;this.cf={};this.df={};this.rdev=d}
|
||||
Object.defineProperties(de.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}},ti:{get:function(){return O.kf(this.mode)}},Ug:{get:function(){return O.hg(this.mode)}}});O.Oh=de;O.Ni();for(var ec,V,ee=0;32>ee;++ee)nd.push(Array(ee));var fe=new Float32Array(288);for(ee=0;288>ee;++ee)yd[ee]=fe.subarray(0,ee+1);var je=new Int32Array(288);
|
||||
for(ee=0;288>ee;++ee)zd[ee]=je.subarray(0,ee+1);var ke=[null,Hb,Jb,kc,lc,mc,nc,oc,pc,rc,sc,tc,uc,wc,xc,yc,zc,Ac,Bc,Cc,Qc,Rc,Sc,Hd,Md,Nd,Od,Pd,Qd,Td,ce];function Zb(a,b){var c=Array(Ka(a)+1);a=Ia(a,c,0,c.length);b&&(c.length=a);return c}l||Wa.push({vh:function(){le()}});
|
||||
var Fe={c:function(a,b,c,d){n("Assertion failed: "+C(a)+", at: "+[b?C(b):"unknown filename",c,d?C(d):"unknown function"])},K:function(a,b){a=me(a,b);if(!noExitRuntime)return postMessage({cmd:"exitProcess",returnCode:a}),a},W:function(a,b){return Gb(a,b)},aa:function(a,b){return Hb(a,b)},va:function(a,b){return Ib(a,b)},ua:function(a,b){return Nb(a,b)},Ma:kc,Ea:lc,u:mc,Na:nc,Ka:oc,Ha:pc,V:rc,Oa:sc,Pa:tc,ya:uc,Aa:function(){return 0},za:wc,Da:function(){return-63},Y:xc,La:yc,Ja:zc,Ca:Ac,wa:Bc,Ga:Cc,
|
||||
Ia:function(){return 0},t:Qc,X:Rc,Fa:function(a){try{if(!a)return-21;var b={__size__:390,sysname:0,nodename:65,release:130,version:195,machine:260,domainname:325};Pa("Emscripten",a+b.sysname);Pa("emscripten",a+b.nodename);Pa("1.0",a+b.release);Pa("#1",a+b.version);Pa("x86-JS",a+b.machine);return 0}catch(c){return"undefined"!==typeof O&&c instanceof O.af||n(c),-c.ef}},Ba:Sc,pa:function(a,b){if(a==b)postMessage({cmd:"processQueuedMainThreadWork"});else if(l)postMessage({targetThread:a,cmd:"processThreadQueue"});
|
||||
else{a=(a=M.Ef[a])&&a.worker;if(!a)return;a.postMessage({cmd:"processThreadQueue"})}return 1},b:function(){n()},Qa:Tc,Ta:Gb,$:function(){n("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},Ua:function(){n("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},F:function(a,b,c){Cd.length=0;var d;for(c>>=2;d=v[b++];)(d=105>d)&&c&1&&c++,Cd.push(d?Sa[c++>>
|
||||
1]:E[c]),++c;return mb[a].apply(null,Cd)},qa:Uc,I:function(){},A:Vc,p:tb,z:Db,Ed:function(a){V.activeTexture(a)},Dd:function(a,b){V.attachShader(S[a],dd[b])},ea:function(a,b){V.uf.beginQueryEXT(a,fd[b])},Cd:function(a,b,c){V.bindAttribLocation(S[a],b,C(c))},Bd:function(a,b){V.bindBuffer(a,$c[b])},Ad:function(a,b){V.bindFramebuffer(a,ad[b])},zd:function(a,b){V.bindRenderbuffer(a,bd[b])},yd:function(a,b){V.bindTexture(a,cd[b])},Md:function(a){V.bindVertexArray(ed[a])},xd:function(a,b,c,d){V.blendColor(a,
|
||||
b,c,d)},wd:function(a){V.blendEquation(a)},vd:function(a,b){V.blendEquationSeparate(a,b)},ud:function(a,b){V.blendFunc(a,b)},td:function(a,b,c,d){V.blendFuncSeparate(a,b,c,d)},sd:function(a,b,c,d){V.bufferData(a,c?v.subarray(c,c+b):b,d)},rd:function(a,b,c,d){V.bufferSubData(a,b,v.subarray(d,d+c))},qd:function(a){return V.checkFramebufferStatus(a)},pd:function(a){V.clear(a)},od:function(a,b,c,d){V.clearColor(a,b,c,d)},nd:function(a){V.clearDepth(a)},md:function(a){V.clearStencil(a)},ld:function(a,
|
||||
b,c,d){V.colorMask(!!a,!!b,!!c,!!d)},kd:function(a){V.compileShader(dd[a])},jd:function(a,b,c,d,e,g,k,m){V.compressedTexImage2D(a,b,c,d,e,g,m?v.subarray(m,m+k):null)},id:function(a,b,c,d,e,g,k,m,r){V.compressedTexSubImage2D(a,b,c,d,e,g,k,r?v.subarray(r,r+m):null)},hd:function(a,b,c,d,e,g,k,m){V.copyTexImage2D(a,b,c,d,e,g,k,m)},gd:function(a,b,c,d,e,g,k,m){V.copyTexSubImage2D(a,b,c,d,e,g,k,m)},fd:function(){var a=kd(S),b=V.createProgram();b.name=a;S[a]=b;return a},ed:function(a){var b=kd(dd);dd[b]=
|
||||
V.createShader(a);return b},dd:function(a){V.cullFace(a)},cd:function(a,b){for(var c=0;c<a;c++){var d=E[b+4*c>>2],e=$c[d];e&&(V.deleteBuffer(e),e.name=0,$c[d]=null)}},bd:function(a,b){for(var c=0;c<a;++c){var d=E[b+4*c>>2],e=ad[d];e&&(V.deleteFramebuffer(e),e.name=0,ad[d]=null)}},ad:function(a){if(a){var b=S[a];b?(V.deleteProgram(b),b.name=0,S[a]=null,gd[a]=null):U(1281)}},ga:function(a,b){for(var c=0;c<a;c++){var d=E[b+4*c>>2],e=fd[d];e&&(V.uf.deleteQueryEXT(e),fd[d]=null)}},$c:function(a,b){for(var c=
|
||||
0;c<a;c++){var d=E[b+4*c>>2],e=bd[d];e&&(V.deleteRenderbuffer(e),e.name=0,bd[d]=null)}},_c:function(a){if(a){var b=dd[a];b?(V.deleteShader(b),dd[a]=null):U(1281)}},Zc:function(a,b){for(var c=0;c<a;c++){var d=E[b+4*c>>2],e=cd[d];e&&(V.deleteTexture(e),e.name=0,cd[d]=null)}},Ld:function(a,b){for(var c=0;c<a;c++){var d=E[b+4*c>>2];V.deleteVertexArray(ed[d]);ed[d]=null}},Yc:function(a){V.depthFunc(a)},Xc:function(a){V.depthMask(!!a)},Wc:function(a,b){V.depthRange(a,b)},Vc:function(a,b){V.detachShader(S[a],
|
||||
dd[b])},Uc:function(a){V.disable(a)},Tc:function(a){V.disableVertexAttribArray(a)},Sc:function(a,b,c){V.drawArrays(a,b,c)},Hd:function(a,b,c,d){V.drawArraysInstanced(a,b,c,d)},Id:function(a,b){for(var c=nd[a],d=0;d<a;d++)c[d]=E[b+4*d>>2];V.drawBuffers(c)},Rc:function(a,b,c,d){V.drawElements(a,b,c,d)},Gd:function(a,b,c,d,e){V.drawElementsInstanced(a,b,c,d,e)},Qc:function(a){V.enable(a)},Pc:function(a){V.enableVertexAttribArray(a)},da:function(a){V.uf.endQueryEXT(a)},Oc:function(){V.finish()},Nc:function(){V.flush()},
|
||||
Mc:function(a,b,c,d){V.framebufferRenderbuffer(a,b,c,bd[d])},Lc:function(a,b,c,d,e){V.framebufferTexture2D(a,b,c,cd[d],e)},Kc:function(a){V.frontFace(a)},Jc:function(a,b){od(a,b,"createBuffer",$c)},Hc:function(a,b){od(a,b,"createFramebuffer",ad)},ha:function(a,b){for(var c=0;c<a;c++){var d=V.uf.createQueryEXT();if(!d){for(U(1282);c<a;)E[b+4*c++>>2]=0;break}var e=kd(fd);d.name=e;fd[e]=d;E[b+4*c>>2]=e}},Gc:function(a,b){od(a,b,"createRenderbuffer",bd)},Fc:function(a,b){od(a,b,"createTexture",cd)},Kd:function(a,
|
||||
b){od(a,b,"createVertexArray",ed)},Ic:function(a){V.generateMipmap(a)},Ec:function(a,b,c,d,e,g,k){rd("getActiveAttrib",a,b,c,d,e,g,k)},Dc:function(a,b,c,d,e,g,k){rd("getActiveUniform",a,b,c,d,e,g,k)},Cc:function(a,b,c,d){a=V.getAttachedShaders(S[a]);var e=a.length;e>b&&(e=b);E[c>>2]=e;for(b=0;b<e;++b)E[d+4*b>>2]=dd.indexOf(a[b])},Bc:function(a,b){return V.getAttribLocation(S[a],C(b))},Ac:function(a,b){td(a,b,4)},zc:function(a,b,c){c?E[c>>2]=V.getBufferParameter(a,b):U(1281)},yc:function(){var a=V.getError()||
|
||||
jd;jd=0;return a},xc:function(a,b){td(a,b,2)},wc:function(a,b,c,d){a=V.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;E[d>>2]=a},vc:function(a,b){td(a,b,0)},tc:function(a,b,c,d){a=V.getProgramInfoLog(S[a]);null===a&&(a="(unknown error)");b=0<b&&d?Ia(a,v,d,b):0;c&&(E[c>>2]=b)},uc:function(a,b,c){if(c)if(a>=Zc)U(1281);else{var d=gd[a];if(d)if(35716==b)a=V.getProgramInfoLog(S[a]),null===a&&(a="(unknown error)"),E[c>>2]=a.length+1;else if(35719==
|
||||
b)E[c>>2]=d.Xg;else if(35722==b){if(-1==d.jg){a=S[a];var e=V.getProgramParameter(a,35721);for(b=d.jg=0;b<e;++b)d.jg=Math.max(d.jg,V.getActiveAttrib(a,b).name.length+1)}E[c>>2]=d.jg}else if(35381==b){if(-1==d.kg)for(a=S[a],e=V.getProgramParameter(a,35382),b=d.kg=0;b<e;++b)d.kg=Math.max(d.kg,V.getActiveUniformBlockName(a,b).length+1);E[c>>2]=d.kg}else E[c>>2]=V.getProgramParameter(S[a],b);else U(1282)}else U(1281)},Od:function(a,b,c){if(c){a=V.uf.getQueryObjectEXT(fd[a],b);var d;"boolean"==typeof a?
|
||||
d=a?1:0:d=a;sd(c,d)}else U(1281)},Qd:function(a,b,c){if(c){a=V.uf.getQueryObjectEXT(fd[a],b);var d;"boolean"==typeof a?d=a?1:0:d=a;E[c>>2]=d}else U(1281)},Nd:function(a,b,c){if(c){a=V.uf.getQueryObjectEXT(fd[a],b);var d;"boolean"==typeof a?d=a?1:0:d=a;sd(c,d)}else U(1281)},Pd:function(a,b,c){if(c){a=V.uf.getQueryObjectEXT(fd[a],b);var d;"boolean"==typeof a?d=a?1:0:d=a;E[c>>2]=d}else U(1281)},Rd:function(a,b,c){c?E[c>>2]=V.uf.getQueryEXT(a,b):U(1281)},sc:function(a,b,c){c?E[c>>2]=V.getRenderbufferParameter(a,
|
||||
b):U(1281)},qc:function(a,b,c,d){a=V.getShaderInfoLog(dd[a]);null===a&&(a="(unknown error)");b=0<b&&d?Ia(a,v,d,b):0;c&&(E[c>>2]=b)},pc:function(a,b,c,d){a=V.getShaderPrecisionFormat(a,b);E[c>>2]=a.rangeMin;E[c+4>>2]=a.rangeMax;E[d>>2]=a.precision},oc:function(a,b,c,d){if(a=V.getShaderSource(dd[a]))b=0<b&&d?Ia(a,v,d,b):0,c&&(E[c>>2]=b)},rc:function(a,b,c){c?35716==b?(a=V.getShaderInfoLog(dd[a]),null===a&&(a="(unknown error)"),E[c>>2]=a?a.length+1:0):35720==b?(a=V.getShaderSource(dd[a]),E[c>>2]=a?a.length+
|
||||
1:0):E[c>>2]=V.getShaderParameter(dd[a],b):U(1281)},nc:function(a){if(hd[a])return hd[a];switch(a){case 7939:var b=V.getSupportedExtensions()||[];b=b.concat(b.map(function(d){return"GL_"+d}));b=ud(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=V.getParameter(a))||U(1280);b=ud(b);break;case 7938:b=ud("OpenGL ES 2.0 ("+V.getParameter(7938)+")");break;case 35724:b=V.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==c&&(3==c[1].length&&(c[1]+="0"),
|
||||
b="OpenGL ES GLSL ES "+c[1]+" ("+b+")");b=ud(b);break;default:return U(1280),0}return hd[a]=b},mc:function(a,b,c){c?G[c>>2]=V.getTexParameter(a,b):U(1281)},lc:function(a,b,c){c?E[c>>2]=V.getTexParameter(a,b):U(1281)},ic:function(a,b){b=C(b);var c=0;if("]"==b[b.length-1]){var d=b.lastIndexOf("[");c="]"!=b[d+1]?parseInt(b.slice(d+1)):0;b=b.slice(0,d)}return(a=gd[a]&&gd[a].Nh[b])&&0<=c&&c<a[0]?a[1]+c:-1},kc:function(a,b,c){vd(a,b,c,2)},jc:function(a,b,c){vd(a,b,c,0)},fc:function(a,b,c){c?E[c>>2]=V.getVertexAttribOffset(a,
|
||||
b):U(1281)},hc:function(a,b,c){wd(a,b,c,2)},gc:function(a,b,c){wd(a,b,c,5)},ec:function(a,b){V.hint(a,b)},dc:function(a){return(a=$c[a])?V.isBuffer(a):0},cc:function(a){return V.isEnabled(a)},bc:function(a){return(a=ad[a])?V.isFramebuffer(a):0},ac:function(a){return(a=S[a])?V.isProgram(a):0},fa:function(a){return(a=fd[a])?V.uf.isQueryEXT(a):0},$b:function(a){return(a=bd[a])?V.isRenderbuffer(a):0},_b:function(a){return(a=dd[a])?V.isShader(a):0},Zb:function(a){return(a=cd[a])?V.isTexture(a):0},Jd:function(a){return(a=
|
||||
ed[a])?V.isVertexArray(a):0},Yb:function(a){V.lineWidth(a)},Xb:function(a){V.linkProgram(S[a]);var b=S[a];a=gd[a]={Nh:{},Xg:0,jg:-1,kg:-1};for(var c=a.Nh,d=V.getProgramParameter(b,35718),e=0;e<d;++e){var g=V.getActiveUniform(b,e),k=g.name;a.Xg=Math.max(a.Xg,k.length+1);"]"==k.slice(-1)&&(k=k.slice(0,k.lastIndexOf("[")));var m=V.getUniformLocation(b,k);if(m){var r=kd(T);c[k]=[g.size,r];T[r]=m;for(var q=1;q<g.size;++q)m=V.getUniformLocation(b,k+"["+q+"]"),r=kd(T),T[r]=m}}},Wb:function(a,b){3317==a&&
|
||||
(id=b);V.pixelStorei(a,b)},Vb:function(a,b){V.polygonOffset(a,b)},ca:function(a,b){V.uf.queryCounterEXT(fd[a],b)},Ub:function(a,b,c,d,e,g,k){(k=xd(g,e,c,d,k))?V.readPixels(a,b,c,d,e,g,k):U(1280)},Tb:function(){},Sb:function(a,b,c,d){V.renderbufferStorage(a,b,c,d)},Rb:function(a,b){V.sampleCoverage(a,!!b)},Qb:function(a,b,c,d){V.scissor(a,b,c,d)},Pb:function(){U(1280)},Ob:function(a,b,c,d){for(var e="",g=0;g<b;++g){var k=d?E[d+4*g>>2]:-1;e+=C(E[c+4*g>>2],0>k?void 0:k)}V.shaderSource(dd[a],e)},Nb:function(a,
|
||||
b,c){V.stencilFunc(a,b,c)},Mb:function(a,b,c,d){V.stencilFuncSeparate(a,b,c,d)},Lb:function(a){V.stencilMask(a)},Kb:function(a,b){V.stencilMaskSeparate(a,b)},Jb:function(a,b,c){V.stencilOp(a,b,c)},Ib:function(a,b,c,d){V.stencilOpSeparate(a,b,c,d)},Hb:function(a,b,c,d,e,g,k,m,r){V.texImage2D(a,b,c,d,e,g,k,m,r?xd(m,k,d,e,r):null)},Gb:function(a,b,c){V.texParameterf(a,b,c)},Fb:function(a,b,c){V.texParameterf(a,b,G[c>>2])},Eb:function(a,b,c){V.texParameteri(a,b,c)},Db:function(a,b,c){V.texParameteri(a,
|
||||
b,E[c>>2])},Cb:function(a,b,c,d,e,g,k,m,r){var q=null;r&&(q=xd(m,k,e,g,r));V.texSubImage2D(a,b,c,d,e,g,k,m,q)},Bb:function(a,b){V.uniform1f(T[a],b)},Ab:function(a,b,c){if(288>=b)for(var d=yd[b-1],e=0;e<b;++e)d[e]=G[c+4*e>>2];else d=G.subarray(c>>2,c+4*b>>2);V.uniform1fv(T[a],d)},zb:function(a,b){V.uniform1i(T[a],b)},yb:function(a,b,c){if(288>=b)for(var d=zd[b-1],e=0;e<b;++e)d[e]=E[c+4*e>>2];else d=E.subarray(c>>2,c+4*b>>2);V.uniform1iv(T[a],d)},xb:function(a,b,c){V.uniform2f(T[a],b,c)},wb:function(a,
|
||||
b,c){if(144>=b)for(var d=yd[2*b-1],e=0;e<2*b;e+=2)d[e]=G[c+4*e>>2],d[e+1]=G[c+(4*e+4)>>2];else d=G.subarray(c>>2,c+8*b>>2);V.uniform2fv(T[a],d)},vb:function(a,b,c){V.uniform2i(T[a],b,c)},ub:function(a,b,c){if(144>=b)for(var d=zd[2*b-1],e=0;e<2*b;e+=2)d[e]=E[c+4*e>>2],d[e+1]=E[c+(4*e+4)>>2];else d=E.subarray(c>>2,c+8*b>>2);V.uniform2iv(T[a],d)},tb:function(a,b,c,d){V.uniform3f(T[a],b,c,d)},sb:function(a,b,c){if(96>=b)for(var d=yd[3*b-1],e=0;e<3*b;e+=3)d[e]=G[c+4*e>>2],d[e+1]=G[c+(4*e+4)>>2],d[e+2]=
|
||||
G[c+(4*e+8)>>2];else d=G.subarray(c>>2,c+12*b>>2);V.uniform3fv(T[a],d)},rb:function(a,b,c,d){V.uniform3i(T[a],b,c,d)},qb:function(a,b,c){if(96>=b)for(var d=zd[3*b-1],e=0;e<3*b;e+=3)d[e]=E[c+4*e>>2],d[e+1]=E[c+(4*e+4)>>2],d[e+2]=E[c+(4*e+8)>>2];else d=E.subarray(c>>2,c+12*b>>2);V.uniform3iv(T[a],d)},pb:function(a,b,c,d,e){V.uniform4f(T[a],b,c,d,e)},ob:function(a,b,c){if(72>=b){var d=yd[4*b-1];c>>=2;for(var e=0;e<4*b;e+=4){var g=c+e;d[e]=G[g];d[e+1]=G[g+1];d[e+2]=G[g+2];d[e+3]=G[g+3]}}else d=G.subarray(c>>
|
||||
2,c+16*b>>2);V.uniform4fv(T[a],d)},nb:function(a,b,c,d,e){V.uniform4i(T[a],b,c,d,e)},mb:function(a,b,c){if(72>=b)for(var d=zd[4*b-1],e=0;e<4*b;e+=4)d[e]=E[c+4*e>>2],d[e+1]=E[c+(4*e+4)>>2],d[e+2]=E[c+(4*e+8)>>2],d[e+3]=E[c+(4*e+12)>>2];else d=E.subarray(c>>2,c+16*b>>2);V.uniform4iv(T[a],d)},lb:function(a,b,c,d){if(72>=b)for(var e=yd[4*b-1],g=0;g<4*b;g+=4)e[g]=G[d+4*g>>2],e[g+1]=G[d+(4*g+4)>>2],e[g+2]=G[d+(4*g+8)>>2],e[g+3]=G[d+(4*g+12)>>2];else e=G.subarray(d>>2,d+16*b>>2);V.uniformMatrix2fv(T[a],
|
||||
!!c,e)},kb:function(a,b,c,d){if(32>=b)for(var e=yd[9*b-1],g=0;g<9*b;g+=9)e[g]=G[d+4*g>>2],e[g+1]=G[d+(4*g+4)>>2],e[g+2]=G[d+(4*g+8)>>2],e[g+3]=G[d+(4*g+12)>>2],e[g+4]=G[d+(4*g+16)>>2],e[g+5]=G[d+(4*g+20)>>2],e[g+6]=G[d+(4*g+24)>>2],e[g+7]=G[d+(4*g+28)>>2],e[g+8]=G[d+(4*g+32)>>2];else e=G.subarray(d>>2,d+36*b>>2);V.uniformMatrix3fv(T[a],!!c,e)},jb:function(a,b,c,d){if(18>=b){var e=yd[16*b-1];d>>=2;for(var g=0;g<16*b;g+=16){var k=d+g;e[g]=G[k];e[g+1]=G[k+1];e[g+2]=G[k+2];e[g+3]=G[k+3];e[g+4]=G[k+4];
|
||||
e[g+5]=G[k+5];e[g+6]=G[k+6];e[g+7]=G[k+7];e[g+8]=G[k+8];e[g+9]=G[k+9];e[g+10]=G[k+10];e[g+11]=G[k+11];e[g+12]=G[k+12];e[g+13]=G[k+13];e[g+14]=G[k+14];e[g+15]=G[k+15]}}else e=G.subarray(d>>2,d+64*b>>2);V.uniformMatrix4fv(T[a],!!c,e)},ib:function(a){V.useProgram(S[a])},hb:function(a){V.validateProgram(S[a])},gb:function(a,b){V.vertexAttrib1f(a,b)},fb:function(a,b){V.vertexAttrib1f(a,G[b>>2])},eb:function(a,b,c){V.vertexAttrib2f(a,b,c)},db:function(a,b){V.vertexAttrib2f(a,G[b>>2],G[b+4>>2])},cb:function(a,
|
||||
b,c,d){V.vertexAttrib3f(a,b,c,d)},bb:function(a,b){V.vertexAttrib3f(a,G[b>>2],G[b+4>>2],G[b+8>>2])},ab:function(a,b,c,d,e){V.vertexAttrib4f(a,b,c,d,e)},$a:function(a,b){V.vertexAttrib4f(a,G[b>>2],G[b+4>>2],G[b+8>>2],G[b+12>>2])},Fd:function(a,b){V.vertexAttribDivisor(a,b)},_a:function(a,b,c,d,e,g){V.vertexAttribPointer(a,b,c,!!d,e,g)},Za:function(a,b,c,d){V.viewport(a,b,c,d)},ka:function(){return"undefined"!==typeof SharedArrayBuffer},G:function(){return rb|0},R:function(){return qb|0},f:function(a,
|
||||
b){Z(a,b||1);throw"longjmp";},ja:function(a,b,c){v.copyWithin(a,b,b+c)},ma:function(a,b,c){Bd.length=b;c>>=3;for(var d=0;d<b;d++)Bd[d]=Sa[c+d];return(0>a?mb[-a-1]:ke[a]).apply(null,Bd)},ra:function(){n("OOM")},na:function(a,b,c){return Ed(a)?Fd(a,b,c):Hd(a,b,c)},Q:function(){},la:function(){},oa:function(a,b){var c={};b>>=2;c.alpha=!!E[b];c.depth=!!E[b+1];c.stencil=!!E[b+2];c.antialias=!!E[b+3];c.premultipliedAlpha=!!E[b+4];c.preserveDrawingBuffer=!!E[b+5];c.powerPreference=Id[E[b+6]];c.failIfMajorPerformanceCaveat=
|
||||
!!E[b+7];c.wi=E[b+8];c.pj=E[b+9];c.qh=E[b+10];c.hi=E[b+11];c.uj=E[b+12];c.vj=E[b+13];a=Ed(a);if(!a||c.hi)c=0;else if(a=a.getContext("webgl",c)){b=Ma(8);E[b+4>>2]=pb|0;var d={jj:b,attributes:c,version:c.wi,qg:a};a.canvas&&(a.canvas.rg=d);("undefined"===typeof c.qh||c.qh)&&ld(d);c=b}else c=0;return c},sa:function(a,b){var c=0;Kd().forEach(function(d,e){var g=b+c;E[a+4*e>>2]=g;Pa(d,g);c+=d.length+1});return 0},ta:function(a,b){var c=Kd();E[a>>2]=c.length;var d=0;c.forEach(function(e){d+=e.length+1});
|
||||
E[b>>2]=d;return 0},D:function(a){Cb(a)},H:Md,U:Nd,xa:Od,Va:Pd,M:Qd,B:Sd,d:function(){return Aa|0},y:Td,v:function(a,b,c,d,e,g,k){b=Oc(a,b);if(b.ef)return-6;a=b.port;var m=b.hf;b=!1;if(c&&d){var r;if(k&1||!(r=Kc(m))){if(k&8)return-2}else m=r;c=Ia(m,v,c,d);c+1>=d&&(b=!0)}e&&g&&(c=Ia(""+a,v,e,g),c+1>=g&&(b=!0));return b?-12:0},l:function(a){var b=Date.now();E[a>>2]=b/1E3|0;E[a+4>>2]=b%1E3*1E3|0;return 0},r:Ib,ia:function(){M.pi()},ba:ne,j:oe,h:pe,C:qe,P:re,_:se,O:te,Xa:ue,Wa:ve,k:we,w:xe,J:ye,g:ze,
|
||||
N:Ae,Sa:Be,Z:Ce,Ya:De,q:Nb,a:Ca||f.wasmMemory,T:function(a){Jb();var b=new Date(E[a+20>>2]+1900,E[a+16>>2],E[a+12>>2],E[a+8>>2],E[a+4>>2],E[a>>2],0),c=E[a+32>>2],d=b.getTimezoneOffset(),e=new Date(b.getFullYear(),0,1),g=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),k=e.getTimezoneOffset(),m=Math.min(k,g);0>c?E[a+32>>2]=Number(g!=k&&m==d):0<c!=(m==d)&&(g=Math.max(k,g),b.setTime(b.getTime()+6E4*((0<c?m:g)-d)));E[a+24>>2]=b.getDay();E[a+28>>2]=(b.getTime()-e.getTime())/864E5|0;return b.getTime()/
|
||||
1E3|0},Ra:function(a){if(a===M.Ph)return u("Main thread (id="+a+") cannot be canceled!"),71;if(!a)return u("pthread_cancel attempted on a null thread pointer!"),71;if(E[a+12>>2]!==a)return u("pthread_cancel attempted on thread "+a+", which does not point to a valid thread, or does not exist anymore!"),71;Atomics.compareExchange(F,a>>2,0,2);l?postMessage({cmd:"cancelThread",thread:a}):ub(a);return 0},S:function(a){var b=M.Dg.pop();a&&b()},L:function(a,b){M.Dg.push(function(){H.get(a)(b)})},n:function(a,
|
||||
b,c,d){if("undefined"===typeof SharedArrayBuffer)return u("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;if(!a)return u("pthread_create called with a null thread pointer!"),28;var e=[];if(l&&0===e.length)return Ee(687865856,a,b,c,d);var g=0,k=0,m=0,r=0;if(b){var q=E[b>>2];q+=81920;g=E[b+8>>2];k=0!==E[b+12>>2];if(0===E[b+16>>2]){var t=E[b+20>>2],w=E[b+24>>2];m=b+20;r=b+24;var B=M.Mg?M.Mg:pb|0;if(m||r)if(B)if(E[B+12>>2]!==B)u("pthread_getschedparam attempted on thread "+
|
||||
B+", which does not point to a valid thread, or does not exist anymore!");else{var p=Atomics.load(F,B+128>>2);B=Atomics.load(F,B+132>>2);m&&(E[m>>2]=p);r&&(E[r>>2]=B)}else u("pthread_getschedparam called with a null thread pointer!");m=E[b+20>>2];r=E[b+24>>2];E[b+20>>2]=t;E[b+24>>2]=w}else m=E[b+20>>2],r=E[b+24>>2]}else q=2097152;(b=0==g)?g=vc(16,q):(g-=q,assert(0<g));t=Ma(232);for(w=0;58>w;++w)F[(t>>2)+w]=0;E[a>>2]=t;E[t+12>>2]=t;a=t+156;E[a>>2]=a;c={Rf:g,cg:q,Kg:b,Ih:m,Jh:r,detached:k,Mi:c,$f:t,
|
||||
Fi:pb|0,Tf:d,Vi:e};l?(c.$i="spawnThread",postMessage(c,e)):Bb(c);return 0},o:function(a,b){return Xd(a,b)},i:Wd,e:function(a){Aa=a|0},E:function(){return 0},m:function(a,b,c,d){function e(p,x,z){for(p="number"===typeof p?p.toString():p||"";p.length<x;)p=z[0]+p;return p}function g(p,x){return e(p,x,"0")}function k(p,x){function z(W){return 0>W?-1:0<W?1:0}var I;0===(I=z(p.getFullYear()-x.getFullYear()))&&0===(I=z(p.getMonth()-x.getMonth()))&&(I=z(p.getDate()-x.getDate()));return I}function m(p){switch(p.getDay()){case 0:return new Date(p.getFullYear()-
|
||||
1,11,29);case 1:return p;case 2:return new Date(p.getFullYear(),0,3);case 3:return new Date(p.getFullYear(),0,2);case 4:return new Date(p.getFullYear(),0,1);case 5:return new Date(p.getFullYear()-1,11,31);case 6:return new Date(p.getFullYear()-1,11,30)}}function r(p){p=be(new Date(p.rf+1900,0,1),p.Gg);var x=new Date(p.getFullYear()+1,0,4),z=m(new Date(p.getFullYear(),0,4));x=m(x);return 0>=k(z,p)?0>=k(x,p)?p.getFullYear()+1:p.getFullYear():p.getFullYear()-1}var q=E[d+40>>2];d={Ti:E[d>>2],Si:E[d+4>>
|
||||
2],Eg:E[d+8>>2],pg:E[d+12>>2],dg:E[d+16>>2],rf:E[d+20>>2],Fg:E[d+24>>2],Gg:E[d+28>>2],yj:E[d+32>>2],Ri:E[d+36>>2],Ui:q?C(q):""};c=C(c);q={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};
|
||||
for(var t in q)c=c.replace(new RegExp(t,"g"),q[t]);var w="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),B="January February March April May June July August September October November December".split(" ");q={"%a":function(p){return w[p.Fg].substring(0,3)},"%A":function(p){return w[p.Fg]},"%b":function(p){return B[p.dg].substring(0,3)},"%B":function(p){return B[p.dg]},"%C":function(p){return g((p.rf+1900)/100|0,2)},"%d":function(p){return g(p.pg,2)},"%e":function(p){return e(p.pg,
|
||||
2," ")},"%g":function(p){return r(p).toString().substring(2)},"%G":function(p){return r(p)},"%H":function(p){return g(p.Eg,2)},"%I":function(p){p=p.Eg;0==p?p=12:12<p&&(p-=12);return g(p,2)},"%j":function(p){return g(p.pg+Zd(Yd(p.rf+1900)?$d:ae,p.dg-1),3)},"%m":function(p){return g(p.dg+1,2)},"%M":function(p){return g(p.Si,2)},"%n":function(){return"\n"},"%p":function(p){return 0<=p.Eg&&12>p.Eg?"AM":"PM"},"%S":function(p){return g(p.Ti,2)},"%t":function(){return"\t"},"%u":function(p){return p.Fg||
|
||||
7},"%U":function(p){var x=new Date(p.rf+1900,0,1),z=0===x.getDay()?x:be(x,7-x.getDay());p=new Date(p.rf+1900,p.dg,p.pg);return 0>k(z,p)?g(Math.ceil((31-z.getDate()+(Zd(Yd(p.getFullYear())?$d:ae,p.getMonth()-1)-31)+p.getDate())/7),2):0===k(z,x)?"01":"00"},"%V":function(p){var x=new Date(p.rf+1901,0,4),z=m(new Date(p.rf+1900,0,4));x=m(x);var I=be(new Date(p.rf+1900,0,1),p.Gg);return 0>k(I,z)?"53":0>=k(x,I)?"01":g(Math.ceil((z.getFullYear()<p.rf+1900?p.Gg+32-z.getDate():p.Gg+1-z.getDate())/7),2)},"%w":function(p){return p.Fg},
|
||||
"%W":function(p){var x=new Date(p.rf,0,1),z=1===x.getDay()?x:be(x,0===x.getDay()?1:7-x.getDay()+1);p=new Date(p.rf+1900,p.dg,p.pg);return 0>k(z,p)?g(Math.ceil((31-z.getDate()+(Zd(Yd(p.getFullYear())?$d:ae,p.getMonth()-1)-31)+p.getDate())/7),2):0===k(z,x)?"01":"00"},"%y":function(p){return(p.rf+1900).toString().substring(2)},"%Y":function(p){return p.rf+1900},"%z":function(p){p=p.Ri;var x=0<=p;p=Math.abs(p)/60;return(x?"+":"-")+String("0000"+(p/60*100+p%60)).slice(-4)},"%Z":function(p){return p.Ui},
|
||||
"%%":function(){return"%"}};for(t in q)0<=c.indexOf(t)&&(c=c.replace(new RegExp(t,"g"),q[t](d)));t=Zb(c,!1);if(t.length>b)return 0;y.set(t,a);return t.length-1},x:ce,s:function(a){var b=Date.now()/1E3|0;a&&(E[a>>2]=b);return b}};
|
||||
(function(){function a(e,g){f.asm=e.exports;H=f.asm.Sd;Da=g;l||fb()}function b(e){a(e.instance,e.module)}function c(e){return kb().then(function(g){return WebAssembly.instantiate(g,d)}).then(e,function(g){u("failed to asynchronously prepare wasm: "+g);n(g)})}var d={a:Fe};l||eb();if(f.instantiateWasm)try{return f.instantiateWasm(d,a)}catch(e){return u("Module.instantiateWasm callback failed with error: "+e),!1}(function(){return Ba||"function"!==typeof WebAssembly.instantiateStreaming||ib()||gb("file://")||
|
||||
"function"!==typeof fetch?c(b):fetch(hb,{credentials:"same-origin"}).then(function(e){return WebAssembly.instantiateStreaming(e,d).then(b,function(g){u("wasm streaming compile failed: "+g);u("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ca);return{}})();
|
||||
var le=f.___wasm_call_ctors=function(){return(le=f.___wasm_call_ctors=f.asm.Td).apply(null,arguments)},zb=f._free=function(){return(zb=f._free=f.asm.Ud).apply(null,arguments)},Ma=f._malloc=function(){return(Ma=f._malloc=f.asm.Vd).apply(null,arguments)},Fb=f.___errno_location=function(){return(Fb=f.___errno_location=f.asm.Wd).apply(null,arguments)},qc=f._memset=function(){return(qc=f._memset=f.asm.Xd).apply(null,arguments)};f._fflush=function(){return(f._fflush=f.asm.Yd).apply(null,arguments)};
|
||||
var vc=f._memalign=function(){return(vc=f._memalign=f.asm.Zd).apply(null,arguments)},Nc=f._ntohs=function(){return(Nc=f._ntohs=f.asm._d).apply(null,arguments)},Fc=f._htons=function(){return(Fc=f._htons=f.asm.$d).apply(null,arguments)},me=f._main=function(){return(me=f._main=f.asm.ae).apply(null,arguments)},Vd=f._emscripten_get_global_libc=function(){return(Vd=f._emscripten_get_global_libc=f.asm.be).apply(null,arguments)};
|
||||
f.___em_js__initPthreadsJS=function(){return(f.___em_js__initPthreadsJS=f.asm.ce).apply(null,arguments)};
|
||||
var Ud=f._htonl=function(){return(Ud=f._htonl=f.asm.de).apply(null,arguments)},Mb=f.__get_tzname=function(){return(Mb=f.__get_tzname=f.asm.ee).apply(null,arguments)},Lb=f.__get_daylight=function(){return(Lb=f.__get_daylight=f.asm.fe).apply(null,arguments)},Kb=f.__get_timezone=function(){return(Kb=f.__get_timezone=f.asm.ge).apply(null,arguments)},A=f.stackSave=function(){return(A=f.stackSave=f.asm.he).apply(null,arguments)},D=f.stackRestore=function(){return(D=f.stackRestore=f.asm.ie).apply(null,arguments)},
|
||||
Ha=f.stackAlloc=function(){return(Ha=f.stackAlloc=f.asm.je).apply(null,arguments)},Z=f._setThrew=function(){return(Z=f._setThrew=f.asm.ke).apply(null,arguments)};f._emscripten_main_browser_thread_id=function(){return(f._emscripten_main_browser_thread_id=f.asm.le).apply(null,arguments)};
|
||||
var yb=f.___pthread_tsd_run_dtors=function(){return(yb=f.___pthread_tsd_run_dtors=f.asm.me).apply(null,arguments)},Ab=f._emscripten_main_thread_process_queued_calls=function(){return(Ab=f._emscripten_main_thread_process_queued_calls=f.asm.ne).apply(null,arguments)};f._emscripten_current_thread_process_queued_calls=function(){return(f._emscripten_current_thread_process_queued_calls=f.asm.oe).apply(null,arguments)};
|
||||
var wb=f._emscripten_register_main_browser_thread_id=function(){return(wb=f._emscripten_register_main_browser_thread_id=f.asm.pe).apply(null,arguments)},lb=f._do_emscripten_dispatch_to_thread=function(){return(lb=f._do_emscripten_dispatch_to_thread=f.asm.qe).apply(null,arguments)};f._emscripten_async_run_in_main_thread=function(){return(f._emscripten_async_run_in_main_thread=f.asm.re).apply(null,arguments)};
|
||||
f._emscripten_sync_run_in_main_thread=function(){return(f._emscripten_sync_run_in_main_thread=f.asm.se).apply(null,arguments)};f._emscripten_sync_run_in_main_thread_0=function(){return(f._emscripten_sync_run_in_main_thread_0=f.asm.te).apply(null,arguments)};f._emscripten_sync_run_in_main_thread_1=function(){return(f._emscripten_sync_run_in_main_thread_1=f.asm.ue).apply(null,arguments)};
|
||||
f._emscripten_sync_run_in_main_thread_2=function(){return(f._emscripten_sync_run_in_main_thread_2=f.asm.ve).apply(null,arguments)};f._emscripten_sync_run_in_main_thread_xprintf_varargs=function(){return(f._emscripten_sync_run_in_main_thread_xprintf_varargs=f.asm.we).apply(null,arguments)};f._emscripten_sync_run_in_main_thread_3=function(){return(f._emscripten_sync_run_in_main_thread_3=f.asm.xe).apply(null,arguments)};
|
||||
var Ee=f._emscripten_sync_run_in_main_thread_4=function(){return(Ee=f._emscripten_sync_run_in_main_thread_4=f.asm.ye).apply(null,arguments)};f._emscripten_sync_run_in_main_thread_5=function(){return(f._emscripten_sync_run_in_main_thread_5=f.asm.ze).apply(null,arguments)};f._emscripten_sync_run_in_main_thread_6=function(){return(f._emscripten_sync_run_in_main_thread_6=f.asm.Ae).apply(null,arguments)};
|
||||
f._emscripten_sync_run_in_main_thread_7=function(){return(f._emscripten_sync_run_in_main_thread_7=f.asm.Be).apply(null,arguments)};var Ad=f._emscripten_run_in_main_runtime_thread_js=function(){return(Ad=f._emscripten_run_in_main_runtime_thread_js=f.asm.Ce).apply(null,arguments)},Gd=f.__emscripten_call_on_thread=function(){return(Gd=f.__emscripten_call_on_thread=f.asm.De).apply(null,arguments)};f._proxy_main=function(){return(f._proxy_main=f.asm.Ee).apply(null,arguments)};
|
||||
f._emscripten_tls_init=function(){return(f._emscripten_tls_init=f.asm.Fe).apply(null,arguments)};f.dynCall_ijiii=function(){return(f.dynCall_ijiii=f.asm.Ge).apply(null,arguments)};var Ge=f.dynCall_vijjjid=function(){return(Ge=f.dynCall_vijjjid=f.asm.He).apply(null,arguments)},He=f.dynCall_iiiijj=function(){return(He=f.dynCall_iiiijj=f.asm.Ie).apply(null,arguments)};f.dynCall_iiijiii=function(){return(f.dynCall_iiijiii=f.asm.Je).apply(null,arguments)};
|
||||
f.dynCall_jiiii=function(){return(f.dynCall_jiiii=f.asm.Ke).apply(null,arguments)};f.dynCall_jii=function(){return(f.dynCall_jii=f.asm.Le).apply(null,arguments)};var Ie=f.dynCall_iij=function(){return(Ie=f.dynCall_iij=f.asm.Me).apply(null,arguments)};f.dynCall_viiijj=function(){return(f.dynCall_viiijj=f.asm.Ne).apply(null,arguments)};f.dynCall_jij=function(){return(f.dynCall_jij=f.asm.Oe).apply(null,arguments)};f.dynCall_jiji=function(){return(f.dynCall_jiji=f.asm.Pe).apply(null,arguments)};
|
||||
f.dynCall_iiiji=function(){return(f.dynCall_iiiji=f.asm.Qe).apply(null,arguments)};f.dynCall_iiiiij=function(){return(f.dynCall_iiiiij=f.asm.Re).apply(null,arguments)};f.dynCall_jiiij=function(){return(f.dynCall_jiiij=f.asm.Se).apply(null,arguments)};f.dynCall_iiijjji=function(){return(f.dynCall_iiijjji=f.asm.Te).apply(null,arguments)};f.dynCall_iiiiiij=function(){return(f.dynCall_iiiiiij=f.asm.Ue).apply(null,arguments)};f.dynCall_jiiji=function(){return(f.dynCall_jiiji=f.asm.Ve).apply(null,arguments)};
|
||||
f.dynCall_viiiiijji=function(){return(f.dynCall_viiiiijji=f.asm.We).apply(null,arguments)};f.dynCall_viiiji=function(){return(f.dynCall_viiiji=f.asm.Xe).apply(null,arguments)};f.dynCall_viiiiji=function(){return(f.dynCall_viiiiji=f.asm.Ye).apply(null,arguments)};f.dynCall_jiiiii=function(){return(f.dynCall_jiiiii=f.asm.Ze).apply(null,arguments)};f.dynCall_jiii=function(){return(f.dynCall_jiii=f.asm._e).apply(null,arguments)};
|
||||
f.dynCall_jiiiiii=function(){return(f.dynCall_jiiiiii=f.asm.$e).apply(null,arguments)};f._ff_h264_cabac_tables=2115974;var xb=f._main_thread_futex=17195328;function pe(a,b,c){var d=A();try{return H.get(a)(b,c)}catch(e){D(d);if(e!==e+0&&"longjmp"!==e)throw e;Z(1,0)}}function we(a,b){var c=A();try{H.get(a)(b)}catch(d){D(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}}function ze(a,b,c,d,e){var g=A();try{H.get(a)(b,c,d,e)}catch(k){D(g);if(k!==k+0&&"longjmp"!==k)throw k;Z(1,0)}}
|
||||
function xe(a,b,c){var d=A();try{H.get(a)(b,c)}catch(e){D(d);if(e!==e+0&&"longjmp"!==e)throw e;Z(1,0)}}function oe(a,b){var c=A();try{return H.get(a)(b)}catch(d){D(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}}function re(a,b,c,d,e){var g=A();try{return H.get(a)(b,c,d,e)}catch(k){D(g);if(k!==k+0&&"longjmp"!==k)throw k;Z(1,0)}}function te(a,b,c,d,e,g,k,m,r){var q=A();try{return H.get(a)(b,c,d,e,g,k,m,r)}catch(t){D(q);if(t!==t+0&&"longjmp"!==t)throw t;Z(1,0)}}
|
||||
function ye(a,b,c,d){var e=A();try{H.get(a)(b,c,d)}catch(g){D(e);if(g!==g+0&&"longjmp"!==g)throw g;Z(1,0)}}function ne(a){var b=A();try{return H.get(a)()}catch(c){D(b);if(c!==c+0&&"longjmp"!==c)throw c;Z(1,0)}}function Ae(a,b,c,d,e,g){var k=A();try{H.get(a)(b,c,d,e,g)}catch(m){D(k);if(m!==m+0&&"longjmp"!==m)throw m;Z(1,0)}}function qe(a,b,c,d){var e=A();try{return H.get(a)(b,c,d)}catch(g){D(e);if(g!==g+0&&"longjmp"!==g)throw g;Z(1,0)}}
|
||||
function se(a,b,c,d,e,g){var k=A();try{return H.get(a)(b,c,d,e,g)}catch(m){D(k);if(m!==m+0&&"longjmp"!==m)throw m;Z(1,0)}}function Ce(a,b,c,d,e,g,k,m,r){var q=A();try{H.get(a)(b,c,d,e,g,k,m,r)}catch(t){D(q);if(t!==t+0&&"longjmp"!==t)throw t;Z(1,0)}}function Be(a,b,c,d,e,g,k){var m=A();try{H.get(a)(b,c,d,e,g,k)}catch(r){D(m);if(r!==r+0&&"longjmp"!==r)throw r;Z(1,0)}}function De(a,b,c,d,e,g,k,m,r,q){var t=A();try{Ge(a,b,c,d,e,g,k,m,r,q)}catch(w){D(t);if(w!==w+0&&"longjmp"!==w)throw w;Z(1,0)}}
|
||||
function ue(a,b,c,d,e,g,k,m){var r=A();try{return He(a,b,c,d,e,g,k,m)}catch(q){D(r);if(q!==q+0&&"longjmp"!==q)throw q;Z(1,0)}}function ve(a,b,c,d){var e=A();try{return Ie(a,b,c,d)}catch(g){D(e);if(g!==g+0&&"longjmp"!==g)throw g;Z(1,0)}}f.ccall=Ga;f.cwrap=function(a,b,c,d){c=c||[];var e=c.every(function(g){return"number"===g});return"string"!==b&&e&&!d?Fa(a):function(){return Ga(a,b,c,arguments,d)}};
|
||||
f.setValue=function(a,b,c){c=c||"i8";"*"===c.charAt(c.length-1)&&(c="i32");switch(c){case "i1":y[a>>0]=b;break;case "i8":y[a>>0]=b;break;case "i16":Qa[a>>1]=b;break;case "i32":E[a>>2]=b;break;case "i64":L=[b>>>0,(J=b,1<=+Math.abs(J)?0<J?(Math.min(+Math.floor(J/4294967296),4294967295)|0)>>>0:~~+Math.ceil((J-+(~~J>>>0))/4294967296)>>>0:0)];E[a>>2]=L[0];E[a+4>>2]=L[1];break;case "float":G[a>>2]=b;break;case "double":Sa[a>>3]=b;break;default:n("invalid type for setValue: "+c)}};f.writeAsciiToMemory=Pa;
|
||||
f.FS=O;f.PThread=M;f.PThread=M;f._pthread_self=Wd;f.wasmMemory=Ca;f.ExitStatus=wa;var Je;function wa(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}cb=function Ke(){Je||Le();Je||(cb=Ke)};
|
||||
function Le(a){function b(){if(!Je&&(Je=!0,f.calledRun=!0,!Ea)){f.noFSInit||O.gg.Tg||O.gg();R.root=O.jf(R,{},null);nb(Wa);l||(O.Bh=!1,nb(Xa));ba(f);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(Me){var c=a;c=c||[];var d=c.length+1,e=Ha(4*(d+1));E[e>>2]=Na(ha);for(var g=1;g<d;g++)E[(e>>2)+g]=Na(c[g-1]);E[(e>>2)+d]=0;f._proxy_main(d,e)}if(!l){if(f.postRun)for("function"==typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;)c=f.postRun.shift(),Za.unshift(c);nb(Za)}}}a=a||fa;if(!(0<ab)){if(!l){if(f.preRun)for("function"==
|
||||
typeof f.preRun&&(f.preRun=[f.preRun]);f.preRun.length;)$a();nb(Va)}0<ab||(f.setStatus?(f.setStatus("Running..."),setTimeout(function(){setTimeout(function(){f.setStatus("")},1);b()},1)):b())}}f.run=Le;function Cb(a,b){if(!b||!noExitRuntime||0!==a){if(!noExitRuntime){M.Oi();l||(nb(Ya),O.quit(),M.eh());if(f.onExit)f.onExit(a);Ea=!0}ja(a,new wa(a))}}if(f.preInit)for("function"==typeof f.preInit&&(f.preInit=[f.preInit]);0<f.preInit.length;)f.preInit.pop()();var Me=!1;f.noInitialRun&&(Me=!1);
|
||||
l?M.ri():Le();f.exit=Cb;
|
||||
var e;e||(e=typeof createFFmpegCore !== 'undefined' ? createFFmpegCore : {});var aa,ba;e.ready=new Promise(function(a,b){aa=a;ba=b});e.quit=function(a){if(e.onExit)e.onExit(a);throw new ca(a);};e.exit=da;ea=k=function(){};var fa={},l;for(l in e)e.hasOwnProperty(l)&&(fa[l]=e[l]);var ha=[],ia="./this.program";function ja(a,b){throw b;}var ka=!1,v=!1,x=!1,la=!1;ka="object"===typeof window;v="function"===typeof importScripts;x="object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node;
|
||||
la=!ka&&!x&&!v;var y="",ma,na,oa,pa,qa;
|
||||
if(x)y=v?require("path").dirname(y)+"/":__dirname+"/",ma=function(a,b){pa||(pa=require("fs"));qa||(qa=require("path"));a=qa.normalize(a);return pa.readFileSync(a,b?null:"utf8")},oa=function(a){a=ma(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a},1<process.argv.length&&(ia=process.argv[1].replace(/\\/g,"/")),ha=process.argv.slice(2),process.on("uncaughtException",function(a){if(!(a instanceof ca))throw a;}),process.on("unhandledRejection",B),ja=function(a){process.exit(a)},e.inspect=
|
||||
function(){return"[Emscripten Module object]"};else if(la)"undefined"!=typeof read&&(ma=function(a){return read(a)}),oa=function(a){if("function"===typeof readbuffer)return new Uint8Array(readbuffer(a));a=read(a,"binary");assert("object"===typeof a);return a},"undefined"!=typeof scriptArgs?ha=scriptArgs:"undefined"!=typeof arguments&&(ha=arguments),"function"===typeof quit&&(ja=function(a){quit(a)}),"undefined"!==typeof print&&("undefined"===typeof console&&(console={}),console.log=print,console.warn=
|
||||
console.error="undefined"!==typeof printErr?printErr:print);else if(ka||v)v?y=self.location.href:"undefined"!==typeof document&&document.currentScript&&(y=document.currentScript.src),_scriptDir&&(y=_scriptDir),0!==y.indexOf("blob:")?y=y.substr(0,y.lastIndexOf("/")+1):y="",ma=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},v&&(oa=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),
|
||||
na=function(a,b,c){var d=new XMLHttpRequest;d.open("GET",a,!0);d.responseType="arraybuffer";d.onload=function(){200==d.status||0==d.status&&d.response?b(d.response):c()};d.onerror=c;d.send(null)};var ea=e.print||console.log.bind(console),k=e.printErr||console.warn.bind(console);for(l in fa)fa.hasOwnProperty(l)&&(e[l]=fa[l]);fa=null;e.arguments&&(ha=e.arguments);e.thisProgram&&(ia=e.thisProgram);e.quit&&(ja=e.quit);var ra=0,sa;e.wasmBinary&&(sa=e.wasmBinary);var noExitRuntime=e.noExitRuntime||!0;
|
||||
"object"!==typeof WebAssembly&&B("no native wasm support detected");var ta,ua=!1;function assert(a,b){a||B("Assertion failed: "+b)}function va(a){var b=e["_"+a];assert(b,"Cannot call unknown function "+a+", make sure it is exported");return b}
|
||||
function wa(a,b,c,d){var f={string:function(q){var r=0;if(null!==q&&void 0!==q&&0!==q){var w=(q.length<<2)+1;r=xa(w);C(q,D,r,w)}return r},array:function(q){var r=xa(q.length);E.set(q,r>>>0);return r}},g=va(a),h=[];a=0;if(d)for(var n=0;n<d.length;n++){var p=f[c[n]];p?(0===a&&(a=G()),h[n]=p(d[n])):h[n]=d[n]}c=g.apply(null,h);c=function(q){return"string"===b?H(q):"boolean"===b?!!q:q}(c);0!==a&&I(a);return c}var ya="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;
|
||||
function za(a,b,c){b>>>=0;var d=b+c;for(c=b;a[c>>>0]&&!(c>=d);)++c;if(16<c-b&&a.subarray&&ya)return ya.decode(a.subarray(b>>>0,c>>>0));for(d="";b<c;){var f=a[b++>>>0];if(f&128){var g=a[b++>>>0]&63;if(192==(f&224))d+=String.fromCharCode((f&31)<<6|g);else{var h=a[b++>>>0]&63;f=224==(f&240)?(f&15)<<12|g<<6|h:(f&7)<<18|g<<12|h<<6|a[b++>>>0]&63;65536>f?d+=String.fromCharCode(f):(f-=65536,d+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else d+=String.fromCharCode(f)}return d}
|
||||
function H(a){return(a>>>=0)?za(D,a,void 0):""}
|
||||
function C(a,b,c,d){c>>>=0;if(!(0<d))return 0;var f=c;d=c+d-1;for(var g=0;g<a.length;++g){var h=a.charCodeAt(g);if(55296<=h&&57343>=h){var n=a.charCodeAt(++g);h=65536+((h&1023)<<10)|n&1023}if(127>=h){if(c>=d)break;b[c++>>>0]=h}else{if(2047>=h){if(c+1>=d)break;b[c++>>>0]=192|h>>6}else{if(65535>=h){if(c+2>=d)break;b[c++>>>0]=224|h>>12}else{if(c+3>=d)break;b[c++>>>0]=240|h>>18;b[c++>>>0]=128|h>>12&63}b[c++>>>0]=128|h>>6&63}b[c++>>>0]=128|h&63}}b[c>>>0]=0;return c-f}
|
||||
function Aa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}function Ba(a){var b=Aa(a)+1,c=Ca(b);c&&C(a,E,c,b);return c}function Da(a){var b=Aa(a)+1,c=xa(b);C(a,E,c,b);return c}function K(a,b,c){for(var d=0;d<a.length;++d)E[b++>>0>>>0]=a.charCodeAt(d);c||(E[b>>0>>>0]=0)}var Ea,E,D,L,Fa,M,Ga,Ha;
|
||||
function Ia(){var a=ta.buffer;Ea=a;e.HEAP8=E=new Int8Array(a);e.HEAP16=L=new Int16Array(a);e.HEAP32=M=new Int32Array(a);e.HEAPU8=D=new Uint8Array(a);e.HEAPU16=Fa=new Uint16Array(a);e.HEAPU32=new Uint32Array(a);e.HEAPF32=Ga=new Float32Array(a);e.HEAPF64=Ha=new Float64Array(a)}var O,Ja=[],Ka=[],La=[],Ma=[];function Na(){var a=e.preRun.shift();Ja.unshift(a)}var Qa=0,Ra=null,Sa=null;function Ta(){Qa++;e.monitorRunDependencies&&e.monitorRunDependencies(Qa)}
|
||||
function Ua(){Qa--;e.monitorRunDependencies&&e.monitorRunDependencies(Qa);if(0==Qa&&(null!==Ra&&(clearInterval(Ra),Ra=null),Sa)){var a=Sa;Sa=null;a()}}e.preloadedImages={};e.preloadedAudios={};function B(a){if(e.onAbort)e.onAbort(a);k(a);ua=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");ba(a);throw a;}function Va(){return P.startsWith("data:application/octet-stream;base64,")}var P;P="ffmpeg-core.wasm";
|
||||
if(!Va()){var Wa=P;P=e.locateFile?e.locateFile(Wa,y):y+Wa}function Xa(){var a=P;try{if(a==P&&sa)return new Uint8Array(sa);if(oa)return oa(a);throw"both async and sync fetching of the wasm failed";}catch(b){B(b)}}
|
||||
function Ya(){if(!sa&&(ka||v)){if("function"===typeof fetch&&!P.startsWith("file://"))return fetch(P,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+P+"'";return a.arrayBuffer()}).catch(function(){return Xa()});if(na)return new Promise(function(a,b){na(P,function(c){a(new Uint8Array(c))},b)})}return Promise.resolve().then(function(){return Xa()})}var Q,R;
|
||||
function Za(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(e);else{var c=b.fe;"number"===typeof c?void 0===b.qc?O.get(c)():O.get(c)(b.qc):c(void 0===b.qc?null:b.qc)}}}var $a=0,ab;x?ab=function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:"undefined"!==typeof dateNow?ab=dateNow:ab=function(){return performance.now()};function bb(a,b){if(0===a)a=Date.now();else if(1===a||4===a)a=ab();else return M[cb()>>2>>>0]=28,-1;M[b>>2>>>0]=a/1E3|0;M[b+4>>2>>>0]=a%1E3*1E6|0;return 0}
|
||||
function eb(a,b){a=new Date(1E3*M[a>>2>>>0]);M[b>>2>>>0]=a.getUTCSeconds();M[b+4>>2>>>0]=a.getUTCMinutes();M[b+8>>2>>>0]=a.getUTCHours();M[b+12>>2>>>0]=a.getUTCDate();M[b+16>>2>>>0]=a.getUTCMonth();M[b+20>>2>>>0]=a.getUTCFullYear()-1900;M[b+24>>2>>>0]=a.getUTCDay();M[b+36>>2>>>0]=0;M[b+32>>2>>>0]=0;M[b+28>>2>>>0]=(a.getTime()-Date.UTC(a.getUTCFullYear(),0,1,0,0,0,0))/864E5|0;eb.Hc||(eb.Hc=Ba("GMT"));M[b+40>>2>>>0]=eb.Hc;return b}
|
||||
function fb(){function a(h){return(h=h.toTimeString().match(/\(([A-Za-z ]+)\)$/))?h[1]:"GMT"}if(!gb){gb=!0;var b=(new Date).getFullYear(),c=new Date(b,0,1),d=new Date(b,6,1);b=c.getTimezoneOffset();var f=d.getTimezoneOffset(),g=Math.max(b,f);M[hb()>>2>>>0]=60*g;M[ib()>>2>>>0]=Number(b!=f);c=a(c);d=a(d);c=Ba(c);d=Ba(d);f<b?(M[jb()>>2>>>0]=c,M[jb()+4>>2>>>0]=d):(M[jb()>>2>>>0]=d,M[jb()+4>>2>>>0]=c)}}var gb;
|
||||
function kb(a,b){fb();a=new Date(1E3*M[a>>2>>>0]);M[b>>2>>>0]=a.getSeconds();M[b+4>>2>>>0]=a.getMinutes();M[b+8>>2>>>0]=a.getHours();M[b+12>>2>>>0]=a.getDate();M[b+16>>2>>>0]=a.getMonth();M[b+20>>2>>>0]=a.getFullYear()-1900;M[b+24>>2>>>0]=a.getDay();var c=new Date(a.getFullYear(),0,1);M[b+28>>2>>>0]=(a.getTime()-c.getTime())/864E5|0;M[b+36>>2>>>0]=-(60*a.getTimezoneOffset());var d=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();c=c.getTimezoneOffset();a=(d!=c&&a.getTimezoneOffset()==Math.min(c,
|
||||
d))|0;M[b+32>>2>>>0]=a;a=M[jb()+(a?4:0)>>2>>>0];M[b+40>>2>>>0]=a;return b}function lb(a,b){for(var c=0,d=a.length-1;0<=d;d--){var f=a[d];"."===f?a.splice(d,1):".."===f?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a}function mb(a){var b="/"===a.charAt(0),c="/"===a.substr(-1);(a=lb(a.split("/").filter(function(d){return!!d}),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a}
|
||||
function nb(a){var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&(b=b.substr(0,b.length-1));return a+b}function S(a){if("/"===a)return"/";a=mb(a);a=a.replace(/\/$/,"");var b=a.lastIndexOf("/");return-1===b?a:a.substr(b+1)}function pb(a,b){return mb(a+"/"+b)}
|
||||
function qb(){if("object"===typeof crypto&&"function"===typeof crypto.getRandomValues){var a=new Uint8Array(1);return function(){crypto.getRandomValues(a);return a[0]}}if(x)try{var b=require("crypto");return function(){return b.randomBytes(1)[0]}}catch(c){}return function(){B("randomDevice")}}
|
||||
function rb(){for(var a="",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:T.cwd();if("string"!==typeof b)throw new TypeError("Arguments to path.resolve must be strings");if(!b)return"";a=b+"/"+a;b="/"===b.charAt(0)}a=lb(a.split("/").filter(function(d){return!!d}),!b).join("/");return(b?"/":"")+a||"."}
|
||||
function sb(a,b){function c(h){for(var n=0;n<h.length&&""===h[n];n++);for(var p=h.length-1;0<=p&&""===h[p];p--);return n>p?[]:h.slice(n,p-n+1)}a=rb(a).substr(1);b=rb(b).substr(1);a=c(a.split("/"));b=c(b.split("/"));for(var d=Math.min(a.length,b.length),f=d,g=0;g<d;g++)if(a[g]!==b[g]){f=g;break}d=[];for(g=f;g<a.length;g++)d.push("..");d=d.concat(b.slice(f));return d.join("/")}var tb=[];function ub(a,b){tb[a]={input:[],output:[],Mb:b};T.Ec(a,vb)}
|
||||
var vb={open:function(a){var b=tb[a.node.rdev];if(!b)throw new T.Za(43);a.tty=b;a.seekable=!1},close:function(a){a.tty.Mb.flush(a.tty)},flush:function(a){a.tty.Mb.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.Mb.Uc)throw new T.Za(60);for(var f=0,g=0;g<d;g++){try{var h=a.tty.Mb.Uc(a.tty)}catch(n){throw new T.Za(29);}if(void 0===h&&0===f)throw new T.Za(6);if(null===h||void 0===h)break;f++;b[c+g]=h}f&&(a.node.timestamp=Date.now());return f},write:function(a,b,c,d){if(!a.tty||!a.tty.Mb.Bc)throw new T.Za(60);
|
||||
try{for(var f=0;f<d;f++)a.tty.Mb.Bc(a.tty,b[c+f])}catch(g){throw new T.Za(29);}d&&(a.node.timestamp=Date.now());return f}},xb={Uc:function(a){if(!a.input.length){var b=null;if(x){var c=Buffer.Ib?Buffer.Ib(256):new Buffer(256),d=0;try{d=pa.readSync(process.stdin.fd,c,0,256,null)}catch(f){if(f.toString().includes("EOF"))d=0;else throw f;}0<d?b=c.slice(0,d).toString("utf-8"):b=null}else"undefined"!=typeof window&&"function"==typeof window.prompt?(b=window.prompt("Input: "),null!==b&&(b+="\n")):"function"==
|
||||
typeof readline&&(b=readline(),null!==b&&(b+="\n"));if(!b)return null;a.input=wb(b,!0)}return a.input.shift()},Bc:function(a,b){null===b||10===b?(ea(za(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&(ea(za(a.output,0)),a.output=[])}},yb={Bc:function(a,b){null===b||10===b?(k(za(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&(k(za(a.output,0)),a.output=[])}},U={xb:null,gb:function(){return U.createNode(null,
|
||||
"/",16895,0)},createNode:function(a,b,c,d){if(T.Dd(c)||T.isFIFO(c))throw new T.Za(63);U.xb||(U.xb={dir:{node:{ub:U.$a.ub,lb:U.$a.lb,lookup:U.$a.lookup,yb:U.$a.yb,rename:U.$a.rename,unlink:U.$a.unlink,rmdir:U.$a.rmdir,readdir:U.$a.readdir,symlink:U.$a.symlink},stream:{pb:U.ab.pb}},file:{node:{ub:U.$a.ub,lb:U.$a.lb},stream:{pb:U.ab.pb,read:U.ab.read,write:U.ab.write,Sb:U.ab.Sb,Kb:U.ab.Kb,Lb:U.ab.Lb}},link:{node:{ub:U.$a.ub,lb:U.$a.lb,readlink:U.$a.readlink},stream:{}},Kc:{node:{ub:U.$a.ub,lb:U.$a.lb},
|
||||
stream:T.qd}});c=T.createNode(a,b,c,d);T.ib(c.mode)?(c.$a=U.xb.dir.node,c.ab=U.xb.dir.stream,c.cb={}):T.isFile(c.mode)?(c.$a=U.xb.file.node,c.ab=U.xb.file.stream,c.fb=0,c.cb=null):T.Db(c.mode)?(c.$a=U.xb.link.node,c.ab=U.xb.link.stream):T.Ub(c.mode)&&(c.$a=U.xb.Kc.node,c.ab=U.xb.Kc.stream);c.timestamp=Date.now();a&&(a.cb[b]=c,a.timestamp=c.timestamp);return c},ge:function(a){return a.cb?a.cb.subarray?a.cb.subarray(0,a.fb):new Uint8Array(a.cb):new Uint8Array(0)},Qc:function(a,b){b>>>=0;var c=a.cb?
|
||||
a.cb.length:0;c>=b||(b=Math.max(b,c*(1048576>c?2:1.125)>>>0),0!=c&&(b=Math.max(b,256)),c=a.cb,a.cb=new Uint8Array(b),0<a.fb&&a.cb.set(c.subarray(0,a.fb),0))},Rd:function(a,b){b>>>=0;if(a.fb!=b)if(0==b)a.cb=null,a.fb=0;else{var c=a.cb;a.cb=new Uint8Array(b);c&&a.cb.set(c.subarray(0,Math.min(b,a.fb)));a.fb=b}},$a:{ub:function(a){var b={};b.dev=T.Ub(a.mode)?a.id:1;b.ino=a.id;b.mode=a.mode;b.nlink=1;b.uid=0;b.gid=0;b.rdev=a.rdev;T.ib(a.mode)?b.size=4096:T.isFile(a.mode)?b.size=a.fb:T.Db(a.mode)?b.size=
|
||||
a.link.length:b.size=0;b.atime=new Date(a.timestamp);b.mtime=new Date(a.timestamp);b.ctime=new Date(a.timestamp);b.od=4096;b.blocks=Math.ceil(b.size/b.od);return b},lb:function(a,b){void 0!==b.mode&&(a.mode=b.mode);void 0!==b.timestamp&&(a.timestamp=b.timestamp);void 0!==b.size&&U.Rd(a,b.size)},lookup:function(){throw T.tc[44];},yb:function(a,b,c,d){return U.createNode(a,b,c,d)},rename:function(a,b,c){if(T.ib(a.mode)){try{var d=T.vb(b,c)}catch(g){}if(d)for(var f in d.cb)throw new T.Za(55);}delete a.parent.cb[a.name];
|
||||
a.parent.timestamp=Date.now();a.name=c;b.cb[c]=a;b.timestamp=a.parent.timestamp;a.parent=b},unlink:function(a,b){delete a.cb[b];a.timestamp=Date.now()},rmdir:function(a,b){var c=T.vb(a,b),d;for(d in c.cb)throw new T.Za(55);delete a.cb[b];a.timestamp=Date.now()},readdir:function(a){var b=[".",".."],c;for(c in a.cb)a.cb.hasOwnProperty(c)&&b.push(c);return b},symlink:function(a,b,c){a=U.createNode(a,b,41471,0);a.link=c;return a},readlink:function(a){if(!T.Db(a.mode))throw new T.Za(28);return a.link}},
|
||||
ab:{read:function(a,b,c,d,f){var g=a.node.cb;if(f>=a.node.fb)return 0;a=Math.min(a.node.fb-f,d);if(8<a&&g.subarray)b.set(g.subarray(f,f+a),c);else for(d=0;d<a;d++)b[c+d]=g[f+d];return a},write:function(a,b,c,d,f,g){b.buffer===E.buffer&&(g=!1);if(!d)return 0;a=a.node;a.timestamp=Date.now();if(b.subarray&&(!a.cb||a.cb.subarray)){if(g)return a.cb=b.subarray(c,c+d),a.fb=d;if(0===a.fb&&0===f)return a.cb=b.slice(c,c+d),a.fb=d;if(f+d<=a.fb)return a.cb.set(b.subarray(c,c+d),f),d}U.Qc(a,f+d);if(a.cb.subarray&&
|
||||
b.subarray)a.cb.set(b.subarray(c,c+d),f);else for(g=0;g<d;g++)a.cb[f+g]=b[c+g];a.fb=Math.max(a.fb,f+d);return d},pb:function(a,b,c){1===c?b+=a.position:2===c&&T.isFile(a.node.mode)&&(b+=a.node.fb);if(0>b)throw new T.Za(28);return b},Sb:function(a,b,c){U.Qc(a.node,b+c);a.node.fb=Math.max(a.node.fb,b+c)},Kb:function(a,b,c,d,f,g){if(0!==b)throw new T.Za(28);if(!T.isFile(a.node.mode))throw new T.Za(43);a=a.node.cb;if(g&2||a.buffer!==Ea){if(0<d||d+c<a.length)a.subarray?a=a.subarray(d,d+c):a=Array.prototype.slice.call(a,
|
||||
d,d+c);d=!0;g=65536*Math.ceil(c/65536);for(b=Ca(g);c<g;)E[b+c++>>>0]=0;c=b;if(!c)throw new T.Za(48);c>>>=0;E.set(a,c>>>0)}else d=!1,c=a.byteOffset;return{Qd:c,oc:d}},Lb:function(a,b,c,d,f){if(!T.isFile(a.node.mode))throw new T.Za(43);if(f&2)return 0;U.ab.write(a,b,0,d,c,!1);return 0}}},T={root:null,Xb:[],Oc:{},streams:[],Kd:1,wb:null,Nc:"/",wc:!1,Yc:!0,kb:{},ed:{$c:{kd:1,ld:2}},Za:null,tc:{},yd:null,ic:0,eb:function(a,b){a=rb(T.cwd(),a);b=b||{};if(!a)return{path:"",node:null};var c={sc:!0,Dc:0},d;
|
||||
for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8<b.Dc)throw new T.Za(32);a=lb(a.split("/").filter(function(h){return!!h}),!1);var f=T.root;c="/";for(d=0;d<a.length;d++){var g=d===a.length-1;if(g&&b.parent)break;f=T.vb(f,a[d]);c=pb(c,a[d]);T.Eb(f)&&(!g||g&&b.sc)&&(f=f.Wb.root);if(!g||b.sb)for(g=0;T.Db(f.mode);)if(f=T.readlink(c),c=rb(nb(c),f),f=T.eb(c,{Dc:b.Dc}).node,40<g++)throw new T.Za(32);}return{path:c,node:f}},Ab:function(a){for(var b;;){if(T.cc(a))return a=a.gb.Zc,b?"/"!==a[a.length-1]?a+"/"+b:a+
|
||||
b:a;b=b?a.name+"/"+b:a.name;a=a.parent}},vc:function(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return(a+c>>>0)%T.wb.length},Wc:function(a){var b=T.vc(a.parent.id,a.name);a.Gb=T.wb[b];T.wb[b]=a},Xc:function(a){var b=T.vc(a.parent.id,a.name);if(T.wb[b]===a)T.wb[b]=a.Gb;else for(b=T.wb[b];b;){if(b.Gb===a){b.Gb=a.Gb;break}b=b.Gb}},vb:function(a,b){var c=T.Hd(a);if(c)throw new T.Za(c,a);for(c=T.wb[T.vc(a.id,b)];c;c=c.Gb){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return T.lookup(a,
|
||||
b)},createNode:function(a,b,c,d){a=new T.hd(a,b,c,d);T.Wc(a);return a},rc:function(a){T.Xc(a)},cc:function(a){return a===a.parent},Eb:function(a){return!!a.Wb},isFile:function(a){return 32768===(a&61440)},ib:function(a){return 16384===(a&61440)},Db:function(a){return 40960===(a&61440)},Ub:function(a){return 8192===(a&61440)},Dd:function(a){return 24576===(a&61440)},isFIFO:function(a){return 4096===(a&61440)},isSocket:function(a){return 49152===(a&49152)},zd:{r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},
|
||||
Jd:function(a){var b=T.zd[a];if("undefined"===typeof b)throw Error("Unknown file open mode: "+a);return b},Rc:function(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b},Bb:function(a,b){if(T.Yc)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0},Hd:function(a){var b=T.Bb(a,"x");return b?b:a.$a.lookup?0:2},Ac:function(a,b){try{return T.vb(a,b),20}catch(c){}return T.Bb(a,"wx")},dc:function(a,b,c){try{var d=
|
||||
T.vb(a,b)}catch(f){return f.bb}if(a=T.Bb(a,"wx"))return a;if(c){if(!T.ib(d.mode))return 54;if(T.cc(d)||T.Ab(d)===T.cwd())return 10}else if(T.ib(d.mode))return 31;return 0},Id:function(a,b){return a?T.Db(a.mode)?32:T.ib(a.mode)&&("r"!==T.Rc(b)||b&512)?31:T.Bb(a,T.Rc(b)):44},jd:4096,Ld:function(a,b){b=b||T.jd;for(a=a||0;a<=b;a++)if(!T.streams[a])return a;throw new T.Za(33);},tb:function(a){return T.streams[a]},Mc:function(a,b,c){T.mc||(T.mc=function(){},T.mc.prototype={object:{get:function(){return this.node},
|
||||
set:function(g){this.node=g}}});var d=new T.mc,f;for(f in a)d[f]=a[f];a=d;b=T.Ld(b,c);a.fd=b;return T.streams[b]=a},rd:function(a){T.streams[a]=null},qd:{open:function(a){a.ab=T.Ad(a.node.rdev).ab;a.ab.open&&a.ab.open(a)},pb:function(){throw new T.Za(70);}},zc:function(a){return a>>8},je:function(a){return a&255},Fb:function(a,b){return a<<8|b},Ec:function(a,b){T.Oc[a]={ab:b}},Ad:function(a){return T.Oc[a]},Tc:function(a){var b=[];for(a=[a];a.length;){var c=a.pop();b.push(c);a.push.apply(a,c.Xb)}return b},
|
||||
dd:function(a,b){function c(h){T.ic--;return b(h)}function d(h){if(h){if(!d.xd)return d.xd=!0,c(h)}else++g>=f.length&&c(null)}"function"===typeof a&&(b=a,a=!1);T.ic++;1<T.ic&&k("warning: "+T.ic+" FS.syncfs operations in flight at once, probably just doing extra work");var f=T.Tc(T.root.gb),g=0;f.forEach(function(h){if(!h.type.dd)return d(null);h.type.dd(h,a,d)})},gb:function(a,b,c){var d="/"===c,f=!c;if(d&&T.root)throw new T.Za(10);if(!d&&!f){var g=T.eb(c,{sc:!1});c=g.path;g=g.node;if(T.Eb(g))throw new T.Za(10);
|
||||
if(!T.ib(g.mode))throw new T.Za(54);}b={type:a,me:b,Zc:c,Xb:[]};a=a.gb(b);a.gb=b;b.root=a;d?T.root=a:g&&(g.Wb=b,g.gb&&g.gb.Xb.push(b));return a},pe:function(a){a=T.eb(a,{sc:!1});if(!T.Eb(a.node))throw new T.Za(28);a=a.node;var b=a.Wb,c=T.Tc(b);Object.keys(T.wb).forEach(function(d){for(d=T.wb[d];d;){var f=d.Gb;c.includes(d.gb)&&T.rc(d);d=f}});a.Wb=null;a.gb.Xb.splice(a.gb.Xb.indexOf(b),1)},lookup:function(a,b){return a.$a.lookup(a,b)},yb:function(a,b,c){var d=T.eb(a,{parent:!0}).node;a=S(a);if(!a||
|
||||
"."===a||".."===a)throw new T.Za(28);var f=T.Ac(d,a);if(f)throw new T.Za(f);if(!d.$a.yb)throw new T.Za(63);return d.$a.yb(d,a,b,c)},create:function(a,b){return T.yb(a,(void 0!==b?b:438)&4095|32768,0)},mkdir:function(a,b){return T.yb(a,(void 0!==b?b:511)&1023|16384,0)},ke:function(a,b){a=a.split("/");for(var c="",d=0;d<a.length;++d)if(a[d]){c+="/"+a[d];try{T.mkdir(c,b)}catch(f){if(20!=f.bb)throw f;}}},ec:function(a,b,c){"undefined"===typeof c&&(c=b,b=438);return T.yb(a,b|8192,c)},symlink:function(a,
|
||||
b){if(!rb(a))throw new T.Za(44);var c=T.eb(b,{parent:!0}).node;if(!c)throw new T.Za(44);b=S(b);var d=T.Ac(c,b);if(d)throw new T.Za(d);if(!c.$a.symlink)throw new T.Za(63);return c.$a.symlink(c,b,a)},rename:function(a,b){var c=nb(a),d=nb(b),f=S(a),g=S(b);var h=T.eb(a,{parent:!0});var n=h.node;h=T.eb(b,{parent:!0});h=h.node;if(!n||!h)throw new T.Za(44);if(n.gb!==h.gb)throw new T.Za(75);var p=T.vb(n,f);d=sb(a,d);if("."!==d.charAt(0))throw new T.Za(28);d=sb(b,c);if("."!==d.charAt(0))throw new T.Za(55);
|
||||
try{var q=T.vb(h,g)}catch(r){}if(p!==q){c=T.ib(p.mode);if(f=T.dc(n,f,c))throw new T.Za(f);if(f=q?T.dc(h,g,c):T.Ac(h,g))throw new T.Za(f);if(!n.$a.rename)throw new T.Za(63);if(T.Eb(p)||q&&T.Eb(q))throw new T.Za(10);if(h!==n&&(f=T.Bb(n,"w")))throw new T.Za(f);try{T.kb.willMovePath&&T.kb.willMovePath(a,b)}catch(r){k("FS.trackingDelegate['willMovePath']('"+a+"', '"+b+"') threw an exception: "+r.message)}T.Xc(p);try{n.$a.rename(p,h,g)}catch(r){throw r;}finally{T.Wc(p)}try{if(T.kb.onMovePath)T.kb.onMovePath(a,
|
||||
b)}catch(r){k("FS.trackingDelegate['onMovePath']('"+a+"', '"+b+"') threw an exception: "+r.message)}}},rmdir:function(a){var b=T.eb(a,{parent:!0}).node,c=S(a),d=T.vb(b,c),f=T.dc(b,c,!0);if(f)throw new T.Za(f);if(!b.$a.rmdir)throw new T.Za(63);if(T.Eb(d))throw new T.Za(10);try{T.kb.willDeletePath&&T.kb.willDeletePath(a)}catch(g){k("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+g.message)}b.$a.rmdir(b,c);T.rc(d);try{if(T.kb.onDeletePath)T.kb.onDeletePath(a)}catch(g){k("FS.trackingDelegate['onDeletePath']('"+
|
||||
a+"') threw an exception: "+g.message)}},readdir:function(a){a=T.eb(a,{sb:!0}).node;if(!a.$a.readdir)throw new T.Za(54);return a.$a.readdir(a)},unlink:function(a){var b=T.eb(a,{parent:!0}).node,c=S(a),d=T.vb(b,c),f=T.dc(b,c,!1);if(f)throw new T.Za(f);if(!b.$a.unlink)throw new T.Za(63);if(T.Eb(d))throw new T.Za(10);try{T.kb.willDeletePath&&T.kb.willDeletePath(a)}catch(g){k("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+g.message)}b.$a.unlink(b,c);T.rc(d);try{if(T.kb.onDeletePath)T.kb.onDeletePath(a)}catch(g){k("FS.trackingDelegate['onDeletePath']('"+
|
||||
a+"') threw an exception: "+g.message)}},readlink:function(a){a=T.eb(a).node;if(!a)throw new T.Za(44);if(!a.$a.readlink)throw new T.Za(28);return rb(T.Ab(a.parent),a.$a.readlink(a))},stat:function(a,b){a=T.eb(a,{sb:!b}).node;if(!a)throw new T.Za(44);if(!a.$a.ub)throw new T.Za(63);return a.$a.ub(a)},lstat:function(a){return T.stat(a,!0)},chmod:function(a,b,c){a="string"===typeof a?T.eb(a,{sb:!c}).node:a;if(!a.$a.lb)throw new T.Za(63);a.$a.lb(a,{mode:b&4095|a.mode&-4096,timestamp:Date.now()})},lchmod:function(a,
|
||||
b){T.chmod(a,b,!0)},fchmod:function(a,b){a=T.tb(a);if(!a)throw new T.Za(8);T.chmod(a.node,b)},chown:function(a,b,c,d){a="string"===typeof a?T.eb(a,{sb:!d}).node:a;if(!a.$a.lb)throw new T.Za(63);a.$a.lb(a,{timestamp:Date.now()})},lchown:function(a,b,c){T.chown(a,b,c,!0)},fchown:function(a,b,c){a=T.tb(a);if(!a)throw new T.Za(8);T.chown(a.node,b,c)},truncate:function(a,b){if(0>b)throw new T.Za(28);a="string"===typeof a?T.eb(a,{sb:!0}).node:a;if(!a.$a.lb)throw new T.Za(63);if(T.ib(a.mode))throw new T.Za(31);
|
||||
if(!T.isFile(a.mode))throw new T.Za(28);var c=T.Bb(a,"w");if(c)throw new T.Za(c);a.$a.lb(a,{size:b,timestamp:Date.now()})},ee:function(a,b){a=T.tb(a);if(!a)throw new T.Za(8);if(0===(a.flags&2097155))throw new T.Za(28);T.truncate(a.node,b)},qe:function(a,b,c){a=T.eb(a,{sb:!0}).node;a.$a.lb(a,{timestamp:Math.max(b,c)})},open:function(a,b,c,d,f){if(""===a)throw new T.Za(44);b="string"===typeof b?T.Jd(b):b;c=b&64?("undefined"===typeof c?438:c)&4095|32768:0;if("object"===typeof a)var g=a;else{a=mb(a);
|
||||
try{g=T.eb(a,{sb:!(b&131072)}).node}catch(n){}}var h=!1;if(b&64)if(g){if(b&128)throw new T.Za(20);}else g=T.yb(a,c,0),h=!0;if(!g)throw new T.Za(44);T.Ub(g.mode)&&(b&=-513);if(b&65536&&!T.ib(g.mode))throw new T.Za(54);if(!h&&(c=T.Id(g,b)))throw new T.Za(c);b&512&&T.truncate(g,0);b&=-131713;d=T.Mc({node:g,path:T.Ab(g),flags:b,seekable:!0,position:0,ab:g.ab,Yd:[],error:!1},d,f);d.ab.open&&d.ab.open(d);!e.logReadFiles||b&1||(T.Cc||(T.Cc={}),a in T.Cc||(T.Cc[a]=1,k("FS.trackingDelegate error on read file: "+
|
||||
a)));try{T.kb.onOpenFile&&(f=0,1!==(b&2097155)&&(f|=T.ed.$c.kd),0!==(b&2097155)&&(f|=T.ed.$c.ld),T.kb.onOpenFile(a,f))}catch(n){k("FS.trackingDelegate['onOpenFile']('"+a+"', flags) threw an exception: "+n.message)}return d},close:function(a){if(T.Vb(a))throw new T.Za(8);a.Cb&&(a.Cb=null);try{a.ab.close&&a.ab.close(a)}catch(b){throw b;}finally{T.rd(a.fd)}a.fd=null},Vb:function(a){return null===a.fd},pb:function(a,b,c){if(T.Vb(a))throw new T.Za(8);if(!a.seekable||!a.ab.pb)throw new T.Za(70);if(0!=c&&
|
||||
1!=c&&2!=c)throw new T.Za(28);a.position=a.ab.pb(a,b,c);a.Yd=[];return a.position},read:function(a,b,c,d,f){c>>>=0;if(0>d||0>f)throw new T.Za(28);if(T.Vb(a))throw new T.Za(8);if(1===(a.flags&2097155))throw new T.Za(8);if(T.ib(a.node.mode))throw new T.Za(31);if(!a.ab.read)throw new T.Za(28);var g="undefined"!==typeof f;if(!g)f=a.position;else if(!a.seekable)throw new T.Za(70);b=a.ab.read(a,b,c,d,f);g||(a.position+=b);return b},write:function(a,b,c,d,f,g){c>>>=0;if(0>d||0>f)throw new T.Za(28);if(T.Vb(a))throw new T.Za(8);
|
||||
if(0===(a.flags&2097155))throw new T.Za(8);if(T.ib(a.node.mode))throw new T.Za(31);if(!a.ab.write)throw new T.Za(28);a.seekable&&a.flags&1024&&T.pb(a,0,2);var h="undefined"!==typeof f;if(!h)f=a.position;else if(!a.seekable)throw new T.Za(70);b=a.ab.write(a,b,c,d,f,g);h||(a.position+=b);try{if(a.path&&T.kb.onWriteToFile)T.kb.onWriteToFile(a.path)}catch(n){k("FS.trackingDelegate['onWriteToFile']('"+a.path+"') threw an exception: "+n.message)}return b},Sb:function(a,b,c){if(T.Vb(a))throw new T.Za(8);
|
||||
if(0>b||0>=c)throw new T.Za(28);if(0===(a.flags&2097155))throw new T.Za(8);if(!T.isFile(a.node.mode)&&!T.ib(a.node.mode))throw new T.Za(43);if(!a.ab.Sb)throw new T.Za(138);a.ab.Sb(a,b,c)},Kb:function(a,b,c,d,f,g){b>>>=0;if(0!==(f&2)&&0===(g&2)&&2!==(a.flags&2097155))throw new T.Za(2);if(1===(a.flags&2097155))throw new T.Za(2);if(!a.ab.Kb)throw new T.Za(43);return a.ab.Kb(a,b,c,d,f,g)},Lb:function(a,b,c,d,f){return a&&a.ab.Lb?a.ab.Lb(a,b,c>>>0,d,f):0},le:function(){return 0},Jb:function(a,b,c){if(!a.ab.Jb)throw new T.Za(59);
|
||||
return a.ab.Jb(a,b,c)},readFile:function(a,b){b=b||{};b.flags=b.flags||0;b.encoding=b.encoding||"binary";if("utf8"!==b.encoding&&"binary"!==b.encoding)throw Error('Invalid encoding type "'+b.encoding+'"');var c,d=T.open(a,b.flags);a=T.stat(a).size;var f=new Uint8Array(a);T.read(d,f,0,a,0);"utf8"===b.encoding?c=za(f,0):"binary"===b.encoding&&(c=f);T.close(d);return c},writeFile:function(a,b,c){c=c||{};c.flags=c.flags||577;a=T.open(a,c.flags,c.mode);if("string"===typeof b){var d=new Uint8Array(Aa(b)+
|
||||
1);b=C(b,d,0,d.length);T.write(a,d,0,b,void 0,c.pd)}else if(ArrayBuffer.isView(b))T.write(a,b,0,b.byteLength,void 0,c.pd);else throw Error("Unsupported data type");T.close(a)},cwd:function(){return T.Nc},chdir:function(a){a=T.eb(a,{sb:!0});if(null===a.node)throw new T.Za(44);if(!T.ib(a.node.mode))throw new T.Za(54);var b=T.Bb(a.node,"x");if(b)throw new T.Za(b);T.Nc=a.path},td:function(){T.mkdir("/tmp");T.mkdir("/home");T.mkdir("/home/web_user")},sd:function(){T.mkdir("/dev");T.Ec(T.Fb(1,3),{read:function(){return 0},
|
||||
write:function(b,c,d,f){return f}});T.ec("/dev/null",T.Fb(1,3));ub(T.Fb(5,0),xb);ub(T.Fb(6,0),yb);T.ec("/dev/tty",T.Fb(5,0));T.ec("/dev/tty1",T.Fb(6,0));var a=qb();T.zb("/dev","random",a);T.zb("/dev","urandom",a);T.mkdir("/dev/shm");T.mkdir("/dev/shm/tmp")},vd:function(){T.mkdir("/proc");var a=T.mkdir("/proc/self");T.mkdir("/proc/self/fd");T.gb({gb:function(){var b=T.createNode(a,"fd",16895,73);b.$a={lookup:function(c,d){var f=T.tb(+d);if(!f)throw new T.Za(8);c={parent:null,gb:{Zc:"fake"},$a:{readlink:function(){return f.path}}};
|
||||
return c.parent=c}};return b}},{},"/proc/self/fd")},wd:function(){e.stdin?T.zb("/dev","stdin",e.stdin):T.symlink("/dev/tty","/dev/stdin");e.stdout?T.zb("/dev","stdout",null,e.stdout):T.symlink("/dev/tty","/dev/stdout");e.stderr?T.zb("/dev","stderr",null,e.stderr):T.symlink("/dev/tty1","/dev/stderr");T.open("/dev/stdin",0);T.open("/dev/stdout",1);T.open("/dev/stderr",1)},Pc:function(){T.Za||(T.Za=function(a,b){this.node=b;this.Sd=function(c){this.bb=c};this.Sd(a);this.message="FS error"},T.Za.prototype=
|
||||
Error(),T.Za.prototype.constructor=T.Za,[44].forEach(function(a){T.tc[a]=new T.Za(a);T.tc[a].stack="<generic error, no stack>"}))},Td:function(){T.Pc();T.wb=Array(4096);T.gb(U,{},"/");T.td();T.sd();T.vd();T.yd={MEMFS:U}},Tb:function(a,b,c){T.Tb.wc=!0;T.Pc();e.stdin=a||e.stdin;e.stdout=b||e.stdout;e.stderr=c||e.stderr;T.wd()},quit:function(){T.Tb.wc=!1;var a=e._fflush;a&&a(0);for(a=0;a<T.streams.length;a++){var b=T.streams[a];b&&T.close(b)}},uc:function(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c},
|
||||
de:function(a,b){a=T.pc(a,b);return a.exists?a.object:null},pc:function(a,b){try{var c=T.eb(a,{sb:!b});a=c.path}catch(f){}var d={cc:!1,exists:!1,error:0,name:null,path:null,object:null,Md:!1,Od:null,Nd:null};try{c=T.eb(a,{parent:!0}),d.Md=!0,d.Od=c.path,d.Nd=c.node,d.name=S(a),c=T.eb(a,{sb:!b}),d.exists=!0,d.path=c.path,d.object=c.node,d.name=c.node.name,d.cc="/"===c.path}catch(f){d.error=f.bb}return d},be:function(a,b){a="string"===typeof a?a:T.Ab(a);for(b=b.split("/").reverse();b.length;){var c=
|
||||
b.pop();if(c){var d=pb(a,c);try{T.mkdir(d)}catch(f){}a=d}}return d},ud:function(a,b,c,d,f){a=pb("string"===typeof a?a:T.Ab(a),b);return T.create(a,T.uc(d,f))},Lc:function(a,b,c,d,f,g){a=b?pb("string"===typeof a?a:T.Ab(a),b):a;d=T.uc(d,f);f=T.create(a,d);if(c){if("string"===typeof c){a=Array(c.length);b=0;for(var h=c.length;b<h;++b)a[b]=c.charCodeAt(b);c=a}T.chmod(f,d|146);a=T.open(f,577);T.write(a,c,0,c.length,0,g);T.close(a);T.chmod(f,d)}return f},zb:function(a,b,c,d){a=pb("string"===typeof a?a:
|
||||
T.Ab(a),b);b=T.uc(!!c,!!d);T.zb.zc||(T.zb.zc=64);var f=T.Fb(T.zb.zc++,0);T.Ec(f,{open:function(g){g.seekable=!1},close:function(){d&&d.buffer&&d.buffer.length&&d(10)},read:function(g,h,n,p){for(var q=0,r=0;r<p;r++){try{var w=c()}catch(z){throw new T.Za(29);}if(void 0===w&&0===q)throw new T.Za(6);if(null===w||void 0===w)break;q++;h[n+r]=w}q&&(g.node.timestamp=Date.now());return q},write:function(g,h,n,p){for(var q=0;q<p;q++)try{d(h[n+q])}catch(r){throw new T.Za(29);}p&&(g.node.timestamp=Date.now());
|
||||
return q}});return T.ec(a,b,f)},Sc:function(a){if(a.xc||a.Ed||a.link||a.cb)return!0;if("undefined"!==typeof XMLHttpRequest)throw Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");if(ma)try{a.cb=wb(ma(a.url),!0),a.fb=a.cb.length}catch(b){throw new T.Za(29);}else throw Error("Cannot load without read() or XMLHttpRequest.");},ae:function(a,b,c,d,f){function g(){this.yc=
|
||||
!1;this.Ib=[]}g.prototype.get=function(q){if(!(q>this.length-1||0>q)){var r=q%this.chunkSize;return this.Vc(q/this.chunkSize|0)[r]}};g.prototype.gd=function(q){this.Vc=q};g.prototype.Jc=function(){var q=new XMLHttpRequest;q.open("HEAD",c,!1);q.send(null);if(!(200<=q.status&&300>q.status||304===q.status))throw Error("Couldn't load "+c+". Status: "+q.status);var r=Number(q.getResponseHeader("Content-length")),w,z=(w=q.getResponseHeader("Accept-Ranges"))&&"bytes"===w;q=(w=q.getResponseHeader("Content-Encoding"))&&
|
||||
"gzip"===w;var m=1048576;z||(m=r);var t=this;t.gd(function(u){var F=u*m,J=(u+1)*m-1;J=Math.min(J,r-1);if("undefined"===typeof t.Ib[u]){var db=t.Ib;if(F>J)throw Error("invalid range ("+F+", "+J+") or no bytes requested!");if(J>r-1)throw Error("only "+r+" bytes available! programmer error!");var A=new XMLHttpRequest;A.open("GET",c,!1);r!==m&&A.setRequestHeader("Range","bytes="+F+"-"+J);"undefined"!=typeof Uint8Array&&(A.responseType="arraybuffer");A.overrideMimeType&&A.overrideMimeType("text/plain; charset=x-user-defined");
|
||||
A.send(null);if(!(200<=A.status&&300>A.status||304===A.status))throw Error("Couldn't load "+c+". Status: "+A.status);F=void 0!==A.response?new Uint8Array(A.response||[]):wb(A.responseText||"",!0);db[u]=F}if("undefined"===typeof t.Ib[u])throw Error("doXHR failed!");return t.Ib[u]});if(q||!r)m=r=1,m=r=this.Vc(0).length,ea("LazyFiles on gzip forces download of the whole file when length is accessed");this.nd=r;this.md=m;this.yc=!0};if("undefined"!==typeof XMLHttpRequest){if(!v)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";
|
||||
var h=new g;Object.defineProperties(h,{length:{get:function(){this.yc||this.Jc();return this.nd}},chunkSize:{get:function(){this.yc||this.Jc();return this.md}}});h={xc:!1,cb:h}}else h={xc:!1,url:c};var n=T.ud(a,b,h,d,f);h.cb?n.cb=h.cb:h.url&&(n.cb=null,n.url=h.url);Object.defineProperties(n,{fb:{get:function(){return this.cb.length}}});var p={};Object.keys(n.ab).forEach(function(q){var r=n.ab[q];p[q]=function(){T.Sc(n);return r.apply(null,arguments)}});p.read=function(q,r,w,z,m){T.Sc(n);q=q.node.cb;
|
||||
if(m>=q.length)return 0;z=Math.min(q.length-m,z);if(q.slice)for(var t=0;t<z;t++)r[w+t]=q[m+t];else for(t=0;t<z;t++)r[w+t]=q.get(m+t);return z};n.ab=p;return n},ce:function(a,b,c,d,f,g,h,n,p,q){function r(z){function m(u){q&&q();n||T.Lc(a,b,u,d,f,p);g&&g();Ua()}var t=!1;e.preloadPlugins.forEach(function(u){!t&&u.canHandle(w)&&(u.handle(z,w,m,function(){h&&h();Ua()}),t=!0)});t||m(z)}zb.Tb();var w=b?rb(pb(a,b)):a;Ta();"string"==typeof c?zb.Zd(c,function(z){r(z)},h):r(c)},indexedDB:function(){return window.indexedDB||
|
||||
window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},Fc:function(){return"EM_FS_"+window.location.pathname},Gc:20,Rb:"FILE_DATA",ne:function(a,b,c){b=b||function(){};c=c||function(){};var d=T.indexedDB();try{var f=d.open(T.Fc(),T.Gc)}catch(g){return c(g)}f.onupgradeneeded=function(){ea("creating db");f.result.createObjectStore(T.Rb)};f.onsuccess=function(){var g=f.result.transaction([T.Rb],"readwrite"),h=g.objectStore(T.Rb),n=0,p=0,q=a.length;a.forEach(function(r){r=h.put(T.pc(r).object.cb,
|
||||
r);r.onsuccess=function(){n++;n+p==q&&(0==p?b():c())};r.onerror=function(){p++;n+p==q&&(0==p?b():c())}});g.onerror=c};f.onerror=c},ie:function(a,b,c){b=b||function(){};c=c||function(){};var d=T.indexedDB();try{var f=d.open(T.Fc(),T.Gc)}catch(g){return c(g)}f.onupgradeneeded=c;f.onsuccess=function(){var g=f.result;try{var h=g.transaction([T.Rb],"readonly")}catch(w){c(w);return}var n=h.objectStore(T.Rb),p=0,q=0,r=a.length;a.forEach(function(w){var z=n.get(w);z.onsuccess=function(){T.pc(w).exists&&T.unlink(w);
|
||||
T.Lc(nb(w),S(w),z.result,!0,!0,!0);p++;p+q==r&&(0==q?b():c())};z.onerror=function(){q++;p+q==r&&(0==q?b():c())}});h.onerror=c};f.onerror=c}},Ab={};
|
||||
function Bb(a,b,c){try{var d=a(b)}catch(f){if(f&&f.node&&mb(b)!==mb(T.Ab(f.node)))return-54;throw f;}M[c>>2>>>0]=d.dev;M[c+4>>2>>>0]=0;M[c+8>>2>>>0]=d.ino;M[c+12>>2>>>0]=d.mode;M[c+16>>2>>>0]=d.nlink;M[c+20>>2>>>0]=d.uid;M[c+24>>2>>>0]=d.gid;M[c+28>>2>>>0]=d.rdev;M[c+32>>2>>>0]=0;R=[d.size>>>0,(Q=d.size,1<=+Math.abs(Q)?0<Q?(Math.min(+Math.floor(Q/4294967296),4294967295)|0)>>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[c+40>>2>>>0]=R[0];M[c+44>>2>>>0]=R[1];M[c+48>>2>>>0]=4096;M[c+52>>2>>>0]=
|
||||
d.blocks;M[c+56>>2>>>0]=d.atime.getTime()/1E3|0;M[c+60>>2>>>0]=0;M[c+64>>2>>>0]=d.mtime.getTime()/1E3|0;M[c+68>>2>>>0]=0;M[c+72>>2>>>0]=d.ctime.getTime()/1E3|0;M[c+76>>2>>>0]=0;R=[d.ino>>>0,(Q=d.ino,1<=+Math.abs(Q)?0<Q?(Math.min(+Math.floor(Q/4294967296),4294967295)|0)>>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[c+80>>2>>>0]=R[0];M[c+84>>2>>>0]=R[1];return 0}var Cb=void 0;function Db(){Cb+=4;return M[Cb-4>>2>>>0]}function V(a){a=T.tb(a);if(!a)throw new T.Za(8);return a}
|
||||
var W={gb:function(){e.websocket=e.websocket&&"object"===typeof e.websocket?e.websocket:{};e.websocket.nc={};e.websocket.on=function(a,b){"function"===typeof b&&(this.nc[a]=b);return this};e.websocket.emit=function(a,b){"function"===typeof this.nc[a]&&this.nc[a].call(this,b)};return T.createNode(null,"/",16895,0)},createSocket:function(a,b,c){b&=-526337;c&&assert(1==b==(6==c));a={family:a,type:b,protocol:c,jb:null,error:null,Yb:{},pending:[],Ob:[],qb:W.mb};b=W.fc();c=T.createNode(W.root,b,49152,0);
|
||||
c.Pb=a;b=T.Mc({path:b,node:c,flags:2,seekable:!1,ab:W.ab});a.stream=b;return a},Bd:function(a){return(a=T.tb(a))&&T.isSocket(a.node.mode)?a.node.Pb:null},ab:{Nb:function(a){a=a.node.Pb;return a.qb.Nb(a)},Jb:function(a,b,c){a=a.node.Pb;return a.qb.Jb(a,b,c)},read:function(a,b,c,d){a=a.node.Pb;d=a.qb.ad(a,d);if(!d)return 0;b.set(d.buffer,c);return d.buffer.length},write:function(a,b,c,d){a=a.node.Pb;return a.qb.cd(a,b,c,d)},close:function(a){a=a.node.Pb;a.qb.close(a)}},fc:function(){W.fc.current||(W.fc.current=
|
||||
0);return"socket["+W.fc.current++ +"]"},mb:{$b:function(a,b,c){if("object"===typeof b){var d=b;c=b=null}if(d)if(d._socket)b=d._socket.remoteAddress,c=d._socket.remotePort;else{c=/ws[s]?:\/\/([^:]+):(\d+)/.exec(d.url);if(!c)throw Error("WebSocket URL must be in the format ws(s)://address:port");b=c[1];c=parseInt(c[2],10)}else try{var f=e.websocket&&"object"===typeof e.websocket,g="ws:#".replace("#","//");f&&"string"===typeof e.websocket.url&&(g=e.websocket.url);if("ws://"===g||"wss://"===g){var h=
|
||||
b.split("/");g=g+h[0]+":"+c+"/"+h.slice(1).join("/")}h="binary";f&&"string"===typeof e.websocket.subprotocol&&(h=e.websocket.subprotocol);var n=void 0;"null"!==h&&(h=h.replace(/^ +| +$/g,"").split(/ *, */),n=x?{protocol:h.toString()}:h);f&&null===e.websocket.subprotocol&&(n=void 0);d=new (x?require("ws"):WebSocket)(g,n);d.binaryType="arraybuffer"}catch(p){throw new T.Za(23);}b={hb:b,port:c,socket:d,ac:[]};W.mb.Ic(a,b);W.mb.Cd(a,b);2===a.type&&"undefined"!==typeof a.Hb&&b.ac.push(new Uint8Array([255,
|
||||
255,255,255,112,111,114,116,(a.Hb&65280)>>8,a.Hb&255]));return b},bc:function(a,b,c){return a.Yb[b+":"+c]},Ic:function(a,b){a.Yb[b.hb+":"+b.port]=b},bd:function(a,b){delete a.Yb[b.hb+":"+b.port]},Cd:function(a,b){function c(){e.websocket.emit("open",a.stream.fd);try{for(var g=b.ac.shift();g;)b.socket.send(g),g=b.ac.shift()}catch(h){b.socket.close()}}function d(g){if("string"===typeof g)g=(new TextEncoder).encode(g);else{assert(void 0!==g.byteLength);if(0==g.byteLength)return;g=new Uint8Array(g)}var h=
|
||||
f;f=!1;h&&10===g.length&&255===g[0]&&255===g[1]&&255===g[2]&&255===g[3]&&112===g[4]&&111===g[5]&&114===g[6]&&116===g[7]?(g=g[8]<<8|g[9],W.mb.bd(a,b),b.port=g,W.mb.Ic(a,b)):(a.Ob.push({hb:b.hb,port:b.port,data:g}),e.websocket.emit("message",a.stream.fd))}var f=!0;x?(b.socket.on("open",c),b.socket.on("message",function(g,h){h.$d&&d((new Uint8Array(g)).buffer)}),b.socket.on("close",function(){e.websocket.emit("close",a.stream.fd)}),b.socket.on("error",function(){a.error=14;e.websocket.emit("error",[a.stream.fd,
|
||||
a.error,"ECONNREFUSED: Connection refused"])})):(b.socket.onopen=c,b.socket.onclose=function(){e.websocket.emit("close",a.stream.fd)},b.socket.onmessage=function(g){d(g.data)},b.socket.onerror=function(){a.error=14;e.websocket.emit("error",[a.stream.fd,a.error,"ECONNREFUSED: Connection refused"])})},Nb:function(a){if(1===a.type&&a.jb)return a.pending.length?65:0;var b=0,c=1===a.type?W.mb.bc(a,a.ob,a.rb):null;if(a.Ob.length||!c||c&&c.socket.readyState===c.socket.CLOSING||c&&c.socket.readyState===c.socket.CLOSED)b|=
|
||||
65;if(!c||c&&c.socket.readyState===c.socket.OPEN)b|=4;if(c&&c.socket.readyState===c.socket.CLOSING||c&&c.socket.readyState===c.socket.CLOSED)b|=16;return b},Jb:function(a,b,c){switch(b){case 21531:return b=0,a.Ob.length&&(b=a.Ob[0].data.length),M[c>>2>>>0]=b,0;default:return 28}},close:function(a){if(a.jb){try{a.jb.close()}catch(f){}a.jb=null}for(var b=Object.keys(a.Yb),c=0;c<b.length;c++){var d=a.Yb[b[c]];try{d.socket.close()}catch(f){}W.mb.bd(a,d)}return 0},bind:function(a,b,c){if("undefined"!==
|
||||
typeof a.hc||"undefined"!==typeof a.Hb)throw new T.Za(28);a.hc=b;a.Hb=c;if(2===a.type){a.jb&&(a.jb.close(),a.jb=null);try{a.qb.listen(a,0)}catch(d){if(!(d instanceof T.Za))throw d;if(138!==d.bb)throw d;}}},connect:function(a,b,c){if(a.jb)throw new T.Za(138);if("undefined"!==typeof a.ob&&"undefined"!==typeof a.rb){var d=W.mb.bc(a,a.ob,a.rb);if(d){if(d.socket.readyState===d.socket.CONNECTING)throw new T.Za(7);throw new T.Za(30);}}b=W.mb.$b(a,b,c);a.ob=b.hb;a.rb=b.port;throw new T.Za(26);},listen:function(a){if(!x)throw new T.Za(138);
|
||||
if(a.jb)throw new T.Za(28);var b=require("ws").Server;a.jb=new b({host:a.hc,port:a.Hb});e.websocket.emit("listen",a.stream.fd);a.jb.on("connection",function(c){if(1===a.type){var d=W.createSocket(a.family,a.type,a.protocol);c=W.mb.$b(d,c);d.ob=c.hb;d.rb=c.port;a.pending.push(d);e.websocket.emit("connection",d.stream.fd)}else W.mb.$b(a,c),e.websocket.emit("connection",a.stream.fd)});a.jb.on("closed",function(){e.websocket.emit("close",a.stream.fd);a.jb=null});a.jb.on("error",function(){a.error=23;
|
||||
e.websocket.emit("error",[a.stream.fd,a.error,"EHOSTUNREACH: Host is unreachable"])})},accept:function(a){if(!a.jb)throw new T.Za(28);var b=a.pending.shift();b.stream.flags=a.stream.flags;return b},he:function(a,b){if(b){if(void 0===a.ob||void 0===a.rb)throw new T.Za(53);b=a.ob;a=a.rb}else b=a.hc||0,a=a.Hb||0;return{hb:b,port:a}},cd:function(a,b,c,d,f,g){if(2===a.type){if(void 0===f||void 0===g)f=a.ob,g=a.rb;if(void 0===f||void 0===g)throw new T.Za(17);}else f=a.ob,g=a.rb;var h=W.mb.bc(a,f,g);if(1===
|
||||
a.type){if(!h||h.socket.readyState===h.socket.CLOSING||h.socket.readyState===h.socket.CLOSED)throw new T.Za(53);if(h.socket.readyState===h.socket.CONNECTING)throw new T.Za(6);}ArrayBuffer.isView(b)&&(c+=b.byteOffset,b=b.buffer);b=b.slice(c,c+d);if(2===a.type&&(!h||h.socket.readyState!==h.socket.OPEN))return h&&h.socket.readyState!==h.socket.CLOSING&&h.socket.readyState!==h.socket.CLOSED||(h=W.mb.$b(a,f,g)),h.ac.push(b),d;try{return h.socket.send(b),d}catch(n){throw new T.Za(28);}},ad:function(a,b){if(1===
|
||||
a.type&&a.jb)throw new T.Za(53);var c=a.Ob.shift();if(!c){if(1===a.type){if(a=W.mb.bc(a,a.ob,a.rb)){if(a.socket.readyState===a.socket.CLOSING||a.socket.readyState===a.socket.CLOSED)return null;throw new T.Za(6);}throw new T.Za(53);}throw new T.Za(6);}var d=c.data.byteLength||c.data.length,f=c.data.byteOffset||0,g=c.data.buffer||c.data;b=Math.min(b,d);var h={buffer:new Uint8Array(g,f,b),hb:c.hb,port:c.port};1===a.type&&b<d&&(c.data=new Uint8Array(g,f+b,d-b),a.Ob.unshift(c));return h}}};
|
||||
function X(a){a=W.Bd(a);if(!a)throw new T.Za(8);return a}function Eb(a){a=a.split(".");for(var b=0;4>b;b++){var c=Number(a[b]);if(isNaN(c))return null;a[b]=c}return(a[0]|a[1]<<8|a[2]<<16|a[3]<<24)>>>0}
|
||||
function Fb(a){var b,c,d=[];if(!/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i.test(a))return null;if("::"===a)return[0,0,0,0,0,0,0,0];a=a.startsWith("::")?a.replace("::","Z:"):a.replace("::",":Z:");0<a.indexOf(".")?(a=a.replace(/[.]/g,":"),a=a.split(":"),a[a.length-4]=parseInt(a[a.length-4])+256*parseInt(a[a.length-3]),a[a.length-3]=parseInt(a[a.length-2])+256*parseInt(a[a.length-
|
||||
1]),a=a.slice(0,a.length-2)):a=a.split(":");for(b=c=0;b<a.length;b++)if("string"===typeof a[b])if("Z"===a[b]){for(c=0;c<8-a.length+1;c++)d[b+c]=0;--c}else d[b+c]=Gb(parseInt(a[b],16));else d[b+c]=a[b];return[d[1]<<16|d[0],d[3]<<16|d[2],d[5]<<16|d[4],d[7]<<16|d[6]]}
|
||||
function Hb(a,b,c,d,f){switch(b){case 2:c=Eb(c);f&&(M[f>>2>>>0]=16);L[a>>1>>>0]=b;M[a+4>>2>>>0]=c;L[a+2>>1>>>0]=Gb(d);R=[0,(Q=0,1<=+Math.abs(Q)?0<Q?(Math.min(+Math.floor(Q/4294967296),4294967295)|0)>>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[a+8>>2>>>0]=R[0];M[a+12>>2>>>0]=R[1];break;case 10:c=Fb(c);f&&(M[f>>2>>>0]=28);M[a>>2>>>0]=b;M[a+8>>2>>>0]=c[0];M[a+12>>2>>>0]=c[1];M[a+16>>2>>>0]=c[2];M[a+20>>2>>>0]=c[3];L[a+2>>1>>>0]=Gb(d);M[a+4>>2>>>0]=0;M[a+24>>2>>>0]=0;break;default:return 5}return 0}
|
||||
var Ib=1,Jb={},Kb={};function Lb(a){var b=Eb(a);if(null!==b)return a;b=Fb(a);if(null!==b)return a;Jb[a]?b=Jb[a]:(b=Ib++,assert(65535>b,"exceeded max address mappings of 65535"),b="172.29."+(b&255)+"."+(b&65280),Kb[b]=a,Jb[a]=b);return b}function Mb(a){return(a&255)+"."+(a>>8&255)+"."+(a>>16&255)+"."+(a>>24&255)}
|
||||
function Nb(a){var b="",c,d=0,f=0,g=0,h=0;a=[a[0]&65535,a[0]>>16,a[1]&65535,a[1]>>16,a[2]&65535,a[2]>>16,a[3]&65535,a[3]>>16];var n=!0;for(c=0;5>c;c++)if(0!==a[c]){n=!1;break}if(n){c=Mb(a[6]|a[7]<<16);if(-1===a[5])return"::ffff:"+c;if(0===a[5])return"0.0.0.0"===c&&(c=""),"0.0.0.1"===c&&(c="1"),"::"+c}for(c=0;8>c;c++)0===a[c]&&(1<c-f&&(h=0),f=c,h++),h>d&&(d=h,g=c-d+1);for(c=0;8>c;c++)1<d&&0===a[c]&&c>=g&&c<g+d?c===g&&(b+=":",0===g&&(b+=":")):(b+=Number(Ob(a[c]&65535)).toString(16),b+=7>c?":":"");return b}
|
||||
function Pb(a,b){var c=L[a>>1>>>0],d=Ob(Fa[a+2>>1>>>0]);switch(c){case 2:if(16!==b)return{bb:28};a=M[a+4>>2>>>0];a=Mb(a);break;case 10:if(28!==b)return{bb:28};a=[M[a+8>>2>>>0],M[a+12>>2>>>0],M[a+16>>2>>>0],M[a+20>>2>>>0]];a=Nb(a);break;default:return{bb:5}}return{family:c,hb:a,port:d}}function Qb(a,b,c){if(c&&0===a)return null;a=Pb(a,b);if(a.bb)throw new T.Za(a.bb);b=a.hb;a.hb=(Kb[b]?Kb[b]:null)||a.hb;return a}
|
||||
function Rb(){void 0===Rb.start&&(Rb.start=Date.now());return 1E3*(Date.now()-Rb.start)|0}var Sb={};function Tb(){if(!Ub){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ia||"./this.program"},b;for(b in Sb)void 0===Sb[b]?delete a[b]:a[b]=Sb[b];var c=[];for(b in a)c.push(b+"="+a[b]);Ub=c}return Ub}var Ub,Y={};
|
||||
function Vb(a){Vb.buffer||(Vb.buffer=Ca(256),Y["0"]="Success",Y["-1"]="Invalid value for 'ai_flags' field",Y["-2"]="NAME or SERVICE is unknown",Y["-3"]="Temporary failure in name resolution",Y["-4"]="Non-recoverable failure in name res",Y["-6"]="'ai_family' not supported",Y["-7"]="'ai_socktype' not supported",Y["-8"]="SERVICE not supported for 'ai_socktype'",Y["-10"]="Memory allocation failure",Y["-11"]="System error returned in 'errno'",Y["-12"]="Argument buffer overflow");var b="Unknown error";
|
||||
a in Y&&(255<Y[a].length?b="Message too long":b=Y[a]);K(b,Vb.buffer);return Vb.buffer}function Wb(a){return 0===a%4&&(0!==a%100||0===a%400)}function Xb(a,b){for(var c=0,d=0;d<=b;c+=a[d++]);return c}var Yb=[31,29,31,30,31,30,31,31,30,31,30,31],Zb=[31,28,31,30,31,30,31,31,30,31,30,31];
|
||||
function $b(a,b){for(a=new Date(a.getTime());0<b;){var c=a.getMonth(),d=(Wb(a.getFullYear())?Yb:Zb)[c];if(b>d-a.getDate())b-=d-a.getDate()+1,a.setDate(1),11>c?a.setMonth(c+1):(a.setMonth(0),a.setFullYear(a.getFullYear()+1));else{a.setDate(a.getDate()+b);break}}return a}function ac(a,b,c,d){a||(a=this);this.parent=a;this.gb=a.gb;this.Wb=null;this.id=T.Kd++;this.name=b;this.mode=c;this.$a={};this.ab={};this.rdev=d}
|
||||
Object.defineProperties(ac.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}},Ed:{get:function(){return T.ib(this.mode)}},xc:{get:function(){return T.Ub(this.mode)}}});T.hd=ac;T.Td();var zb;function wb(a,b){var c=Array(Aa(a)+1);a=C(a,c,0,c.length);b&&(c.length=a);return c}
|
||||
var vc={b:function(a,b,c,d){B("Assertion failed: "+H(a)+", at: "+[b?H(b):"unknown filename",c,d?H(d):"unknown function"])},la:function(a,b){return bb(a,b)},ca:function(a,b){return eb(a,b)},ba:function(a,b){return kb(a,b)},na:function(a,b,c,d){try{for(var f=0,g=b?M[b>>2>>>0]:0,h=b?M[b+4>>2>>>0]:0,n=c?M[c>>2>>>0]:0,p=c?M[c+4>>2>>>0]:0,q=d?M[d>>2>>>0]:0,r=d?M[d+4>>2>>>0]:0,w=0,z=0,m=0,t=0,u=0,F=0,J=(b?M[b>>2>>>0]:0)|(c?M[c>>2>>>0]:0)|(d?M[d>>2>>>0]:0),db=(b?M[b+4>>2>>>0]:0)|(c?M[c+4>>2>>>0]:0)|(d?M[d+
|
||||
4>>2>>>0]:0),A=0;A<a;A++){var N=1<<A%32;if(32>A?J&N:db&N){var Oa=T.tb(A);if(!Oa)throw new T.Za(8);var Pa=5;Oa.ab.Nb&&(Pa=Oa.ab.Nb(Oa));Pa&1&&(32>A?g&N:h&N)&&(32>A?w|=N:z|=N,f++);Pa&4&&(32>A?n&N:p&N)&&(32>A?m|=N:t|=N,f++);Pa&2&&(32>A?q&N:r&N)&&(32>A?u|=N:F|=N,f++)}}b&&(M[b>>2>>>0]=w,M[b+4>>2>>>0]=z);c&&(M[c>>2>>>0]=m,M[c+4>>2>>>0]=t);d&&(M[d>>2>>>0]=u,M[d+4>>2>>>0]=F);return f}catch(ob){return"undefined"!==typeof T&&ob instanceof T.Za||B(ob),-ob.bb}},S:function(a,b,c){try{var d=X(a),f=d.qb.accept(d);
|
||||
b&&Hb(b,f.family,Lb(f.ob),f.rb,c);return f.stream.fd}catch(g){return"undefined"!==typeof T&&g instanceof T.Za||B(g),-g.bb}},pa:function(a,b){try{a=H(a);if(b&-8)var c=-28;else{var d;(d=T.eb(a,{sb:!0}).node)?(a="",b&4&&(a+="r"),b&2&&(a+="w"),b&1&&(a+="x"),c=a&&T.Bb(d,a)?-2:0):c=-44}return c}catch(f){return"undefined"!==typeof T&&f instanceof T.Za||B(f),-f.bb}},V:function(a,b,c){try{var d=X(a),f=Qb(b,c);d.qb.bind(d,f.hb,f.port);return 0}catch(g){return"undefined"!==typeof T&&g instanceof T.Za||B(g),
|
||||
-g.bb}},U:function(a,b,c){try{var d=X(a),f=Qb(b,c);d.qb.connect(d,f.hb,f.port);return 0}catch(g){return"undefined"!==typeof T&&g instanceof T.Za||B(g),-g.bb}},l:function(a,b,c){Cb=c;try{var d=V(a);switch(b){case 0:var f=Db();return 0>f?-28:T.open(d.path,d.flags,0,f).fd;case 1:case 2:return 0;case 3:return d.flags;case 4:return f=Db(),d.flags|=f,0;case 12:return f=Db(),L[f+0>>1>>>0]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return M[cb()>>2>>>0]=28,-1;default:return-28}}catch(g){return"undefined"!==
|
||||
typeof T&&g instanceof T.Za||B(g),-g.bb}},va:function(a,b){try{var c=V(a);return Bb(T.stat,c.path,b)}catch(d){return"undefined"!==typeof T&&d instanceof T.Za||B(d),-d.bb}},ga:function(a,b,c){try{var d=V(a);d.Cb||(d.Cb=T.readdir(d.path));a=0;for(var f=T.pb(d,0,1),g=Math.floor(f/280);g<d.Cb.length&&a+280<=c;){var h=d.Cb[g];if("."===h[0]){var n=1;var p=4}else{var q=T.vb(d.node,h);n=q.id;p=T.Ub(q.mode)?2:T.ib(q.mode)?4:T.Db(q.mode)?10:8}R=[n>>>0,(Q=n,1<=+Math.abs(Q)?0<Q?(Math.min(+Math.floor(Q/4294967296),
|
||||
4294967295)|0)>>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[b+a>>2>>>0]=R[0];M[b+a+4>>2>>>0]=R[1];R=[280*(g+1)>>>0,(Q=280*(g+1),1<=+Math.abs(Q)?0<Q?(Math.min(+Math.floor(Q/4294967296),4294967295)|0)>>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[b+a+8>>2>>>0]=R[0];M[b+a+12>>2>>>0]=R[1];L[b+a+16>>1>>>0]=280;E[b+a+18>>0>>>0]=p;C(h,D,b+a+19,256);a+=280;g+=1}T.pb(d,280*g,0);return a}catch(r){return"undefined"!==typeof T&&r instanceof T.Za||B(r),-r.bb}},Q:function(a,b,c){try{var d=X(a);
|
||||
if(!d.ob)return-53;Hb(b,d.family,Lb(d.ob),d.rb,c);return 0}catch(f){return"undefined"!==typeof T&&f instanceof T.Za||B(f),-f.bb}},ja:function(a,b){try{return bc(b,0,136),M[b>>2>>>0]=1,M[b+4>>2>>>0]=2,M[b+8>>2>>>0]=3,M[b+12>>2>>>0]=4,0}catch(c){return"undefined"!==typeof T&&c instanceof T.Za||B(c),-c.bb}},R:function(a,b,c){try{k("__sys_getsockname "+a);var d=X(a);Hb(b,d.family,Lb(d.hc||"0.0.0.0"),d.Hb,c);return 0}catch(f){return"undefined"!==typeof T&&f instanceof T.Za||B(f),-f.bb}},N:function(a,b,
|
||||
c,d,f){try{var g=X(a);return 1===b&&4===c?(M[d>>2>>>0]=g.error,M[f>>2>>>0]=4,g.error=null,0):-50}catch(h){return"undefined"!==typeof T&&h instanceof T.Za||B(h),-h.bb}},B:function(a,b,c){Cb=c;try{var d=V(a);switch(b){case 21509:case 21505:return d.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return d.tty?0:-59;case 21519:if(!d.tty)return-59;var f=Db();return M[f>>2>>>0]=0;case 21520:return d.tty?-28:-59;case 21531:return f=Db(),T.Jb(d,b,f);case 21523:return d.tty?0:-59;
|
||||
case 21524:return d.tty?0:-59;default:B("bad ioctl syscall "+b)}}catch(g){return"undefined"!==typeof T&&g instanceof T.Za||B(g),-g.bb}},T:function(a,b){try{var c=X(a);c.qb.listen(c,b);return 0}catch(d){return"undefined"!==typeof T&&d instanceof T.Za||B(d),-d.bb}},wa:function(a,b){try{return a=H(a),Bb(T.lstat,a,b)}catch(c){return"undefined"!==typeof T&&c instanceof T.Za||B(c),-c.bb}},xa:function(a,b){try{return a=H(a),a=mb(a),"/"===a[a.length-1]&&(a=a.substr(0,a.length-1)),T.mkdir(a,b,0),0}catch(c){return"undefined"!==
|
||||
typeof T&&c instanceof T.Za||B(c),-c.bb}},ea:function(a,b,c,d,f,g){try{a:{g<<=12;var h=!1;if(0!==(d&16)&&0!==a%65536)var n=-28;else{if(0!==(d&32)){var p=cc(65536,b);if(!p){n=-48;break a}bc(p,0,b);h=!0}else{var q=T.tb(f);if(!q){n=-8;break a}var r=T.Kb(q,a,b,g,c,d);p=r.Qd;h=r.oc}p>>>=0;Ab[p]={Gd:p,Fd:b,oc:h,fd:f,Pd:c,flags:d,offset:g};n=p}}return n}catch(w){return"undefined"!==typeof T&&w instanceof T.Za||B(w),-w.bb}},fa:function(){return 0},da:function(a,b){try{a>>>=0;if(-1===(a|0)||0===b)var c=-28;
|
||||
else{var d=Ab[a];if(d&&b===d.Fd){var f=T.tb(d.fd);if(f&&d.Pd&2){var g=d.flags,h=d.offset,n=D.slice(a,a+b);T.Lb(f,n,h,b,g)}Ab[a]=null;d.oc&&dc(d.Gd)}c=0}return c}catch(p){return"undefined"!==typeof T&&p instanceof T.Za||B(p),-p.bb}},sa:function(){return-63},D:function(a,b,c){Cb=c;try{var d=H(a),f=c?Db():0;return T.open(d,b,f).fd}catch(g){return"undefined"!==typeof T&&g instanceof T.Za||B(g),-g.bb}},ma:function(a,b){try{for(var c=0,d=0;d<b;d++){var f=a+8*d,g=L[f+4>>1>>>0],h=32,n=T.tb(M[f>>2>>>0]);n&&
|
||||
(h=5,n.ab.Nb&&(h=n.ab.Nb(n)));(h&=g|24)&&c++;L[f+6>>1>>>0]=h}return c}catch(p){return"undefined"!==typeof T&&p instanceof T.Za||B(p),-p.bb}},ia:function(a,b,c,d){try{return d&&(M[d>>2>>>0]=-1,M[d+4>>2>>>0]=-1,M[d+8>>2>>>0]=-1,M[d+12>>2>>>0]=-1),0}catch(f){return"undefined"!==typeof T&&f instanceof T.Za||B(f),-f.bb}},O:function(a,b,c,d,f,g){try{var h=X(a),n=h.qb.ad(h,c);if(!n)return 0;f&&Hb(f,h.family,Lb(n.hb),n.port,g);D.set(n.buffer,b>>>0);return n.buffer.byteLength}catch(p){return"undefined"!==
|
||||
typeof T&&p instanceof T.Za||B(p),-p.bb}},ua:function(a,b){try{return a=H(a),b=H(b),T.rename(a,b),0}catch(c){return"undefined"!==typeof T&&c instanceof T.Za||B(c),-c.bb}},qa:function(a){try{return a=H(a),T.rmdir(a),0}catch(b){return"undefined"!==typeof T&&b instanceof T.Za||B(b),-b.bb}},P:function(a,b,c,d,f,g){try{var h=X(a),n=Qb(f,g,!0);return n?h.qb.cd(h,E,b,c,n.hb,n.port):T.write(h.stream,E,b,c)}catch(p){return"undefined"!==typeof T&&p instanceof T.Za||B(p),-p.bb}},ha:function(){return 0},M:function(){return-50},
|
||||
W:function(a){try{return X(a),-52}catch(b){return"undefined"!==typeof T&&b instanceof T.Za||B(b),-b.bb}},z:function(a,b,c){try{return W.createSocket(a,b,c).stream.fd}catch(d){return"undefined"!==typeof T&&d instanceof T.Za||B(d),-d.bb}},E:function(a,b){try{return a=H(a),Bb(T.stat,a,b)}catch(c){return"undefined"!==typeof T&&c instanceof T.Za||B(c),-c.bb}},ka:function(a){try{if(!a)return-21;var b={__size__:390,domainname:325,machine:260,nodename:65,release:130,sysname:0,version:195};K("Emscripten",
|
||||
a+b.sysname);K("emscripten",a+b.nodename);K("1.0",a+b.release);K("#1",a+b.version);K("wasm32",a+b.machine);return 0}catch(c){return"undefined"!==typeof T&&c instanceof T.Za||B(c),-c.bb}},ra:function(a){try{return a=H(a),T.unlink(a),0}catch(b){return"undefined"!==typeof T&&b instanceof T.Za||B(b),-b.bb}},Z:function(){throw"longjmp";},a:function(){B()},ta:Rb,ya:bb,H:function(){B("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},
|
||||
Aa:function(){B("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")},oa:function(){return 4294901760},X:function(a,b,c){D.copyWithin(a>>>0,b>>>0,b+c>>>0)},Y:function(a){var b=D.length;a>>>=0;if(4294901760<a)return!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=Math.min(d,a+100663296);d=Math.max(a,d);0<d%65536&&(d+=65536-d%65536);a:{try{ta.grow(Math.min(4294901760,d)-Ea.byteLength+65535>>>16);Ia();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},
|
||||
aa:function(a){for(var b=ab();ab()-b<a;);},_:function(a,b){try{var c=0;Tb().forEach(function(d,f){var g=b+c;M[a+4*f>>2>>>0]=g;K(d,g);c+=d.length+1});return 0}catch(d){return"undefined"!==typeof T&&d instanceof T.Za||B(d),d.bb}},$:function(a,b){try{var c=Tb();M[a>>2>>>0]=c.length;var d=0;c.forEach(function(f){d+=f.length+1});M[b>>2>>>0]=d;return 0}catch(f){return"undefined"!==typeof T&&f instanceof T.Za||B(f),f.bb}},s:function(a){da(a)},t:function(a){try{var b=V(a);T.close(b);return 0}catch(c){return"undefined"!==
|
||||
typeof T&&c instanceof T.Za||B(c),c.bb}},A:function(a,b){try{var c=V(a);E[b>>0>>>0]=c.tty?2:T.ib(c.mode)?3:T.Db(c.mode)?7:4;return 0}catch(d){return"undefined"!==typeof T&&d instanceof T.Za||B(d),d.bb}},C:function(a,b,c,d){try{a:{for(var f=V(a),g=a=0;g<c;g++){var h=M[b+(8*g+4)>>2>>>0],n=T.read(f,E,M[b+8*g>>2>>>0],h,void 0);if(0>n){var p=-1;break a}a+=n;if(n<h)break}p=a}M[d>>2>>>0]=p;return 0}catch(q){return"undefined"!==typeof T&&q instanceof T.Za||B(q),q.bb}},I:function(a,b,c,d,f){try{var g=V(a);
|
||||
a=4294967296*c+(b>>>0);if(-9007199254740992>=a||9007199254740992<=a)return-61;T.pb(g,a,d);R=[g.position>>>0,(Q=g.position,1<=+Math.abs(Q)?0<Q?(Math.min(+Math.floor(Q/4294967296),4294967295)|0)>>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[f>>2>>>0]=R[0];M[f+4>>2>>>0]=R[1];g.Cb&&0===a&&0===d&&(g.Cb=null);return 0}catch(h){return"undefined"!==typeof T&&h instanceof T.Za||B(h),h.bb}},v:function(a,b,c,d){try{a:{for(var f=V(a),g=a=0;g<c;g++){var h=T.write(f,E,M[b+8*g>>2>>>0],M[b+(8*g+4)>>2>>>0],
|
||||
void 0);if(0>h){var n=-1;break a}a+=h}n=a}M[d>>2>>>0]=n;return 0}catch(p){return"undefined"!==typeof T&&p instanceof T.Za||B(p),p.bb}},q:Vb,c:function(){return ra},o:function(a,b,c,d){function f(w,z,m,t,u,F){var J=10===w?28:16;u=10===w?Nb(u):Mb(u);J=Ca(J);u=Hb(J,w,u,F);assert(!u);u=Ca(32);M[u+4>>2>>>0]=w;M[u+8>>2>>>0]=z;M[u+12>>2>>>0]=m;M[u+24>>2>>>0]=t;M[u+20>>2>>>0]=J;M[u+16>>2>>>0]=10===w?28:16;M[u+28>>2>>>0]=0;return u}var g=0,h=0,n=0,p=0,q=0,r=0;c&&(n=M[c>>2>>>0],p=M[c+4>>2>>>0],q=M[c+8>>2>>>
|
||||
0],r=M[c+12>>2>>>0]);q&&!r&&(r=2===q?17:6);!q&&r&&(q=17===r?2:1);0===r&&(r=6);0===q&&(q=1);if(!a&&!b)return-2;if(n&-1088||0!==c&&M[c>>2>>>0]&2&&!a)return-1;if(n&32)return-2;if(0!==q&&1!==q&&2!==q)return-7;if(0!==p&&2!==p&&10!==p)return-6;if(b&&(b=H(b),h=parseInt(b,10),isNaN(h)))return n&1024?-2:-8;if(!a)return 0===p&&(p=2),0===(n&1)&&(2===p?g=ec(2130706433):g=[0,0,0,1]),a=f(p,q,r,null,g,h),M[d>>2>>>0]=a,0;a=H(a);g=Eb(a);if(null!==g)if(0===p||2===p)p=2;else if(10===p&&n&8)g=[0,0,ec(65535),g],p=10;
|
||||
else return-2;else if(g=Fb(a),null!==g)if(0===p||10===p)p=10;else return-2;if(null!=g)return a=f(p,q,r,a,g,h),M[d>>2>>>0]=a,0;if(n&4)return-2;a=Lb(a);g=Eb(a);0===p?p=2:10===p&&(g=[0,0,ec(65535),g]);a=f(p,q,r,null,g,h);M[d>>2>>>0]=a;return 0},n:function(a,b,c,d,f,g,h){b=Pb(a,b);if(b.bb)return-6;a=b.port;var n=b.hb;b=!1;if(c&&d){var p;if(h&1||!(p=Kb[n]?Kb[n]:null)){if(h&8)return-2}else n=p;c=C(n,D,c,d);c+1>=d&&(b=!0)}f&&g&&(c=C(""+a,D,f,g),c+1>=g&&(b=!0));return b?-12:0},g:function(a){var b=Date.now();
|
||||
M[a>>2>>>0]=b/1E3|0;M[a+4>>2>>>0]=b%1E3*1E3|0;return 0},j:eb,Ca:fc,Ba:hc,e:ic,u:jc,x:kc,F:lc,w:mc,K:nc,J:oc,m:pc,p:qc,f:rc,za:sc,G:tc,L:uc,i:kb,y:function(a){fb();var b=new Date(M[a+20>>2>>>0]+1900,M[a+16>>2>>>0],M[a+12>>2>>>0],M[a+8>>2>>>0],M[a+4>>2>>>0],M[a>>2>>>0],0),c=M[a+32>>2>>>0],d=b.getTimezoneOffset(),f=new Date(b.getFullYear(),0,1),g=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),h=f.getTimezoneOffset(),n=Math.min(h,g);0>c?M[a+32>>2>>>0]=Number(g!=h&&n==d):0<c!=(n==d)&&(g=Math.max(h,
|
||||
g),b.setTime(b.getTime()+6E4*((0<c?n:g)-d)));M[a+24>>2>>>0]=b.getDay();M[a+28>>2>>>0]=(b.getTime()-f.getTime())/864E5|0;M[a>>2>>>0]=b.getSeconds();M[a+4>>2>>>0]=b.getMinutes();M[a+8>>2>>>0]=b.getHours();M[a+12>>2>>>0]=b.getDate();M[a+16>>2>>>0]=b.getMonth();return b.getTime()/1E3|0},d:function(a){ra=a},r:function(){return 0},h:function(a,b,c,d){function f(m,t,u){for(m="number"===typeof m?m.toString():m||"";m.length<t;)m=u[0]+m;return m}function g(m,t){return f(m,t,"0")}function h(m,t){function u(J){return 0>
|
||||
J?-1:0<J?1:0}var F;0===(F=u(m.getFullYear()-t.getFullYear()))&&0===(F=u(m.getMonth()-t.getMonth()))&&(F=u(m.getDate()-t.getDate()));return F}function n(m){switch(m.getDay()){case 0:return new Date(m.getFullYear()-1,11,29);case 1:return m;case 2:return new Date(m.getFullYear(),0,3);case 3:return new Date(m.getFullYear(),0,2);case 4:return new Date(m.getFullYear(),0,1);case 5:return new Date(m.getFullYear()-1,11,31);case 6:return new Date(m.getFullYear()-1,11,30)}}function p(m){m=$b(new Date(m.nb+1900,
|
||||
0,1),m.lc);var t=new Date(m.getFullYear()+1,0,4),u=n(new Date(m.getFullYear(),0,4));t=n(t);return 0>=h(u,m)?0>=h(t,m)?m.getFullYear()+1:m.getFullYear():m.getFullYear()-1}var q=M[d+40>>2>>>0];d={Wd:M[d>>2>>>0],Vd:M[d+4>>2>>>0],jc:M[d+8>>2>>>0],Zb:M[d+12>>2>>>0],Qb:M[d+16>>2>>>0],nb:M[d+20>>2>>>0],kc:M[d+24>>2>>>0],lc:M[d+28>>2>>>0],oe:M[d+32>>2>>>0],Ud:M[d+36>>2>>>0],Xd:q?H(q):""};c=H(c);q={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S",
|
||||
"%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var r in q)c=c.replace(new RegExp(r,"g"),q[r]);var w="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),z="January February March April May June July August September October November December".split(" ");q={"%a":function(m){return w[m.kc].substring(0,
|
||||
3)},"%A":function(m){return w[m.kc]},"%b":function(m){return z[m.Qb].substring(0,3)},"%B":function(m){return z[m.Qb]},"%C":function(m){return g((m.nb+1900)/100|0,2)},"%d":function(m){return g(m.Zb,2)},"%e":function(m){return f(m.Zb,2," ")},"%g":function(m){return p(m).toString().substring(2)},"%G":function(m){return p(m)},"%H":function(m){return g(m.jc,2)},"%I":function(m){m=m.jc;0==m?m=12:12<m&&(m-=12);return g(m,2)},"%j":function(m){return g(m.Zb+Xb(Wb(m.nb+1900)?Yb:Zb,m.Qb-1),3)},"%m":function(m){return g(m.Qb+
|
||||
1,2)},"%M":function(m){return g(m.Vd,2)},"%n":function(){return"\n"},"%p":function(m){return 0<=m.jc&&12>m.jc?"AM":"PM"},"%S":function(m){return g(m.Wd,2)},"%t":function(){return"\t"},"%u":function(m){return m.kc||7},"%U":function(m){var t=new Date(m.nb+1900,0,1),u=0===t.getDay()?t:$b(t,7-t.getDay());m=new Date(m.nb+1900,m.Qb,m.Zb);return 0>h(u,m)?g(Math.ceil((31-u.getDate()+(Xb(Wb(m.getFullYear())?Yb:Zb,m.getMonth()-1)-31)+m.getDate())/7),2):0===h(u,t)?"01":"00"},"%V":function(m){var t=new Date(m.nb+
|
||||
1901,0,4),u=n(new Date(m.nb+1900,0,4));t=n(t);var F=$b(new Date(m.nb+1900,0,1),m.lc);return 0>h(F,u)?"53":0>=h(t,F)?"01":g(Math.ceil((u.getFullYear()<m.nb+1900?m.lc+32-u.getDate():m.lc+1-u.getDate())/7),2)},"%w":function(m){return m.kc},"%W":function(m){var t=new Date(m.nb,0,1),u=1===t.getDay()?t:$b(t,0===t.getDay()?1:7-t.getDay()+1);m=new Date(m.nb+1900,m.Qb,m.Zb);return 0>h(u,m)?g(Math.ceil((31-u.getDate()+(Xb(Wb(m.getFullYear())?Yb:Zb,m.getMonth()-1)-31)+m.getDate())/7),2):0===h(u,t)?"01":"00"},
|
||||
"%y":function(m){return(m.nb+1900).toString().substring(2)},"%Y":function(m){return m.nb+1900},"%z":function(m){m=m.Ud;var t=0<=m;m=Math.abs(m)/60;return(t?"+":"-")+String("0000"+(m/60*100+m%60)).slice(-4)},"%Z":function(m){return m.Xd},"%%":function(){return"%"}};for(r in q)c.includes(r)&&(c=c.replace(new RegExp(r,"g"),q[r](d)));r=wb(c,!1);if(r.length>b)return 0;E.set(r,a>>>0);return r.length-1},k:function(a){var b=Date.now()/1E3|0;a&&(M[a>>2>>>0]=b);return b}};
|
||||
(function(){function a(f){e.asm=f.exports;ta=e.asm.Da;Ia();O=e.asm.Ia;Ka.unshift(e.asm.Ea);Ua()}function b(f){a(f.instance)}function c(f){return Ya().then(function(g){return WebAssembly.instantiate(g,d)}).then(f,function(g){k("failed to asynchronously prepare wasm: "+g);B(g)})}var d={a:vc};Ta();if(e.instantiateWasm)try{return e.instantiateWasm(d,a)}catch(f){return k("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return sa||"function"!==typeof WebAssembly.instantiateStreaming||
|
||||
Va()||P.startsWith("file://")||"function"!==typeof fetch?c(b):fetch(P,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){k("wasm streaming compile failed: "+g);k("falling back to ArrayBuffer instantiation");return c(b)})})})().catch(ba);return{}})();e.___wasm_call_ctors=function(){return(e.___wasm_call_ctors=e.asm.Ea).apply(null,arguments)};
|
||||
var dc=e._free=function(){return(dc=e._free=e.asm.Fa).apply(null,arguments)},bc=e._memset=function(){return(bc=e._memset=e.asm.Ga).apply(null,arguments)},Ca=e._malloc=function(){return(Ca=e._malloc=e.asm.Ha).apply(null,arguments)},cb=e.___errno_location=function(){return(cb=e.___errno_location=e.asm.Ja).apply(null,arguments)},cc=e._memalign=function(){return(cc=e._memalign=e.asm.Ka).apply(null,arguments)},Ob=e._ntohs=function(){return(Ob=e._ntohs=e.asm.La).apply(null,arguments)},Gb=e._htons=function(){return(Gb=
|
||||
e._htons=e.asm.Ma).apply(null,arguments)};e._main=function(){return(e._main=e.asm.Na).apply(null,arguments)};
|
||||
var ec=e._htonl=function(){return(ec=e._htonl=e.asm.Oa).apply(null,arguments)},jb=e.__get_tzname=function(){return(jb=e.__get_tzname=e.asm.Pa).apply(null,arguments)},ib=e.__get_daylight=function(){return(ib=e.__get_daylight=e.asm.Qa).apply(null,arguments)},hb=e.__get_timezone=function(){return(hb=e.__get_timezone=e.asm.Ra).apply(null,arguments)},G=e.stackSave=function(){return(G=e.stackSave=e.asm.Sa).apply(null,arguments)},I=e.stackRestore=function(){return(I=e.stackRestore=e.asm.Ta).apply(null,arguments)},
|
||||
xa=e.stackAlloc=function(){return(xa=e.stackAlloc=e.asm.Ua).apply(null,arguments)},Z=e._setThrew=function(){return(Z=e._setThrew=e.asm.Va).apply(null,arguments)},wc=e.dynCall_vijjjid=function(){return(wc=e.dynCall_vijjjid=e.asm.Wa).apply(null,arguments)},xc=e.dynCall_iiiijj=function(){return(xc=e.dynCall_iiiijj=e.asm.Xa).apply(null,arguments)},yc=e.dynCall_iij=function(){return(yc=e.dynCall_iij=e.asm.Ya).apply(null,arguments)};e._ff_h264_cabac_tables=2553548;
|
||||
function ic(a,b,c){var d=G();try{return O.get(a)(b,c)}catch(f){I(d);if(f!==f+0&&"longjmp"!==f)throw f;Z(1,0)}}function pc(a,b){var c=G();try{O.get(a)(b)}catch(d){I(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}}function rc(a,b,c,d,f){var g=G();try{O.get(a)(b,c,d,f)}catch(h){I(g);if(h!==h+0&&"longjmp"!==h)throw h;Z(1,0)}}function qc(a,b,c){var d=G();try{O.get(a)(b,c)}catch(f){I(d);if(f!==f+0&&"longjmp"!==f)throw f;Z(1,0)}}
|
||||
function kc(a,b,c,d,f){var g=G();try{return O.get(a)(b,c,d,f)}catch(h){I(g);if(h!==h+0&&"longjmp"!==h)throw h;Z(1,0)}}function mc(a,b,c,d,f,g,h,n,p){var q=G();try{return O.get(a)(b,c,d,f,g,h,n,p)}catch(r){I(q);if(r!==r+0&&"longjmp"!==r)throw r;Z(1,0)}}function fc(a){var b=G();try{return O.get(a)()}catch(c){I(b);if(c!==c+0&&"longjmp"!==c)throw c;Z(1,0)}}function hc(a,b){var c=G();try{return O.get(a)(b)}catch(d){I(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}}
|
||||
function jc(a,b,c,d){var f=G();try{return O.get(a)(b,c,d)}catch(g){I(f);if(g!==g+0&&"longjmp"!==g)throw g;Z(1,0)}}function tc(a,b,c,d,f,g,h,n,p){var q=G();try{O.get(a)(b,c,d,f,g,h,n,p)}catch(r){I(q);if(r!==r+0&&"longjmp"!==r)throw r;Z(1,0)}}function lc(a,b,c,d,f,g){var h=G();try{return O.get(a)(b,c,d,f,g)}catch(n){I(h);if(n!==n+0&&"longjmp"!==n)throw n;Z(1,0)}}function sc(a,b,c,d,f,g,h){var n=G();try{O.get(a)(b,c,d,f,g,h)}catch(p){I(n);if(p!==p+0&&"longjmp"!==p)throw p;Z(1,0)}}
|
||||
function uc(a,b,c,d,f,g,h,n,p,q){var r=G();try{wc(a,b,c,d,f,g,h,n,p,q)}catch(w){I(r);if(w!==w+0&&"longjmp"!==w)throw w;Z(1,0)}}function nc(a,b,c,d,f,g,h,n){var p=G();try{return xc(a,b,c,d,f,g,h,n)}catch(q){I(p);if(q!==q+0&&"longjmp"!==q)throw q;Z(1,0)}}function oc(a,b,c,d){var f=G();try{return yc(a,b,c,d)}catch(g){I(f);if(g!==g+0&&"longjmp"!==g)throw g;Z(1,0)}}e.ccall=wa;
|
||||
e.cwrap=function(a,b,c,d){c=c||[];var f=c.every(function(g){return"number"===g});return"string"!==b&&f&&!d?va(a):function(){return wa(a,b,c,arguments,d)}};
|
||||
e.setValue=function(a,b,c){c=c||"i8";"*"===c.charAt(c.length-1)&&(c="i32");switch(c){case "i1":E[a>>0>>>0]=b;break;case "i8":E[a>>0>>>0]=b;break;case "i16":L[a>>1>>>0]=b;break;case "i32":M[a>>2>>>0]=b;break;case "i64":R=[b>>>0,(Q=b,1<=+Math.abs(Q)?0<Q?(Math.min(+Math.floor(Q/4294967296),4294967295)|0)>>>0:~~+Math.ceil((Q-+(~~Q>>>0))/4294967296)>>>0:0)];M[a>>2>>>0]=R[0];M[a+4>>2>>>0]=R[1];break;case "float":Ga[a>>2>>>0]=b;break;case "double":Ha[a>>3>>>0]=b;break;default:B("invalid type for setValue: "+
|
||||
c)}};e.writeAsciiToMemory=K;e.FS=T;var zc;function ca(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Sa=function Ac(){zc||Bc();zc||(Sa=Ac)};
|
||||
function Bc(a){function b(){if(!zc&&(zc=!0,e.calledRun=!0,!ua)){e.noFSInit||T.Tb.wc||T.Tb();T.Yc=!1;W.root=T.gb(W,{},null);Za(Ka);Za(La);aa(e);if(e.onRuntimeInitialized)e.onRuntimeInitialized();if(Cc){var c=a,d=e._main;c=c||[];var f=c.length+1,g=xa(4*(f+1));M[g>>>2]=Da(ia);for(var h=1;h<f;h++)M[(g>>2)+h>>>0]=Da(c[h-1]);M[(g>>2)+f>>>0]=0;try{var n=d(f,g);da(n,!0)}catch(p){p instanceof ca||"unwind"==p||((c=p)&&"object"===typeof p&&p.stack&&(c=[p,p.stack]),k("exception thrown: "+c),ja(1,p))}finally{}}if(e.postRun)for("function"==
|
||||
typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;)c=e.postRun.shift(),Ma.unshift(c);Za(Ma)}}a=a||ha;if(!(0<Qa)){if(e.preRun)for("function"==typeof e.preRun&&(e.preRun=[e.preRun]);e.preRun.length;)Na();Za(Ja);0<Qa||(e.setStatus?(e.setStatus("Running..."),setTimeout(function(){setTimeout(function(){e.setStatus("")},1);b()},1)):b())}}e.run=Bc;function da(a,b){if(!b||!(noExitRuntime||0<$a)||0!==a){if(!(noExitRuntime||0<$a)){if(e.onExit)e.onExit(a);ua=!0}ja(a,new ca(a))}}
|
||||
if(e.preInit)for("function"==typeof e.preInit&&(e.preInit=[e.preInit]);0<e.preInit.length;)e.preInit.pop()();var Cc=!1;e.noInitialRun&&(Cc=!1);Bc();
|
||||
|
||||
|
||||
return createFFmpegCore.ready
|
||||
|
@ -245,9 +162,8 @@ l?M.ri():Le();f.exit=Cb;
|
|||
);
|
||||
})();
|
||||
if (typeof exports === 'object' && typeof module === 'object')
|
||||
module.exports = createFFmpegCore;
|
||||
else if (typeof define === 'function' && define['amd'])
|
||||
define([], function() { return createFFmpegCore; });
|
||||
else if (typeof exports === 'object')
|
||||
exports["createFFmpegCore"] = createFFmpegCore;
|
||||
|
||||
module.exports = createFFmpegCore;
|
||||
else if (typeof define === 'function' && define['amd'])
|
||||
define([], function() { return createFFmpegCore; });
|
||||
else if (typeof exports === 'object')
|
||||
exports["createFFmpegCore"] = createFFmpegCore;
|
||||
|
|
BIN
public/js/ffmpeg/ffmpeg-core.wasm
Executable file → Normal file
|
@ -1 +0,0 @@
|
|||
var threadInfoStruct=0;var selfThreadId=0;var parentThreadId=0;var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:selfThreadId})}var err=threadPrintErr;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};this.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}createFFmpegCore(Module).then(function(instance){Module=instance;postMessage({"cmd":"loaded"})})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;threadInfoStruct=e.data.threadInfoStruct;Module["registerPthreadPtr"](threadInfoStruct,/*isMainBrowserThread=*/0,/*isMainRuntimeThread=*/0);selfThreadId=e.data.selfThreadId;parentThreadId=e.data.parentThreadId;var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);/*EM_THREAD_STATUS_RUNNING*/try{var result=Module["dynCall"]("ii",e.data.start_routine,[e.data.arg]);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){Atomics.store(Module["HEAPU32"],(threadInfoStruct+4)>>/*C_STRUCTS.pthread.threadExitCode*/2,(ex instanceof Module["ExitStatus"])?ex.status:-2);/*A custom entry specific to Emscripten denoting that the thread crashed.*/Atomics.store(Module["HEAPU32"],(threadInfoStruct+0)>>/*C_STRUCTS.pthread.threadStatus*/2,1);Module["_emscripten_futex_wake"](threadInfoStruct+0,/*C_STRUCTS.pthread.threadStatus*/2147483647);if(!(ex instanceof Module["ExitStatus"]))throw ex}}}else if(e.data.cmd==="cancel"){if(threadInfoStruct){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(threadInfoStruct){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require("worker_threads");global.Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");var nodeRead=function(filename){return nodeFS.readFileSync(filename,"utf8")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance==="undefined"){performance={now:function(){return Date.now()}}}}
|
|
@ -3,17 +3,17 @@
|
|||
"name": "ente | encrypted photo storage",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/images/ente-192.png",
|
||||
"src": "/images/ente/192.png",
|
||||
"type": "image/png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "/images/ente-256.png",
|
||||
"src": "/images/ente/256.png",
|
||||
"type": "image/png",
|
||||
"sizes": "256x256"
|
||||
},
|
||||
{
|
||||
"src": "/images/ente-512.png",
|
||||
"src": "/images/ente/512.png",
|
||||
"type": "image/png",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
|
|
|
@ -49,11 +49,11 @@
|
|||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<img src='/icon.svg' />
|
||||
<img src="/images/ente.svg" />
|
||||
</nav>
|
||||
<div>
|
||||
<h2>seems like you are offline :(</h2>
|
||||
<span>please check your internet connection</span>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
Before Width: | Height: | Size: 3 KiB |
|
@ -1,2 +1,3 @@
|
|||
User-agent: *
|
||||
Allow: /.well-known/*
|
||||
Disallow:
|
Before Width: | Height: | Size: 157 B |
|
@ -1,6 +1,6 @@
|
|||
import * as Sentry from '@sentry/nextjs';
|
||||
import { getSentryTunnelURL } from 'utils/common/apiUtil';
|
||||
import { getUserAnonymizedID } from 'utils/user';
|
||||
import { getSentryUserID } from 'utils/user';
|
||||
import {
|
||||
getSentryDSN,
|
||||
getSentryENV,
|
||||
|
@ -13,7 +13,7 @@ const SENTRY_ENV = getSentryENV();
|
|||
const SENTRY_RELEASE = getSentryRelease();
|
||||
const IS_ENABLED = getIsSentryEnabled();
|
||||
|
||||
Sentry.setUser({ id: getUserAnonymizedID() });
|
||||
Sentry.setUser({ id: getSentryUserID() });
|
||||
Sentry.init({
|
||||
dsn: SENTRY_DSN,
|
||||
enabled: IS_ENABLED,
|
||||
|
@ -22,6 +22,18 @@ Sentry.init({
|
|||
attachStacktrace: true,
|
||||
autoSessionTracking: false,
|
||||
tunnel: getSentryTunnelURL(),
|
||||
beforeSend(event) {
|
||||
event.request = event.request || {};
|
||||
const currentURL = new URL(document.location.href);
|
||||
currentURL.hash = '';
|
||||
event.request.url = currentURL;
|
||||
return event;
|
||||
},
|
||||
integrations: function (i) {
|
||||
return i.filter(function (i) {
|
||||
return i.name !== 'Breadcrumbs';
|
||||
});
|
||||
},
|
||||
// ...
|
||||
// Note: if you want to override the automatic release value, do not set a
|
||||
// `release` value here - use the environment variable `SENTRY_RELEASE`, so
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { styled } from '@mui/material';
|
||||
import React from 'react';
|
||||
import styled from 'styled-components';
|
||||
|
||||
const Wrapper = styled.button`
|
||||
const Wrapper = styled('button')`
|
||||
border: none;
|
||||
background-color: #51cd7c;
|
||||
position: fixed;
|
||||
|
|
10
src/components/Badge.tsx
Normal file
|
@ -0,0 +1,10 @@
|
|||
import { Paper, styled } from '@mui/material';
|
||||
import { CSSProperties } from '@mui/styled-engine';
|
||||
|
||||
export const Badge = styled(Paper)(({ theme }) => ({
|
||||
padding: '2px 4px',
|
||||
backgroundColor: theme.palette.glass.main,
|
||||
color: theme.palette.glass.contrastText,
|
||||
textTransform: 'uppercase',
|
||||
...(theme.typography.mini as CSSProperties),
|
||||
}));
|
|
@ -1,53 +1,30 @@
|
|||
import { Formik, FormikHelpers } from 'formik';
|
||||
import React, { useContext, useEffect, useRef, useState } from 'react';
|
||||
import { Button, Col, Form, FormControl } from 'react-bootstrap';
|
||||
import React, { useRef, useState } from 'react';
|
||||
import * as Yup from 'yup';
|
||||
import constants from 'utils/strings/constants';
|
||||
import SubmitButton from 'components/SubmitButton';
|
||||
import router from 'next/router';
|
||||
import { changeEmail, getOTTForEmailChange } from 'services/userService';
|
||||
import styled from 'styled-components';
|
||||
import { AppContext, FLASH_MESSAGE_TYPE } from 'pages/_app';
|
||||
import { changeEmail, sendOTTForEmailChange } from 'services/userService';
|
||||
import { getData, LS_KEYS, setData } from 'utils/storage/localStorage';
|
||||
import { PAGES } from 'constants/pages';
|
||||
import { Alert, TextField } from '@mui/material';
|
||||
import Container from './Container';
|
||||
import LinkButton from './pages/gallery/LinkButton';
|
||||
import FormPaperFooter from './Form/FormPaper/Footer';
|
||||
import { sleep } from 'utils/common';
|
||||
|
||||
interface formValues {
|
||||
email: string;
|
||||
ott?: string;
|
||||
}
|
||||
|
||||
const EmailRow = styled.div`
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
border: 1px solid grey;
|
||||
margin-bottom: 19px;
|
||||
align-items: center;
|
||||
text-align: left;
|
||||
color: #fff;
|
||||
`;
|
||||
|
||||
interface Props {
|
||||
showMessage: (value: boolean) => void;
|
||||
setEmail: (email: string) => void;
|
||||
}
|
||||
function ChangeEmailForm(props: Props) {
|
||||
function ChangeEmailForm() {
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [ottInputVisible, setShowOttInputVisibility] = useState(false);
|
||||
const emailInputElement = useRef(null);
|
||||
const ottInputRef = useRef(null);
|
||||
const appContext = useContext(AppContext);
|
||||
|
||||
useEffect(() => {
|
||||
setTimeout(() => {
|
||||
emailInputElement.current?.focus();
|
||||
}, 250);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (!ottInputVisible) {
|
||||
props.showMessage(false);
|
||||
}
|
||||
}, [ottInputVisible]);
|
||||
const [email, setEmail] = useState(null);
|
||||
const [showMessage, setShowMessage] = useState(false);
|
||||
const [success, setSuccess] = useState(false);
|
||||
|
||||
const requestOTT = async (
|
||||
{ email }: formValues,
|
||||
|
@ -55,10 +32,10 @@ function ChangeEmailForm(props: Props) {
|
|||
) => {
|
||||
try {
|
||||
setLoading(true);
|
||||
await getOTTForEmailChange(email);
|
||||
props.setEmail(email);
|
||||
await sendOTTForEmailChange(email);
|
||||
setEmail(email);
|
||||
setShowOttInputVisibility(true);
|
||||
props.showMessage(true);
|
||||
setShowMessage(true);
|
||||
setTimeout(() => {
|
||||
ottInputRef.current?.focus();
|
||||
}, 250);
|
||||
|
@ -76,17 +53,18 @@ function ChangeEmailForm(props: Props) {
|
|||
setLoading(true);
|
||||
await changeEmail(email, ott);
|
||||
setData(LS_KEYS.USER, { ...getData(LS_KEYS.USER), email });
|
||||
appContext.setDisappearingFlashMessage({
|
||||
message: constants.EMAIL_UDPATE_SUCCESSFUL,
|
||||
type: FLASH_MESSAGE_TYPE.SUCCESS,
|
||||
});
|
||||
setLoading(false);
|
||||
setSuccess(true);
|
||||
await sleep(1000);
|
||||
router.push(PAGES.GALLERY);
|
||||
} catch (e) {
|
||||
setLoading(false);
|
||||
setFieldError('ott', `${constants.INCORRECT_CODE}`);
|
||||
}
|
||||
setLoading(false);
|
||||
};
|
||||
|
||||
const goToGallery = () => router.push(PAGES.GALLERY);
|
||||
|
||||
return (
|
||||
<Formik<formValues>
|
||||
initialValues={{ email: '' }}
|
||||
|
@ -94,80 +72,80 @@ function ChangeEmailForm(props: Props) {
|
|||
email: Yup.string()
|
||||
.email(constants.EMAIL_ERROR)
|
||||
.required(constants.REQUIRED),
|
||||
ott:
|
||||
ottInputVisible &&
|
||||
Yup.string().required(constants.REQUIRED),
|
||||
})}
|
||||
validateOnChange={false}
|
||||
validateOnBlur={false}
|
||||
onSubmit={!ottInputVisible ? requestOTT : requestEmailChange}>
|
||||
{({ values, errors, touched, handleChange, handleSubmit }) => (
|
||||
<Form noValidate onSubmit={handleSubmit}>
|
||||
{!ottInputVisible ? (
|
||||
<Form.Group controlId="formBasicEmail">
|
||||
<Form.Control
|
||||
ref={emailInputElement}
|
||||
{({ values, errors, handleChange, handleSubmit }) => (
|
||||
<>
|
||||
{showMessage && (
|
||||
<Alert
|
||||
color="accent"
|
||||
onClose={() => setShowMessage(false)}>
|
||||
{constants.EMAIL_SENT({ email })}
|
||||
</Alert>
|
||||
)}
|
||||
<form noValidate onSubmit={handleSubmit}>
|
||||
<Container>
|
||||
<TextField
|
||||
fullWidth
|
||||
InputProps={{
|
||||
readOnly: ottInputVisible,
|
||||
}}
|
||||
type="email"
|
||||
placeholder={constants.ENTER_EMAIL}
|
||||
label={constants.ENTER_EMAIL}
|
||||
value={values.email}
|
||||
onChange={handleChange('email')}
|
||||
isInvalid={Boolean(
|
||||
touched.email && errors.email
|
||||
)}
|
||||
error={Boolean(errors.email)}
|
||||
helperText={errors.email}
|
||||
autoFocus
|
||||
disabled={loading}
|
||||
/>
|
||||
<FormControl.Feedback type="invalid">
|
||||
{errors.email}
|
||||
</FormControl.Feedback>
|
||||
</Form.Group>
|
||||
) : (
|
||||
<>
|
||||
<EmailRow>
|
||||
<Col xs="8">{values.email}</Col>
|
||||
<Col xs="4">
|
||||
<Button
|
||||
variant="link"
|
||||
onClick={() =>
|
||||
setShowOttInputVisibility(false)
|
||||
}>
|
||||
{constants.CHANGE}
|
||||
</Button>
|
||||
</Col>
|
||||
</EmailRow>
|
||||
<Form.Group controlId="formBasicEmail">
|
||||
<Form.Control
|
||||
ref={ottInputRef}
|
||||
{ottInputVisible && (
|
||||
<TextField
|
||||
fullWidth
|
||||
type="text"
|
||||
placeholder={constants.ENTER_OTT}
|
||||
label={constants.ENTER_OTT}
|
||||
value={values.ott}
|
||||
onChange={handleChange('ott')}
|
||||
isInvalid={Boolean(
|
||||
touched.ott && errors.ott
|
||||
)}
|
||||
error={Boolean(errors.ott)}
|
||||
helperText={errors.ott}
|
||||
disabled={loading}
|
||||
/>
|
||||
<FormControl.Feedback type="invalid">
|
||||
{errors.ott}
|
||||
</FormControl.Feedback>
|
||||
</Form.Group>
|
||||
</>
|
||||
)}
|
||||
)}
|
||||
<SubmitButton
|
||||
success={success}
|
||||
sx={{ mt: 2 }}
|
||||
loading={loading}
|
||||
buttonText={
|
||||
!ottInputVisible
|
||||
? constants.SEND_OTT
|
||||
: constants.VERIFY
|
||||
}
|
||||
/>
|
||||
</Container>
|
||||
</form>
|
||||
|
||||
<SubmitButton
|
||||
buttonText={
|
||||
!ottInputVisible
|
||||
? constants.SEND_OTT
|
||||
: constants.VERIFY
|
||||
}
|
||||
loading={loading}
|
||||
/>
|
||||
<br />
|
||||
<Button
|
||||
block
|
||||
variant="link"
|
||||
className="text-center"
|
||||
onClick={router.back}>
|
||||
{constants.GO_BACK}
|
||||
</Button>
|
||||
</Form>
|
||||
<FormPaperFooter
|
||||
style={{
|
||||
justifyContent: ottInputVisible && 'space-between',
|
||||
}}>
|
||||
{ottInputVisible && (
|
||||
<LinkButton
|
||||
onClick={() =>
|
||||
setShowOttInputVisibility(false)
|
||||
}>
|
||||
{constants.CHANGE_EMAIL}?
|
||||
</LinkButton>
|
||||
)}
|
||||
<LinkButton onClick={goToGallery}>
|
||||
{constants.GO_BACK}
|
||||
</LinkButton>
|
||||
</FormPaperFooter>
|
||||
</>
|
||||
)}
|
||||
</Formik>
|
||||
);
|
||||
|
|
|
@ -1,83 +0,0 @@
|
|||
import styled from 'styled-components';
|
||||
import { FreeFlowText, IconButton } from './Container';
|
||||
import CopyIcon from './icons/CopyIcon';
|
||||
import React, { useState } from 'react';
|
||||
import { Tooltip, OverlayTrigger } from 'react-bootstrap';
|
||||
import TickIcon from './icons/TickIcon';
|
||||
import EnteSpinner from './EnteSpinner';
|
||||
|
||||
const Wrapper = styled.div`
|
||||
position: relative;
|
||||
margin: 20px 0;
|
||||
`;
|
||||
const CopyButtonWrapper = styled(IconButton)`
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
background: none !important;
|
||||
margin: 10px;
|
||||
`;
|
||||
|
||||
export const CodeWrapper = styled.div`
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: #1a1919;
|
||||
padding: 37px 40px 20px 20px;
|
||||
color: white;
|
||||
width: 100%;
|
||||
`;
|
||||
|
||||
type Iprops = React.PropsWithChildren<{
|
||||
code: string;
|
||||
}>;
|
||||
export const CodeBlock = (props: Iprops) => {
|
||||
const [copied, setCopied] = useState<boolean>(false);
|
||||
|
||||
const copyToClipboardHelper = (text: string) => () => {
|
||||
navigator.clipboard.writeText(text);
|
||||
setCopied(true);
|
||||
setTimeout(() => setCopied(false), 1000);
|
||||
};
|
||||
|
||||
const RenderCopiedMessage = (props) => {
|
||||
const { style, ...rest } = props;
|
||||
return (
|
||||
<Tooltip
|
||||
{...rest}
|
||||
style={{ ...style, zIndex: 2001 }}
|
||||
id="button-tooltip">
|
||||
copied
|
||||
</Tooltip>
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<Wrapper>
|
||||
<CodeWrapper>
|
||||
{props.code ? (
|
||||
<FreeFlowText>{props.code}</FreeFlowText>
|
||||
) : (
|
||||
<EnteSpinner />
|
||||
)}
|
||||
</CodeWrapper>
|
||||
{props.code && (
|
||||
<OverlayTrigger
|
||||
show={copied}
|
||||
placement="bottom"
|
||||
trigger={'click'}
|
||||
overlay={RenderCopiedMessage}
|
||||
delay={{ show: 200, hide: 800 }}>
|
||||
<CopyButtonWrapper
|
||||
onClick={copyToClipboardHelper(props.code)}
|
||||
style={{
|
||||
background: 'none',
|
||||
...(copied ? { color: '#51cd7c' } : {}),
|
||||
}}>
|
||||
{copied ? <TickIcon /> : <CopyIcon />}
|
||||
</CopyButtonWrapper>
|
||||
</OverlayTrigger>
|
||||
)}
|
||||
</Wrapper>
|
||||
);
|
||||
};
|
20
src/components/CodeBlock/CopyButton.tsx
Normal file
|
@ -0,0 +1,20 @@
|
|||
import React from 'react';
|
||||
import constants from 'utils/strings/constants';
|
||||
import { CopyButtonWrapper } from './styledComponents';
|
||||
import DoneIcon from '@mui/icons-material/Done';
|
||||
import ContentCopyIcon from '@mui/icons-material/ContentCopy';
|
||||
import { Tooltip } from '@mui/material';
|
||||
|
||||
export default function CopyButton({ code, copied, copyToClipboardHelper }) {
|
||||
return (
|
||||
<Tooltip arrow open={copied} title={constants.COPIED}>
|
||||
<CopyButtonWrapper onClick={copyToClipboardHelper(code)}>
|
||||
{copied ? (
|
||||
<DoneIcon fontSize="small" />
|
||||
) : (
|
||||
<ContentCopyIcon fontSize="small" />
|
||||
)}
|
||||
</CopyButtonWrapper>
|
||||
</Tooltip>
|
||||
);
|
||||
}
|
47
src/components/CodeBlock/index.tsx
Normal file
|
@ -0,0 +1,47 @@
|
|||
import { FreeFlowText } from '../Container';
|
||||
import React, { useState } from 'react';
|
||||
import EnteSpinner from '../EnteSpinner';
|
||||
import { Wrapper, CodeWrapper } from './styledComponents';
|
||||
import CopyButton from './CopyButton';
|
||||
import { BoxProps } from '@mui/material';
|
||||
|
||||
type Iprops = React.PropsWithChildren<{
|
||||
code: string;
|
||||
wordBreak?: 'normal' | 'break-all' | 'keep-all' | 'break-word';
|
||||
}>;
|
||||
|
||||
export default function CodeBlock({
|
||||
code,
|
||||
wordBreak,
|
||||
...props
|
||||
}: BoxProps<'div', Iprops>) {
|
||||
const [copied, setCopied] = useState<boolean>(false);
|
||||
|
||||
const copyToClipboardHelper = (text: string) => () => {
|
||||
navigator.clipboard.writeText(text);
|
||||
setCopied(true);
|
||||
setTimeout(() => setCopied(false), 1000);
|
||||
};
|
||||
|
||||
if (!code) {
|
||||
return (
|
||||
<Wrapper>
|
||||
<EnteSpinner />
|
||||
</Wrapper>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<Wrapper {...props}>
|
||||
<CodeWrapper>
|
||||
<FreeFlowText style={{ wordBreak: wordBreak }}>
|
||||
{code}
|
||||
</FreeFlowText>
|
||||
</CodeWrapper>
|
||||
<CopyButton
|
||||
code={code}
|
||||
copied={copied}
|
||||
copyToClipboardHelper={copyToClipboardHelper}
|
||||
/>
|
||||
</Wrapper>
|
||||
);
|
||||
}
|
20
src/components/CodeBlock/styledComponents.tsx
Normal file
|
@ -0,0 +1,20 @@
|
|||
import { IconButton } from '@mui/material';
|
||||
import { CenteredFlex } from 'components/Container';
|
||||
import { styled } from '@mui/material';
|
||||
export const Wrapper = styled(CenteredFlex)`
|
||||
position: relative;
|
||||
background: ${({ theme }) => theme.palette.accent.dark};
|
||||
border-radius: ${({ theme }) => theme.shape.borderRadius}px;
|
||||
min-height: 80px;
|
||||
`;
|
||||
export const CopyButtonWrapper = styled(IconButton)`
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
margin-top: ${({ theme }) => theme.spacing(1)};
|
||||
`;
|
||||
|
||||
export const CodeWrapper = styled('div')`
|
||||
padding: 16px 36px 16px 16px;
|
||||
border-radius: ${({ theme }) => theme.shape.borderRadius}px;
|
||||
`;
|
|
@ -1,304 +0,0 @@
|
|||
import React, { useContext, useEffect, useState } from 'react';
|
||||
import constants from 'utils/strings/constants';
|
||||
import { Formik, FormikHelpers } from 'formik';
|
||||
import * as Yup from 'yup';
|
||||
import Form from 'react-bootstrap/Form';
|
||||
import FormControl from 'react-bootstrap/FormControl';
|
||||
import { Button, Col, Table } from 'react-bootstrap';
|
||||
import { DeadCenter, GalleryContext } from 'pages/gallery';
|
||||
import { User } from 'types/user';
|
||||
import {
|
||||
shareCollection,
|
||||
unshareCollection,
|
||||
createShareableURL,
|
||||
deleteShareableURL,
|
||||
} from 'services/collectionService';
|
||||
import { getData, LS_KEYS } from 'utils/storage/localStorage';
|
||||
import SubmitButton from './SubmitButton';
|
||||
import MessageDialog from './MessageDialog';
|
||||
import { Collection } from 'types/collection';
|
||||
import { appendCollectionKeyToShareURL } from 'utils/collection';
|
||||
import { FlexWrapper } from './Container';
|
||||
import { CodeBlock } from './CodeBlock';
|
||||
import { ButtonVariant, getVariantColor } from './pages/gallery/LinkButton';
|
||||
import { handleSharingErrors } from 'utils/error';
|
||||
import { sleep } from 'utils/common';
|
||||
|
||||
interface Props {
|
||||
show: boolean;
|
||||
onHide: () => void;
|
||||
collection: Collection;
|
||||
syncWithRemote: () => Promise<void>;
|
||||
}
|
||||
interface formValues {
|
||||
email: string;
|
||||
}
|
||||
interface ShareeProps {
|
||||
sharee: User;
|
||||
collectionUnshare: (sharee: User) => void;
|
||||
}
|
||||
|
||||
function CollectionShare(props: Props) {
|
||||
const [loading, setLoading] = useState(false);
|
||||
const galleryContext = useContext(GalleryContext);
|
||||
const [sharableLinkError, setSharableLinkError] = useState(null);
|
||||
const [publicShareUrl, setPublicShareUrl] = useState<string>(null);
|
||||
|
||||
useEffect(() => {
|
||||
const main = async () => {
|
||||
if (props.collection?.publicURLs?.[0]?.url) {
|
||||
const t = await appendCollectionKeyToShareURL(
|
||||
props.collection?.publicURLs?.[0]?.url,
|
||||
props.collection.key
|
||||
);
|
||||
setPublicShareUrl(t);
|
||||
} else {
|
||||
setPublicShareUrl(null);
|
||||
}
|
||||
};
|
||||
main();
|
||||
}, [props.collection]);
|
||||
|
||||
const collectionShare = async (
|
||||
{ email }: formValues,
|
||||
{ resetForm, setFieldError }: FormikHelpers<formValues>
|
||||
) => {
|
||||
try {
|
||||
setLoading(true);
|
||||
galleryContext.startLoading();
|
||||
const user: User = getData(LS_KEYS.USER);
|
||||
if (email === user.email) {
|
||||
setFieldError('email', constants.SHARE_WITH_SELF);
|
||||
} else if (
|
||||
props.collection?.sharees?.find(
|
||||
(value) => value.email === email
|
||||
)
|
||||
) {
|
||||
setFieldError('email', constants.ALREADY_SHARED(email));
|
||||
} else {
|
||||
await shareCollection(props.collection, email);
|
||||
await sleep(2000);
|
||||
await galleryContext.syncWithRemote(false, true);
|
||||
resetForm();
|
||||
}
|
||||
} catch (e) {
|
||||
const errorMessage = handleSharingErrors(e);
|
||||
setFieldError('email', errorMessage);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
galleryContext.finishLoading();
|
||||
}
|
||||
};
|
||||
const collectionUnshare = async (sharee) => {
|
||||
try {
|
||||
galleryContext.startLoading();
|
||||
await unshareCollection(props.collection, sharee.email);
|
||||
await sleep(2000);
|
||||
await galleryContext.syncWithRemote(false, true);
|
||||
} finally {
|
||||
galleryContext.finishLoading();
|
||||
}
|
||||
};
|
||||
|
||||
const createSharableURLHelper = async () => {
|
||||
try {
|
||||
galleryContext.startLoading();
|
||||
const publicURL = await createShareableURL(props.collection);
|
||||
const sharableURL = await appendCollectionKeyToShareURL(
|
||||
publicURL.url,
|
||||
props.collection.key
|
||||
);
|
||||
setPublicShareUrl(sharableURL);
|
||||
galleryContext.syncWithRemote(false, true);
|
||||
} catch (e) {
|
||||
const errorMessage = handleSharingErrors(e);
|
||||
setSharableLinkError(errorMessage);
|
||||
} finally {
|
||||
galleryContext.finishLoading();
|
||||
}
|
||||
};
|
||||
|
||||
const disablePublicSharingHelper = async () => {
|
||||
try {
|
||||
galleryContext.startLoading();
|
||||
await deleteShareableURL(props.collection);
|
||||
setPublicShareUrl(null);
|
||||
galleryContext.syncWithRemote(false, true);
|
||||
} catch (e) {
|
||||
const errorMessage = handleSharingErrors(e);
|
||||
setSharableLinkError(errorMessage);
|
||||
} finally {
|
||||
galleryContext.finishLoading();
|
||||
}
|
||||
};
|
||||
|
||||
const disablePublicSharing = () => {
|
||||
galleryContext.setDialogMessage({
|
||||
title: constants.DISABLE_PUBLIC_SHARING,
|
||||
content: constants.DISABLE_PUBLIC_SHARING_MESSAGE,
|
||||
close: { text: constants.CANCEL },
|
||||
proceed: {
|
||||
text: constants.DISABLE,
|
||||
action: disablePublicSharingHelper,
|
||||
variant: ButtonVariant.danger,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const handleCollectionPublicSharing = () => {
|
||||
setSharableLinkError(null);
|
||||
if (publicShareUrl) {
|
||||
disablePublicSharing();
|
||||
} else {
|
||||
createSharableURLHelper();
|
||||
}
|
||||
};
|
||||
|
||||
const ShareeRow = ({ sharee, collectionUnshare }: ShareeProps) => (
|
||||
<tr>
|
||||
<td>{sharee.email}</td>
|
||||
<td>
|
||||
<Button
|
||||
variant="outline-danger"
|
||||
style={{
|
||||
height: '25px',
|
||||
lineHeight: 0,
|
||||
padding: 0,
|
||||
width: '25px',
|
||||
fontSize: '1.2em',
|
||||
fontWeight: 900,
|
||||
}}
|
||||
onClick={() => collectionUnshare(sharee)}>
|
||||
-
|
||||
</Button>
|
||||
</td>
|
||||
</tr>
|
||||
);
|
||||
|
||||
if (!props.collection) {
|
||||
return <></>;
|
||||
}
|
||||
return (
|
||||
<MessageDialog
|
||||
show={props.show}
|
||||
onHide={props.onHide}
|
||||
attributes={{ title: constants.SHARE_COLLECTION }}>
|
||||
<DeadCenter style={{ width: '85%', margin: 'auto' }}>
|
||||
<h6 style={{ marginTop: '8px' }}>
|
||||
{constants.SHARE_WITH_PEOPLE}
|
||||
</h6>
|
||||
<p />
|
||||
<Formik<formValues>
|
||||
initialValues={{ email: '' }}
|
||||
validationSchema={Yup.object().shape({
|
||||
email: Yup.string()
|
||||
.email(constants.EMAIL_ERROR)
|
||||
.required(constants.REQUIRED),
|
||||
})}
|
||||
validateOnChange={false}
|
||||
validateOnBlur={false}
|
||||
onSubmit={collectionShare}>
|
||||
{({
|
||||
values,
|
||||
errors,
|
||||
touched,
|
||||
handleChange,
|
||||
handleSubmit,
|
||||
}) => (
|
||||
<Form noValidate onSubmit={handleSubmit}>
|
||||
<Form.Row>
|
||||
<Form.Group
|
||||
as={Col}
|
||||
xs={10}
|
||||
controlId="formHorizontalEmail">
|
||||
<Form.Control
|
||||
type="email"
|
||||
placeholder={constants.ENTER_EMAIL}
|
||||
value={values.email}
|
||||
onChange={handleChange('email')}
|
||||
isInvalid={Boolean(
|
||||
touched.email && errors.email
|
||||
)}
|
||||
autoFocus
|
||||
disabled={loading}
|
||||
/>
|
||||
<FormControl.Feedback type="invalid">
|
||||
{errors.email}
|
||||
</FormControl.Feedback>
|
||||
</Form.Group>
|
||||
<Form.Group
|
||||
as={Col}
|
||||
xs={2}
|
||||
controlId="formHorizontalEmail">
|
||||
<SubmitButton
|
||||
loading={loading}
|
||||
inline
|
||||
buttonText="+"
|
||||
/>
|
||||
</Form.Group>
|
||||
</Form.Row>
|
||||
</Form>
|
||||
)}
|
||||
</Formik>
|
||||
{props.collection.sharees?.length > 0 && (
|
||||
<>
|
||||
<p>{constants.SHAREES}</p>
|
||||
|
||||
<Table striped bordered hover variant="dark" size="sm">
|
||||
<tbody>
|
||||
{props.collection.sharees?.map((sharee) => (
|
||||
<ShareeRow
|
||||
key={sharee.email}
|
||||
sharee={sharee}
|
||||
collectionUnshare={collectionUnshare}
|
||||
/>
|
||||
))}
|
||||
</tbody>
|
||||
</Table>
|
||||
</>
|
||||
)}
|
||||
<div
|
||||
style={{
|
||||
height: '1px',
|
||||
marginTop: '10px',
|
||||
marginBottom: '18px',
|
||||
background: '#444',
|
||||
width: '100%',
|
||||
}}
|
||||
/>
|
||||
<div>
|
||||
<FlexWrapper>
|
||||
<FlexWrapper
|
||||
style={{ paddingTop: '5px', color: '#fff' }}>
|
||||
{constants.PUBLIC_SHARING}
|
||||
</FlexWrapper>
|
||||
<Form.Switch
|
||||
style={{ marginLeft: '20px' }}
|
||||
checked={!!publicShareUrl}
|
||||
id="collection-public-sharing-toggler"
|
||||
className="custom-switch-md"
|
||||
onChange={handleCollectionPublicSharing}
|
||||
/>
|
||||
</FlexWrapper>
|
||||
{sharableLinkError && (
|
||||
<FlexWrapper
|
||||
style={{
|
||||
marginTop: '10px',
|
||||
color: getVariantColor(ButtonVariant.danger),
|
||||
}}>
|
||||
{sharableLinkError}
|
||||
</FlexWrapper>
|
||||
)}
|
||||
</div>
|
||||
{publicShareUrl ? (
|
||||
<div style={{ width: '100%', wordBreak: 'break-all' }}>
|
||||
<CodeBlock key={publicShareUrl} code={publicShareUrl} />
|
||||
</div>
|
||||
) : (
|
||||
<div style={{ height: '30px' }} />
|
||||
)}
|
||||
</DeadCenter>
|
||||
</MessageDialog>
|
||||
);
|
||||
}
|
||||
export default CollectionShare;
|
|
@ -0,0 +1,35 @@
|
|||
import React from 'react';
|
||||
import { COLLECTION_SORT_BY } from 'constants/collection';
|
||||
import SortIcon from '@mui/icons-material/Sort';
|
||||
import CollectionSortOptions from './options';
|
||||
import OverflowMenu from 'components/OverflowMenu/menu';
|
||||
|
||||
export interface CollectionSortProps {
|
||||
setCollectionSortBy: (sortBy: COLLECTION_SORT_BY) => void;
|
||||
activeSortBy: COLLECTION_SORT_BY;
|
||||
nestedInDialog?: boolean;
|
||||
disableBG?: boolean;
|
||||
}
|
||||
|
||||
export default function CollectionSort(props: CollectionSortProps) {
|
||||
return (
|
||||
<OverflowMenu
|
||||
ariaControls="collection-sort"
|
||||
triggerButtonIcon={<SortIcon />}
|
||||
menuPaperProps={{
|
||||
sx: {
|
||||
backgroundColor: (theme) =>
|
||||
props.nestedInDialog &&
|
||||
theme.palette.background.overPaper,
|
||||
},
|
||||
}}
|
||||
triggerButtonProps={{
|
||||
sx: {
|
||||
background: (theme) =>
|
||||
!props.disableBG && theme.palette.fill.dark,
|
||||
},
|
||||
}}>
|
||||
<CollectionSortOptions {...props} />
|
||||
</OverflowMenu>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
import React from 'react';
|
||||
import { COLLECTION_SORT_BY } from 'constants/collection';
|
||||
import TickIcon from '@mui/icons-material/Done';
|
||||
import { CollectionSortProps } from '.';
|
||||
import { OverflowMenuOption } from 'components/OverflowMenu/option';
|
||||
import { SvgIcon } from '@mui/material';
|
||||
|
||||
const SortByOptionCreator =
|
||||
({ setCollectionSortBy, activeSortBy }: CollectionSortProps) =>
|
||||
(props: { sortBy: COLLECTION_SORT_BY; children: any }) => {
|
||||
const handleClick = () => {
|
||||
setCollectionSortBy(props.sortBy);
|
||||
};
|
||||
|
||||
return (
|
||||
<OverflowMenuOption
|
||||
onClick={handleClick}
|
||||
endIcon={
|
||||
activeSortBy === props.sortBy ? <TickIcon /> : <SvgIcon />
|
||||
}>
|
||||
{props.children}
|
||||
</OverflowMenuOption>
|
||||
);
|
||||
};
|
||||
|
||||
export default SortByOptionCreator;
|
|
@ -0,0 +1,26 @@
|
|||
import React from 'react';
|
||||
import { COLLECTION_SORT_BY } from 'constants/collection';
|
||||
import constants from 'utils/strings/constants';
|
||||
import SortByOptionCreator from './optionCreator';
|
||||
import { CollectionSortProps } from '.';
|
||||
|
||||
export default function CollectionSortOptions(props: CollectionSortProps) {
|
||||
const SortByOption = SortByOptionCreator(props);
|
||||
|
||||
return (
|
||||
<>
|
||||
<SortByOption sortBy={COLLECTION_SORT_BY.NAME}>
|
||||
{constants.SORT_BY_NAME}
|
||||
</SortByOption>
|
||||
<SortByOption sortBy={COLLECTION_SORT_BY.CREATION_TIME_DESCENDING}>
|
||||
{constants.SORT_BY_CREATION_TIME_DESCENDING}
|
||||
</SortByOption>
|
||||
<SortByOption sortBy={COLLECTION_SORT_BY.CREATION_TIME_ASCENDING}>
|
||||
{constants.SORT_BY_CREATION_TIME_ASCENDING}
|
||||
</SortByOption>
|
||||
<SortByOption sortBy={COLLECTION_SORT_BY.UPDATION_TIME_DESCENDING}>
|
||||
{constants.SORT_BY_UPDATION_TIME_DESCENDING}
|
||||
</SortByOption>
|
||||
</>
|
||||
);
|
||||
}
|
30
src/components/Collections/AllCollections/collectionCard.tsx
Normal file
|
@ -0,0 +1,30 @@
|
|||
import { Typography } from '@mui/material';
|
||||
import constants from 'utils/strings/constants';
|
||||
import React from 'react';
|
||||
import CollectionCard from '../CollectionCard';
|
||||
import { CollectionSummary } from 'types/collection';
|
||||
import { AllCollectionTile, AllCollectionTileText } from '../styledComponents';
|
||||
|
||||
interface Iprops {
|
||||
collectionSummary: CollectionSummary;
|
||||
onCollectionClick: (collectionID: number) => void;
|
||||
}
|
||||
|
||||
export default function AllCollectionCard({
|
||||
onCollectionClick,
|
||||
collectionSummary,
|
||||
}: Iprops) {
|
||||
return (
|
||||
<CollectionCard
|
||||
collectionTile={AllCollectionTile}
|
||||
latestFile={collectionSummary.latestFile}
|
||||
onClick={() => onCollectionClick(collectionSummary.id)}>
|
||||
<AllCollectionTileText>
|
||||
<Typography>{collectionSummary.name}</Typography>
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{constants.PHOTO_COUNT(collectionSummary.fileCount)}
|
||||
</Typography>
|
||||
</AllCollectionTileText>
|
||||
</CollectionCard>
|
||||
);
|
||||
}
|
28
src/components/Collections/AllCollections/content.tsx
Normal file
|
@ -0,0 +1,28 @@
|
|||
import React from 'react';
|
||||
import { DialogContent } from '@mui/material';
|
||||
import { FlexWrapper } from 'components/Container';
|
||||
import AllCollectionCard from './collectionCard';
|
||||
import { CollectionSummary } from 'types/collection';
|
||||
|
||||
interface Iprops {
|
||||
collectionSummaries: CollectionSummary[];
|
||||
onCollectionClick: (id?: number) => void;
|
||||
}
|
||||
export default function AllCollectionContent({
|
||||
collectionSummaries,
|
||||
onCollectionClick,
|
||||
}: Iprops) {
|
||||
return (
|
||||
<DialogContent>
|
||||
<FlexWrapper flexWrap="wrap" gap={0.5}>
|
||||
{collectionSummaries.map((collectionSummary) => (
|
||||
<AllCollectionCard
|
||||
onCollectionClick={onCollectionClick}
|
||||
collectionSummary={collectionSummary}
|
||||
key={collectionSummary.id}
|
||||
/>
|
||||
))}
|
||||
</FlexWrapper>
|
||||
</DialogContent>
|
||||
);
|
||||
}
|
41
src/components/Collections/AllCollections/dialog.tsx
Normal file
|
@ -0,0 +1,41 @@
|
|||
import { Dialog, Slide, styled } from '@mui/material';
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
export const AllCollectionDialog = styled(Dialog)<{
|
||||
position: 'flex-start' | 'center' | 'flex-end';
|
||||
}>(({ theme, position }) => ({
|
||||
'& .MuiDialog-container': {
|
||||
justifyContent: position,
|
||||
},
|
||||
'& .MuiPaper-root': {
|
||||
maxWidth: '494px',
|
||||
},
|
||||
'& .MuiDialogTitle-root': {
|
||||
padding: theme.spacing(2),
|
||||
paddingRight: theme.spacing(1),
|
||||
},
|
||||
'& .MuiDialogContent-root': {
|
||||
padding: theme.spacing(2),
|
||||
},
|
||||
[theme.breakpoints.down(559)]: {
|
||||
'& .MuiPaper-root': {
|
||||
width: '324px',
|
||||
},
|
||||
'& .MuiDialogContent-root': {
|
||||
padding: 6,
|
||||
},
|
||||
},
|
||||
}));
|
||||
|
||||
AllCollectionDialog.propTypes = {
|
||||
children: PropTypes.node,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
export const Transition = (direction: 'left' | 'right' | 'up') =>
|
||||
React.forwardRef(
|
||||
(props: { children: React.ReactElement<any, any> }, ref) => {
|
||||
return <Slide direction={direction} ref={ref} {...props} />;
|
||||
}
|
||||
);
|
44
src/components/Collections/AllCollections/header.tsx
Normal file
|
@ -0,0 +1,44 @@
|
|||
import React from 'react';
|
||||
import { Box, DialogTitle, Stack, Typography } from '@mui/material';
|
||||
import {
|
||||
FlexWrapper,
|
||||
FluidContainer,
|
||||
IconButtonWithBG,
|
||||
} from 'components/Container';
|
||||
import CollectionSort from 'components/Collections/AllCollections/CollectionSort';
|
||||
import constants from 'utils/strings/constants';
|
||||
import Close from '@mui/icons-material/Close';
|
||||
|
||||
export default function AllCollectionsHeader({
|
||||
onClose,
|
||||
collectionCount,
|
||||
collectionSortBy,
|
||||
setCollectionSortBy,
|
||||
}) {
|
||||
return (
|
||||
<DialogTitle>
|
||||
<FlexWrapper>
|
||||
<FluidContainer mr={1.5}>
|
||||
<Box>
|
||||
<Typography variant="h3">
|
||||
{constants.ALL_ALBUMS}
|
||||
</Typography>
|
||||
<Typography variant="body2" color={'text.secondary'}>
|
||||
{`${collectionCount} ${constants.ALBUMS}`}
|
||||
</Typography>
|
||||
</Box>
|
||||
</FluidContainer>
|
||||
<Stack direction="row" spacing={1.5}>
|
||||
<CollectionSort
|
||||
activeSortBy={collectionSortBy}
|
||||
setCollectionSortBy={setCollectionSortBy}
|
||||
nestedInDialog
|
||||
/>
|
||||
<IconButtonWithBG onClick={onClose}>
|
||||
<Close />
|
||||
</IconButtonWithBG>
|
||||
</Stack>
|
||||
</FlexWrapper>
|
||||
</DialogTitle>
|
||||
);
|
||||
}
|
60
src/components/Collections/AllCollections/index.tsx
Normal file
|
@ -0,0 +1,60 @@
|
|||
import React, { useContext } from 'react';
|
||||
import Divider from '@mui/material/Divider';
|
||||
import { COLLECTION_SORT_BY } from 'constants/collection';
|
||||
import {
|
||||
Transition,
|
||||
AllCollectionDialog,
|
||||
} from 'components/Collections/AllCollections/dialog';
|
||||
import AllCollectionsHeader from './header';
|
||||
import { CollectionSummary } from 'types/collection';
|
||||
import AllCollectionContent from './content';
|
||||
import { AppContext } from 'pages/_app';
|
||||
|
||||
interface Iprops {
|
||||
open: boolean;
|
||||
onClose: () => void;
|
||||
collectionSummaries: CollectionSummary[];
|
||||
setActiveCollection: (id?: number) => void;
|
||||
collectionSortBy: COLLECTION_SORT_BY;
|
||||
setCollectionSortBy: (v: COLLECTION_SORT_BY) => void;
|
||||
}
|
||||
|
||||
const LeftSlideTransition = Transition('up');
|
||||
|
||||
export default function AllCollections(props: Iprops) {
|
||||
const {
|
||||
collectionSummaries,
|
||||
open,
|
||||
onClose,
|
||||
setActiveCollection,
|
||||
collectionSortBy,
|
||||
setCollectionSortBy,
|
||||
} = props;
|
||||
const { isMobile } = useContext(AppContext);
|
||||
|
||||
const onCollectionClick = (collectionID: number) => {
|
||||
setActiveCollection(collectionID);
|
||||
onClose();
|
||||
};
|
||||
|
||||
return (
|
||||
<AllCollectionDialog
|
||||
position="flex-end"
|
||||
TransitionComponent={LeftSlideTransition}
|
||||
onClose={onClose}
|
||||
open={open}
|
||||
fullScreen={isMobile}>
|
||||
<AllCollectionsHeader
|
||||
onClose={onClose}
|
||||
collectionCount={props.collectionSummaries.length}
|
||||
collectionSortBy={collectionSortBy}
|
||||
setCollectionSortBy={setCollectionSortBy}
|
||||
/>
|
||||
<Divider />
|
||||
<AllCollectionContent
|
||||
collectionSummaries={collectionSummaries}
|
||||
onCollectionClick={onCollectionClick}
|
||||
/>
|
||||
</AllCollectionDialog>
|
||||
);
|
||||
}
|
42
src/components/Collections/CollectionCard.tsx
Normal file
|
@ -0,0 +1,42 @@
|
|||
import React from 'react';
|
||||
import { GalleryContext } from 'pages/gallery';
|
||||
import { useState, useContext, useEffect } from 'react';
|
||||
import downloadManager from 'services/downloadManager';
|
||||
import { EnteFile } from 'types/file';
|
||||
|
||||
export default function CollectionCard(props: {
|
||||
children?: any;
|
||||
latestFile: EnteFile;
|
||||
onClick: () => void;
|
||||
collectionTile: any;
|
||||
}) {
|
||||
const {
|
||||
latestFile: file,
|
||||
onClick,
|
||||
children,
|
||||
collectionTile: CustomCollectionTile,
|
||||
} = props;
|
||||
|
||||
const [coverImageURL, setCoverImageURL] = useState(null);
|
||||
const galleryContext = useContext(GalleryContext);
|
||||
useEffect(() => {
|
||||
const main = async () => {
|
||||
if (!file) {
|
||||
return;
|
||||
}
|
||||
if (!galleryContext.thumbs.has(file.id)) {
|
||||
const url = await downloadManager.getThumbnail(file);
|
||||
galleryContext.thumbs.set(file.id, url);
|
||||
}
|
||||
setCoverImageURL(galleryContext.thumbs.get(file.id));
|
||||
};
|
||||
main();
|
||||
}, [file]);
|
||||
|
||||
return (
|
||||
<CustomCollectionTile onClick={onClick}>
|
||||
{coverImageURL && <img src={coverImageURL} />}
|
||||
{children}
|
||||
</CustomCollectionTile>
|
||||
);
|
||||
}
|
23
src/components/Collections/CollectionInfo.tsx
Normal file
|
@ -0,0 +1,23 @@
|
|||
import { Box, Typography } from '@mui/material';
|
||||
import { FlexWrapper } from 'components/Container';
|
||||
import React from 'react';
|
||||
import constants from 'utils/strings/constants';
|
||||
interface Iprops {
|
||||
name: string;
|
||||
fileCount: number;
|
||||
endIcon?: React.ReactNode;
|
||||
}
|
||||
|
||||
export function CollectionInfo({ name, fileCount, endIcon }: Iprops) {
|
||||
return (
|
||||
<div>
|
||||
<FlexWrapper>
|
||||
<Typography variant="subtitle">{name}</Typography>
|
||||
{endIcon && <Box ml={1.5}>{endIcon}</Box>}
|
||||
</FlexWrapper>
|
||||
<Typography variant="body2" color="text.secondary">
|
||||
{constants.PHOTO_COUNT(fileCount)}
|
||||
</Typography>
|
||||
</div>
|
||||
);
|
||||
}
|
70
src/components/Collections/CollectionInfoWithOptions.tsx
Normal file
|
@ -0,0 +1,70 @@
|
|||
import { CollectionInfo } from './CollectionInfo';
|
||||
import React from 'react';
|
||||
import { Collection, CollectionSummary } from 'types/collection';
|
||||
import CollectionOptions from 'components/Collections/CollectionOptions';
|
||||
import { SetCollectionNamerAttributes } from 'components/Collections/CollectionNamer';
|
||||
import { SpaceBetweenFlex } from 'components/Container';
|
||||
import { CollectionInfoBarWrapper } from './styledComponents';
|
||||
import { shouldShowOptions } from 'utils/collection';
|
||||
import { CollectionSummaryType } from 'constants/collection';
|
||||
import Favorite from '@mui/icons-material/FavoriteRounded';
|
||||
import VisibilityOff from '@mui/icons-material/VisibilityOff';
|
||||
import Delete from '@mui/icons-material/Delete';
|
||||
|
||||
interface Iprops {
|
||||
activeCollection: Collection;
|
||||
collectionSummary: CollectionSummary;
|
||||
setCollectionNamerAttributes: SetCollectionNamerAttributes;
|
||||
showCollectionShareModal: () => void;
|
||||
redirectToAll: () => void;
|
||||
}
|
||||
|
||||
interface Iprops {
|
||||
collectionSummary: CollectionSummary;
|
||||
setCollectionNamerAttributes: SetCollectionNamerAttributes;
|
||||
activeCollection: Collection;
|
||||
activeCollectionID: number;
|
||||
showCollectionShareModal: () => void;
|
||||
redirectToAll: () => void;
|
||||
}
|
||||
export default function CollectionInfoWithOptions({
|
||||
collectionSummary,
|
||||
...props
|
||||
}: Iprops) {
|
||||
if (!collectionSummary) {
|
||||
return <></>;
|
||||
}
|
||||
|
||||
const { name, type, fileCount } = collectionSummary;
|
||||
|
||||
const EndIcon = ({ type }: { type: CollectionSummaryType }) => {
|
||||
switch (type) {
|
||||
case CollectionSummaryType.favorites:
|
||||
return <Favorite />;
|
||||
case CollectionSummaryType.archived:
|
||||
case CollectionSummaryType.archive:
|
||||
return <VisibilityOff />;
|
||||
case CollectionSummaryType.trash:
|
||||
return <Delete />;
|
||||
default:
|
||||
return <></>;
|
||||
}
|
||||
};
|
||||
return (
|
||||
<CollectionInfoBarWrapper>
|
||||
<SpaceBetweenFlex>
|
||||
<CollectionInfo
|
||||
name={name}
|
||||
fileCount={fileCount}
|
||||
endIcon={<EndIcon type={type} />}
|
||||
/>
|
||||
{shouldShowOptions(type) && (
|
||||
<CollectionOptions
|
||||
{...props}
|
||||
collectionSummaryType={type}
|
||||
/>
|
||||
)}
|
||||
</SpaceBetweenFlex>
|
||||
</CollectionInfoBarWrapper>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
import React from 'react';
|
||||
import { EnteFile } from 'types/file';
|
||||
import {
|
||||
ActiveIndicator,
|
||||
CollectionBarTile,
|
||||
CollectionBarTileIcon,
|
||||
CollectionBarTileText,
|
||||
} from '../styledComponents';
|
||||
import CollectionCard from '../CollectionCard';
|
||||
import TruncateText from 'components/TruncateText';
|
||||
import { Box } from '@mui/material';
|
||||
import { CollectionSummaryType } from 'constants/collection';
|
||||
import Favorite from '@mui/icons-material/FavoriteRounded';
|
||||
import VisibilityOff from '@mui/icons-material/VisibilityOff';
|
||||
|
||||
interface Iprops {
|
||||
active: boolean;
|
||||
latestFile: EnteFile;
|
||||
collectionName: string;
|
||||
collectionType: CollectionSummaryType;
|
||||
onClick: () => void;
|
||||
}
|
||||
|
||||
const CollectionListBarCard = React.forwardRef((props: Iprops, ref: any) => {
|
||||
const { active, collectionName, collectionType, ...others } = props;
|
||||
|
||||
return (
|
||||
<Box ref={ref}>
|
||||
<CollectionCard collectionTile={CollectionBarTile} {...others}>
|
||||
<CollectionCardText collectionName={collectionName} />
|
||||
<CollectionCardIcon collectionType={collectionType} />
|
||||
</CollectionCard>
|
||||
{active && <ActiveIndicator />}
|
||||
</Box>
|
||||
);
|
||||
});
|
||||
|
||||
export default CollectionListBarCard;
|
||||
|
||||
function CollectionCardText({ collectionName }) {
|
||||
return (
|
||||
<CollectionBarTileText>
|
||||
<TruncateText text={collectionName} />
|
||||
</CollectionBarTileText>
|
||||
);
|
||||
}
|
||||
|
||||
function CollectionCardIcon({ collectionType }) {
|
||||
return (
|
||||
<CollectionBarTileIcon>
|
||||
{collectionType === CollectionSummaryType.favorites && <Favorite />}
|
||||
{collectionType === CollectionSummaryType.archived && (
|
||||
<VisibilityOff />
|
||||
)}
|
||||
</CollectionBarTileIcon>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
import React from 'react';
|
||||
import NavigateNextIcon from '@mui/icons-material/NavigateNext';
|
||||
import { SCROLL_DIRECTION } from 'hooks/useComponentScroll';
|
||||
import { css, styled } from '@mui/material';
|
||||
|
||||
const Wrapper = styled('button')<{ direction: SCROLL_DIRECTION }>`
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
top: 7px;
|
||||
height: 50px;
|
||||
width: 50px;
|
||||
border: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
|
||||
border-radius: 50%;
|
||||
background-color: ${({ theme }) => theme.palette.background.paper};
|
||||
color: ${({ theme }) => theme.palette.primary.main};
|
||||
|
||||
${(props) =>
|
||||
props.direction === SCROLL_DIRECTION.LEFT
|
||||
? css`
|
||||
left: 0;
|
||||
text-align: right;
|
||||
transform: translate(-50%, 0%);
|
||||
`
|
||||
: css`
|
||||
right: 0;
|
||||
text-align: left;
|
||||
transform: translate(50%, 0%);
|
||||
`}
|
||||
|
||||
& > svg {
|
||||
${(props) =>
|
||||
props.direction === SCROLL_DIRECTION.LEFT &&
|
||||
'transform:rotate(180deg);'}
|
||||
border-radius: 50%;
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
}
|
||||
`;
|
||||
|
||||
const ScrollButton = ({ scrollDirection, ...rest }) => (
|
||||
<Wrapper direction={scrollDirection} {...rest}>
|
||||
<NavigateNextIcon />
|
||||
</Wrapper>
|
||||
);
|
||||
export default ScrollButton;
|
125
src/components/Collections/CollectionListBar/index.tsx
Normal file
|
@ -0,0 +1,125 @@
|
|||
import ScrollButton from 'components/Collections/CollectionListBar/ScrollButton';
|
||||
import React, { useContext, useEffect } from 'react';
|
||||
import constants from 'utils/strings/constants';
|
||||
import { ALL_SECTION, COLLECTION_SORT_BY } from 'constants/collection';
|
||||
import { Box, IconButton, Typography } from '@mui/material';
|
||||
import {
|
||||
CollectionListBarWrapper,
|
||||
ScrollContainer,
|
||||
CollectionListWrapper,
|
||||
} from 'components/Collections/styledComponents';
|
||||
import CollectionListBarCard from 'components/Collections/CollectionListBar/CollectionCard';
|
||||
import useComponentScroll, { SCROLL_DIRECTION } from 'hooks/useComponentScroll';
|
||||
import useWindowSize from 'hooks/useWindowSize';
|
||||
import { IconButtonWithBG, SpaceBetweenFlex } from 'components/Container';
|
||||
import ExpandMore from '@mui/icons-material/ExpandMore';
|
||||
import { AppContext } from 'pages/_app';
|
||||
import { CollectionSummary } from 'types/collection';
|
||||
import CollectionSort from '../AllCollections/CollectionSort';
|
||||
|
||||
interface IProps {
|
||||
activeCollection?: number;
|
||||
setActiveCollection: (id?: number) => void;
|
||||
collectionSummaries: CollectionSummary[];
|
||||
showAllCollections: () => void;
|
||||
collectionSortBy: COLLECTION_SORT_BY;
|
||||
setCollectionSortBy: (v: COLLECTION_SORT_BY) => void;
|
||||
}
|
||||
|
||||
export default function CollectionListBar(props: IProps) {
|
||||
const {
|
||||
activeCollection,
|
||||
setActiveCollection,
|
||||
collectionSummaries,
|
||||
showAllCollections,
|
||||
} = props;
|
||||
|
||||
const appContext = useContext(AppContext);
|
||||
|
||||
const windowSize = useWindowSize();
|
||||
|
||||
const { componentRef, scrollComponent, onFarLeft, onFarRight } =
|
||||
useComponentScroll({
|
||||
dependencies: [windowSize, collectionSummaries],
|
||||
});
|
||||
|
||||
const collectionChipsRef = collectionSummaries.reduce(
|
||||
(refMap, collectionSummary) => {
|
||||
refMap[collectionSummary.id] = React.createRef();
|
||||
return refMap;
|
||||
},
|
||||
{}
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
collectionChipsRef[activeCollection]?.current.scrollIntoView();
|
||||
}, [activeCollection]);
|
||||
|
||||
const clickHandler = (collectionID?: number) => () => {
|
||||
setActiveCollection(collectionID ?? ALL_SECTION);
|
||||
};
|
||||
|
||||
return (
|
||||
<CollectionListBarWrapper>
|
||||
<SpaceBetweenFlex mb={1}>
|
||||
<Typography>{constants.ALBUMS}</Typography>
|
||||
{appContext.isMobile && (
|
||||
<Box display="flex" alignItems={'center'} gap={1}>
|
||||
<CollectionSort
|
||||
setCollectionSortBy={props.setCollectionSortBy}
|
||||
activeSortBy={props.collectionSortBy}
|
||||
disableBG
|
||||
/>
|
||||
<IconButton onClick={showAllCollections}>
|
||||
<ExpandMore />
|
||||
</IconButton>
|
||||
</Box>
|
||||
)}
|
||||
</SpaceBetweenFlex>
|
||||
<Box display="flex" alignItems="flex-start" gap={2}>
|
||||
<CollectionListWrapper>
|
||||
{!onFarLeft && (
|
||||
<ScrollButton
|
||||
scrollDirection={SCROLL_DIRECTION.LEFT}
|
||||
onClick={scrollComponent(SCROLL_DIRECTION.LEFT)}
|
||||
/>
|
||||
)}
|
||||
<ScrollContainer ref={componentRef}>
|
||||
{collectionSummaries.map((item) => (
|
||||
<CollectionListBarCard
|
||||
key={item.id}
|
||||
latestFile={item.latestFile}
|
||||
ref={collectionChipsRef[item.id]}
|
||||
active={activeCollection === item.id}
|
||||
onClick={clickHandler(item.id)}
|
||||
collectionType={item.type}
|
||||
collectionName={item.name}
|
||||
/>
|
||||
))}
|
||||
</ScrollContainer>
|
||||
{!onFarRight && (
|
||||
<ScrollButton
|
||||
scrollDirection={SCROLL_DIRECTION.RIGHT}
|
||||
onClick={scrollComponent(SCROLL_DIRECTION.RIGHT)}
|
||||
/>
|
||||
)}
|
||||
</CollectionListWrapper>
|
||||
{!appContext.isMobile && (
|
||||
<Box
|
||||
display="flex"
|
||||
alignItems={'center'}
|
||||
gap={1}
|
||||
height={'64px'}>
|
||||
<CollectionSort
|
||||
setCollectionSortBy={props.setCollectionSortBy}
|
||||
activeSortBy={props.collectionSortBy}
|
||||
/>
|
||||
<IconButtonWithBG onClick={showAllCollections}>
|
||||
<ExpandMore />
|
||||
</IconButtonWithBG>
|
||||
</Box>
|
||||
)}
|
||||
</Box>
|
||||
</CollectionListBarWrapper>
|
||||
);
|
||||
}
|
58
src/components/Collections/CollectionNamer.tsx
Normal file
|
@ -0,0 +1,58 @@
|
|||
import React from 'react';
|
||||
import constants from 'utils/strings/constants';
|
||||
import SingleInputForm, {
|
||||
SingleInputFormProps,
|
||||
} from 'components/SingleInputForm';
|
||||
import DialogBoxBase from 'components/DialogBox/base';
|
||||
import { DialogContent, DialogTitle } from '@mui/material';
|
||||
|
||||
export interface CollectionNamerAttributes {
|
||||
callback: (name: string) => void;
|
||||
title: string;
|
||||
autoFilledName: string;
|
||||
buttonText: string;
|
||||
}
|
||||
|
||||
export type SetCollectionNamerAttributes = React.Dispatch<
|
||||
React.SetStateAction<CollectionNamerAttributes>
|
||||
>;
|
||||
|
||||
interface Props {
|
||||
show: boolean;
|
||||
onHide: () => void;
|
||||
attributes: CollectionNamerAttributes;
|
||||
}
|
||||
|
||||
export default function CollectionNamer({ attributes, ...props }: Props) {
|
||||
if (!attributes) {
|
||||
return <></>;
|
||||
}
|
||||
const onSubmit: SingleInputFormProps['callback'] = async (
|
||||
albumName,
|
||||
setFieldError
|
||||
) => {
|
||||
try {
|
||||
attributes.callback(albumName);
|
||||
props.onHide();
|
||||
} catch (e) {
|
||||
setFieldError(constants.UNKNOWN_ERROR);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<DialogBoxBase open={props.show} onClose={props.onHide}>
|
||||
<DialogTitle>{attributes.title}</DialogTitle>
|
||||
<DialogContent>
|
||||
<SingleInputForm
|
||||
callback={onSubmit}
|
||||
fieldType="text"
|
||||
buttonText={attributes.buttonText}
|
||||
placeholder={constants.ENTER_ALBUM_NAME}
|
||||
initialValue={attributes.autoFilledName}
|
||||
submitButtonProps={{ sx: { mt: 1, mb: 2 } }}
|
||||
secondaryButtonAction={props.onHide}
|
||||
/>
|
||||
</DialogContent>
|
||||
</DialogBoxBase>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
import { OverflowMenuOption } from 'components/OverflowMenu/option';
|
||||
import React from 'react';
|
||||
|
||||
import EditIcon from '@mui/icons-material/Edit';
|
||||
import IosShareIcon from '@mui/icons-material/IosShare';
|
||||
import FileDownloadOutlinedIcon from '@mui/icons-material/FileDownloadOutlined';
|
||||
import VisibilityOffOutlinedIcon from '@mui/icons-material/VisibilityOffOutlined';
|
||||
import VisibilityOnOutlinedIcon from '@mui/icons-material/VisibilityOutlined';
|
||||
import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined';
|
||||
import constants from 'utils/strings/constants';
|
||||
import { CollectionActions } from '.';
|
||||
|
||||
interface Iprops {
|
||||
IsArchived: boolean;
|
||||
handleCollectionAction: (
|
||||
action: CollectionActions,
|
||||
loader?: boolean
|
||||
) => (...args: any[]) => Promise<void>;
|
||||
}
|
||||
|
||||
export function AlbumCollectionOption({
|
||||
IsArchived,
|
||||
handleCollectionAction,
|
||||
}: Iprops) {
|
||||
return (
|
||||
<>
|
||||
<OverflowMenuOption
|
||||
onClick={handleCollectionAction(
|
||||
CollectionActions.SHOW_SHARE_DIALOG,
|
||||
false
|
||||
)}
|
||||
startIcon={<IosShareIcon />}>
|
||||
{constants.SHARE}
|
||||
</OverflowMenuOption>
|
||||
<OverflowMenuOption
|
||||
onClick={handleCollectionAction(
|
||||
CollectionActions.CONFIRM_DOWNLOAD,
|
||||
false
|
||||
)}
|
||||
startIcon={<FileDownloadOutlinedIcon />}>
|
||||
{constants.DOWNLOAD}
|
||||
</OverflowMenuOption>
|
||||
<OverflowMenuOption
|
||||
onClick={handleCollectionAction(
|
||||
CollectionActions.SHOW_RENAME_DIALOG,
|
||||
false
|
||||
)}
|
||||
startIcon={<EditIcon />}>
|
||||
{constants.RENAME}
|
||||
</OverflowMenuOption>
|
||||
{IsArchived ? (
|
||||
<OverflowMenuOption
|
||||
onClick={handleCollectionAction(
|
||||
CollectionActions.UNARCHIVE
|
||||
)}
|
||||
startIcon={<VisibilityOnOutlinedIcon />}>
|
||||
{constants.UNARCHIVE}
|
||||
</OverflowMenuOption>
|
||||
) : (
|
||||
<OverflowMenuOption
|
||||
onClick={handleCollectionAction(CollectionActions.ARCHIVE)}
|
||||
startIcon={<VisibilityOffOutlinedIcon />}>
|
||||
{constants.ARCHIVE}
|
||||
</OverflowMenuOption>
|
||||
)}
|
||||
<OverflowMenuOption
|
||||
startIcon={<DeleteOutlinedIcon />}
|
||||
onClick={handleCollectionAction(
|
||||
CollectionActions.CONFIRM_DELETE,
|
||||
false
|
||||
)}>
|
||||
{constants.DELETE}
|
||||
</OverflowMenuOption>
|
||||
</>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
import { OverflowMenuOption } from 'components/OverflowMenu/option';
|
||||
import React from 'react';
|
||||
|
||||
import DeleteOutlinedIcon from '@mui/icons-material/DeleteOutlined';
|
||||
import constants from 'utils/strings/constants';
|
||||
import { CollectionActions } from '.';
|
||||
|
||||
interface Iprops {
|
||||
handleCollectionAction: (
|
||||
action: CollectionActions,
|
||||
loader?: boolean
|
||||
) => (...args: any[]) => Promise<void>;
|
||||
}
|
||||
|
||||
export function TrashCollectionOption({ handleCollectionAction }: Iprops) {
|
||||
return (
|
||||
<OverflowMenuOption
|
||||
color="danger"
|
||||
startIcon={<DeleteOutlinedIcon />}
|
||||
onClick={handleCollectionAction(
|
||||
CollectionActions.CONFIRM_EMPTY_TRASH,
|
||||
false
|
||||
)}>
|
||||
{constants.EMPTY_TRASH}
|
||||
</OverflowMenuOption>
|
||||
);
|
||||
}
|
226
src/components/Collections/CollectionOptions/index.tsx
Normal file
|
@ -0,0 +1,226 @@
|
|||
import { AlbumCollectionOption } from './AlbumCollectionOption';
|
||||
import React, { useContext } from 'react';
|
||||
import * as CollectionAPI from 'services/collectionService';
|
||||
import * as TrashService from 'services/trashService';
|
||||
import {
|
||||
changeCollectionVisibility,
|
||||
downloadAllCollectionFiles,
|
||||
} from 'utils/collection';
|
||||
import constants from 'utils/strings/constants';
|
||||
import { SetCollectionNamerAttributes } from '../CollectionNamer';
|
||||
import { Collection } from 'types/collection';
|
||||
import { IsArchived } from 'utils/magicMetadata';
|
||||
import { GalleryContext } from 'pages/gallery';
|
||||
import { logError } from 'utils/sentry';
|
||||
import { VISIBILITY_STATE } from 'types/magicMetadata';
|
||||
import { AppContext } from 'pages/_app';
|
||||
import OverflowMenu from 'components/OverflowMenu/menu';
|
||||
import { CollectionSummaryType } from 'constants/collection';
|
||||
import { TrashCollectionOption } from './TrashCollectionOption';
|
||||
import MoreHoriz from '@mui/icons-material/MoreHoriz';
|
||||
|
||||
interface CollectionOptionsProps {
|
||||
setCollectionNamerAttributes: SetCollectionNamerAttributes;
|
||||
activeCollection: Collection;
|
||||
collectionSummaryType: CollectionSummaryType;
|
||||
showCollectionShareModal: () => void;
|
||||
redirectToAll: () => void;
|
||||
}
|
||||
|
||||
export enum CollectionActions {
|
||||
SHOW_RENAME_DIALOG,
|
||||
RENAME,
|
||||
CONFIRM_DOWNLOAD,
|
||||
DOWNLOAD,
|
||||
ARCHIVE,
|
||||
UNARCHIVE,
|
||||
CONFIRM_DELETE,
|
||||
DELETE,
|
||||
SHOW_SHARE_DIALOG,
|
||||
CONFIRM_EMPTY_TRASH,
|
||||
EMPTY_TRASH,
|
||||
}
|
||||
|
||||
const CollectionOptions = (props: CollectionOptionsProps) => {
|
||||
const {
|
||||
activeCollection,
|
||||
collectionSummaryType,
|
||||
redirectToAll,
|
||||
setCollectionNamerAttributes,
|
||||
showCollectionShareModal,
|
||||
} = props;
|
||||
|
||||
const { startLoading, finishLoading, setDialogMessage } =
|
||||
useContext(AppContext);
|
||||
const { syncWithRemote } = useContext(GalleryContext);
|
||||
|
||||
const handleCollectionAction = (
|
||||
action: CollectionActions,
|
||||
loader = true
|
||||
) => {
|
||||
let callback;
|
||||
switch (action) {
|
||||
case CollectionActions.SHOW_RENAME_DIALOG:
|
||||
callback = showRenameCollectionModal;
|
||||
break;
|
||||
case CollectionActions.RENAME:
|
||||
callback = renameCollection;
|
||||
break;
|
||||
case CollectionActions.CONFIRM_DOWNLOAD:
|
||||
callback = confirmDownloadCollection;
|
||||
break;
|
||||
case CollectionActions.DOWNLOAD:
|
||||
callback = downloadCollection;
|
||||
break;
|
||||
case CollectionActions.ARCHIVE:
|
||||
callback = archiveCollection;
|
||||
break;
|
||||
case CollectionActions.UNARCHIVE:
|
||||
callback = unArchiveCollection;
|
||||
break;
|
||||
case CollectionActions.CONFIRM_DELETE:
|
||||
callback = confirmDeleteCollection;
|
||||
break;
|
||||
case CollectionActions.DELETE:
|
||||
callback = deleteCollection;
|
||||
break;
|
||||
case CollectionActions.SHOW_SHARE_DIALOG:
|
||||
callback = showCollectionShareModal;
|
||||
break;
|
||||
case CollectionActions.CONFIRM_EMPTY_TRASH:
|
||||
callback = confirmEmptyTrash;
|
||||
break;
|
||||
case CollectionActions.EMPTY_TRASH:
|
||||
callback = emptyTrash;
|
||||
break;
|
||||
default:
|
||||
logError(
|
||||
Error('invalid collection action '),
|
||||
'handleCollectionAction failed'
|
||||
);
|
||||
{
|
||||
action;
|
||||
}
|
||||
}
|
||||
return async (...args) => {
|
||||
try {
|
||||
loader && startLoading();
|
||||
await callback(...args);
|
||||
} catch (e) {
|
||||
setDialogMessage({
|
||||
title: constants.ERROR,
|
||||
content: constants.UNKNOWN_ERROR,
|
||||
close: { variant: 'danger' },
|
||||
});
|
||||
} finally {
|
||||
syncWithRemote(false, true);
|
||||
loader && finishLoading();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
const renameCollection = (newName: string) => {
|
||||
if (activeCollection.name !== newName) {
|
||||
CollectionAPI.renameCollection(activeCollection, newName);
|
||||
}
|
||||
};
|
||||
|
||||
const deleteCollection = async () => {
|
||||
await CollectionAPI.deleteCollection(activeCollection.id);
|
||||
redirectToAll();
|
||||
};
|
||||
|
||||
const archiveCollection = () => {
|
||||
changeCollectionVisibility(activeCollection, VISIBILITY_STATE.ARCHIVED);
|
||||
};
|
||||
|
||||
const unArchiveCollection = () => {
|
||||
changeCollectionVisibility(activeCollection, VISIBILITY_STATE.VISIBLE);
|
||||
};
|
||||
|
||||
const downloadCollection = () => {
|
||||
downloadAllCollectionFiles(activeCollection.id);
|
||||
};
|
||||
|
||||
const emptyTrash = async () => {
|
||||
await TrashService.emptyTrash();
|
||||
await TrashService.clearLocalTrash();
|
||||
redirectToAll();
|
||||
};
|
||||
|
||||
const showRenameCollectionModal = () => {
|
||||
setCollectionNamerAttributes({
|
||||
title: constants.RENAME_COLLECTION,
|
||||
buttonText: constants.RENAME,
|
||||
autoFilledName: activeCollection.name,
|
||||
callback: handleCollectionAction(CollectionActions.RENAME),
|
||||
});
|
||||
};
|
||||
|
||||
const confirmDeleteCollection = () => {
|
||||
setDialogMessage({
|
||||
title: constants.DELETE_COLLECTION_TITLE,
|
||||
content: constants.DELETE_COLLECTION_MESSAGE,
|
||||
proceed: {
|
||||
text: constants.DELETE_COLLECTION,
|
||||
action: handleCollectionAction(CollectionActions.DELETE),
|
||||
variant: 'danger',
|
||||
},
|
||||
close: {
|
||||
text: constants.CANCEL,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const confirmDownloadCollection = () => {
|
||||
setDialogMessage({
|
||||
title: constants.CONFIRM_DOWNLOAD_COLLECTION,
|
||||
content: constants.DOWNLOAD_COLLECTION_MESSAGE(),
|
||||
proceed: {
|
||||
text: constants.DOWNLOAD,
|
||||
action: handleCollectionAction(CollectionActions.DOWNLOAD),
|
||||
variant: 'accent',
|
||||
},
|
||||
close: {
|
||||
text: constants.CANCEL,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const confirmEmptyTrash = () =>
|
||||
setDialogMessage({
|
||||
title: constants.EMPTY_TRASH_TITLE,
|
||||
content: constants.EMPTY_TRASH_MESSAGE,
|
||||
|
||||
proceed: {
|
||||
action: handleCollectionAction(CollectionActions.EMPTY_TRASH),
|
||||
text: constants.EMPTY_TRASH,
|
||||
variant: 'danger',
|
||||
},
|
||||
close: { text: constants.CANCEL },
|
||||
});
|
||||
|
||||
return (
|
||||
<OverflowMenu
|
||||
ariaControls={'collection-options'}
|
||||
triggerButtonIcon={<MoreHoriz />}
|
||||
triggerButtonProps={{
|
||||
sx: {
|
||||
background: (theme) => theme.palette.fill.dark,
|
||||
},
|
||||
}}>
|
||||
{collectionSummaryType === CollectionSummaryType.trash ? (
|
||||
<TrashCollectionOption
|
||||
handleCollectionAction={handleCollectionAction}
|
||||
/>
|
||||
) : (
|
||||
<AlbumCollectionOption
|
||||
IsArchived={IsArchived(activeCollection)}
|
||||
handleCollectionAction={handleCollectionAction}
|
||||
/>
|
||||
)}
|
||||
</OverflowMenu>
|
||||
);
|
||||
};
|
||||
|
||||
export default CollectionOptions;
|
|
@ -0,0 +1,34 @@
|
|||
import CollectionCard from 'components/Collections/CollectionCard';
|
||||
import {
|
||||
AllCollectionTile,
|
||||
AllCollectionTileText,
|
||||
} from 'components/Collections/styledComponents';
|
||||
import React from 'react';
|
||||
import { styled } from '@mui/material';
|
||||
import constants from 'utils/strings/constants';
|
||||
import { CenteredFlex, Overlay } from 'components/Container';
|
||||
|
||||
const ImageContainer = styled(Overlay)`
|
||||
display: flex;
|
||||
font-size: 42px;
|
||||
`;
|
||||
|
||||
interface Iprops {
|
||||
showNextModal: () => void;
|
||||
}
|
||||
|
||||
export default function AddCollectionButton({ showNextModal }: Iprops) {
|
||||
return (
|
||||
<CollectionCard
|
||||
collectionTile={AllCollectionTile}
|
||||
onClick={() => showNextModal()}
|
||||
latestFile={null}>
|
||||
<AllCollectionTileText>
|
||||
{constants.CREATE_COLLECTION}
|
||||
</AllCollectionTileText>
|
||||
<ImageContainer>
|
||||
<CenteredFlex>+</CenteredFlex>
|
||||
</ImageContainer>
|
||||
</CollectionCard>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
import { Typography } from '@mui/material';
|
||||
import React from 'react';
|
||||
import CollectionCard from '../CollectionCard';
|
||||
import { CollectionSummary } from 'types/collection';
|
||||
import { AllCollectionTile, AllCollectionTileText } from '../styledComponents';
|
||||
|
||||
interface Iprops {
|
||||
collectionSummary: CollectionSummary;
|
||||
onCollectionClick: (collectionID: number) => void;
|
||||
}
|
||||
|
||||
export default function CollectionSelectorCard({
|
||||
onCollectionClick,
|
||||
collectionSummary,
|
||||
}: Iprops) {
|
||||
return (
|
||||
<CollectionCard
|
||||
collectionTile={AllCollectionTile}
|
||||
latestFile={collectionSummary.latestFile}
|
||||
onClick={() => onCollectionClick(collectionSummary.id)}>
|
||||
<AllCollectionTileText>
|
||||
<Typography>{collectionSummary.name}</Typography>
|
||||
</AllCollectionTileText>
|
||||
</CollectionCard>
|
||||
);
|
||||
}
|
93
src/components/Collections/CollectionSelector/index.tsx
Normal file
|
@ -0,0 +1,93 @@
|
|||
import React, { useContext, useEffect, useMemo } from 'react';
|
||||
import { Collection, CollectionSummaries } from 'types/collection';
|
||||
import DialogTitleWithCloseButton from 'components/DialogBox/TitleWithCloseButton';
|
||||
import { isUploadAllowedCollection } from 'utils/collection';
|
||||
import { AppContext } from 'pages/_app';
|
||||
import { AllCollectionDialog } from 'components/Collections/AllCollections/dialog';
|
||||
import { DialogContent } from '@mui/material';
|
||||
import { FlexWrapper } from 'components/Container';
|
||||
import CollectionSelectorCard from './CollectionCard';
|
||||
import AddCollectionButton from './AddCollectionButton';
|
||||
|
||||
export interface CollectionSelectorAttributes {
|
||||
callback: (collection: Collection) => void;
|
||||
showNextModal: () => void;
|
||||
title: string;
|
||||
fromCollection?: number;
|
||||
}
|
||||
|
||||
interface Props {
|
||||
open: boolean;
|
||||
onClose: (closeBtnClick?: boolean) => void;
|
||||
attributes: CollectionSelectorAttributes;
|
||||
collections: Collection[];
|
||||
collectionSummaries: CollectionSummaries;
|
||||
}
|
||||
function CollectionSelector({
|
||||
attributes,
|
||||
collectionSummaries,
|
||||
collections,
|
||||
...props
|
||||
}: Props) {
|
||||
const appContext = useContext(AppContext);
|
||||
const collectionToShow = useMemo(() => {
|
||||
const personalCollectionsOtherThanFrom = [
|
||||
...collectionSummaries.values(),
|
||||
]?.filter(
|
||||
({ type, id }) =>
|
||||
id !== attributes?.fromCollection &&
|
||||
isUploadAllowedCollection(type)
|
||||
);
|
||||
return personalCollectionsOtherThanFrom;
|
||||
}, [collectionSummaries, attributes]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!attributes || !props.open) {
|
||||
return;
|
||||
}
|
||||
if (collectionToShow.length === 0) {
|
||||
props.onClose();
|
||||
attributes.showNextModal();
|
||||
}
|
||||
}, [collectionToShow, attributes, props.open]);
|
||||
|
||||
if (!attributes) {
|
||||
return <></>;
|
||||
}
|
||||
|
||||
const handleCollectionClick = (collectionID: number) => {
|
||||
const collection = collections.find((c) => c.id === collectionID);
|
||||
attributes.callback(collection);
|
||||
props.onClose();
|
||||
};
|
||||
|
||||
const onCloseButtonClick = () => props.onClose(true);
|
||||
|
||||
return (
|
||||
<AllCollectionDialog
|
||||
onClose={props.onClose}
|
||||
open={props.open}
|
||||
position="center"
|
||||
fullScreen={appContext.isMobile}>
|
||||
<DialogTitleWithCloseButton onClose={onCloseButtonClick}>
|
||||
{attributes.title}
|
||||
</DialogTitleWithCloseButton>
|
||||
<DialogContent>
|
||||
<FlexWrapper flexWrap="wrap" gap={0.5}>
|
||||
<AddCollectionButton
|
||||
showNextModal={attributes.showNextModal}
|
||||
/>
|
||||
{collectionToShow.map((collectionSummary) => (
|
||||
<CollectionSelectorCard
|
||||
onCollectionClick={handleCollectionClick}
|
||||
collectionSummary={collectionSummary}
|
||||
key={collectionSummary.id}
|
||||
/>
|
||||
))}
|
||||
</FlexWrapper>
|
||||
</DialogContent>
|
||||
</AllCollectionDialog>
|
||||
);
|
||||
}
|
||||
|
||||
export default CollectionSelector;
|
25
src/components/Collections/CollectionShare/container.tsx
Normal file
|
@ -0,0 +1,25 @@
|
|||
import { Dialog, styled } from '@mui/material';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
export const CollectionShareContainer = styled(Dialog)(({ theme }) => ({
|
||||
'& .MuiDialog-container': {
|
||||
justifyContent: 'flex-end',
|
||||
},
|
||||
'& .MuiPaper-root': {
|
||||
width: '414px',
|
||||
},
|
||||
'& .MuiDialog-paperFullScreen': {
|
||||
maxWidth: '100%',
|
||||
},
|
||||
'& .MuiDialogTitle-root': {
|
||||
padding: theme.spacing(4, 3, 3, 4),
|
||||
},
|
||||
'& .MuiDialogContent-root': {
|
||||
padding: theme.spacing(3, 4),
|
||||
},
|
||||
}));
|
||||
|
||||
CollectionShareContainer.propTypes = {
|
||||
children: PropTypes.node,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
};
|
53
src/components/Collections/CollectionShare/emailShare.tsx
Normal file
|
@ -0,0 +1,53 @@
|
|||
import SingleInputForm, {
|
||||
SingleInputFormProps,
|
||||
} from 'components/SingleInputForm';
|
||||
import { GalleryContext } from 'pages/gallery';
|
||||
import React, { useContext } from 'react';
|
||||
import { shareCollection } from 'services/collectionService';
|
||||
import { User } from 'types/user';
|
||||
import { handleSharingErrors } from 'utils/error';
|
||||
import { getData, LS_KEYS } from 'utils/storage/localStorage';
|
||||
import constants from 'utils/strings/constants';
|
||||
import { CollectionShareSharees } from './sharees';
|
||||
|
||||
export default function EmailShare({ collection }) {
|
||||
const galleryContext = useContext(GalleryContext);
|
||||
|
||||
const collectionShare: SingleInputFormProps['callback'] = async (
|
||||
email,
|
||||
setFieldError
|
||||
) => {
|
||||
try {
|
||||
const user: User = getData(LS_KEYS.USER);
|
||||
if (email === user.email) {
|
||||
setFieldError(constants.SHARE_WITH_SELF);
|
||||
} else if (
|
||||
collection?.sharees?.find((value) => value.email === email)
|
||||
) {
|
||||
setFieldError(constants.ALREADY_SHARED(email));
|
||||
} else {
|
||||
await shareCollection(collection, email);
|
||||
await galleryContext.syncWithRemote(false, true);
|
||||
}
|
||||
} catch (e) {
|
||||
const errorMessage = handleSharingErrors(e);
|
||||
setFieldError(errorMessage);
|
||||
}
|
||||
};
|
||||
return (
|
||||
<>
|
||||
<SingleInputForm
|
||||
callback={collectionShare}
|
||||
placeholder={constants.ENTER_EMAIL}
|
||||
fieldType="email"
|
||||
buttonText={constants.SHARE}
|
||||
submitButtonProps={{
|
||||
size: 'medium',
|
||||
sx: { mt: 1, mb: 2 },
|
||||
}}
|
||||
disableAutoFocus
|
||||
/>
|
||||
<CollectionShareSharees collection={collection} />
|
||||
</>
|
||||
);
|
||||
}
|
49
src/components/Collections/CollectionShare/index.tsx
Normal file
|
@ -0,0 +1,49 @@
|
|||
import EmailShare from './emailShare';
|
||||
import React, { useContext } from 'react';
|
||||
import constants from 'utils/strings/constants';
|
||||
import { Collection } from 'types/collection';
|
||||
import DialogTitleWithCloseButton, {
|
||||
dialogCloseHandler,
|
||||
} from 'components/DialogBox/TitleWithCloseButton';
|
||||
import DialogContent from '@mui/material/DialogContent';
|
||||
import { Divider } from '@mui/material';
|
||||
|
||||
import { CollectionShareContainer } from './container';
|
||||
import PublicShare from './publicShare';
|
||||
import { AppContext } from 'pages/_app';
|
||||
|
||||
interface Props {
|
||||
open: boolean;
|
||||
onClose: () => void;
|
||||
collection: Collection;
|
||||
}
|
||||
|
||||
function CollectionShare(props: Props) {
|
||||
const { isMobile } = useContext(AppContext);
|
||||
const handleClose = dialogCloseHandler({
|
||||
onClose: props.onClose,
|
||||
});
|
||||
|
||||
if (!props.collection) {
|
||||
return <></>;
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<CollectionShareContainer
|
||||
open={props.open}
|
||||
onClose={handleClose}
|
||||
fullScreen={isMobile}>
|
||||
<DialogTitleWithCloseButton onClose={handleClose}>
|
||||
{constants.SHARE_COLLECTION}
|
||||
</DialogTitleWithCloseButton>
|
||||
<DialogContent>
|
||||
<EmailShare collection={props.collection} />
|
||||
<Divider />
|
||||
<PublicShare collection={props.collection} />
|
||||
</DialogContent>
|
||||
</CollectionShareContainer>
|
||||
</>
|
||||
);
|
||||
}
|
||||
export default CollectionShare;
|
|
@ -0,0 +1,102 @@
|
|||
import { Box, Typography } from '@mui/material';
|
||||
import { FlexWrapper } from 'components/Container';
|
||||
import { ButtonVariant } from 'components/pages/gallery/LinkButton';
|
||||
import { AppContext } from 'pages/_app';
|
||||
import React, { useContext, useState } from 'react';
|
||||
import {
|
||||
createShareableURL,
|
||||
deleteShareableURL,
|
||||
} from 'services/collectionService';
|
||||
import { Collection, PublicURL } from 'types/collection';
|
||||
import { handleSharingErrors } from 'utils/error';
|
||||
import constants from 'utils/strings/constants';
|
||||
import PublicShareSwitch from './switch';
|
||||
interface Iprops {
|
||||
collection: Collection;
|
||||
publicShareActive: boolean;
|
||||
setPublicShareProp: (value: PublicURL) => void;
|
||||
}
|
||||
|
||||
export default function PublicShareControl({
|
||||
collection,
|
||||
publicShareActive,
|
||||
setPublicShareProp,
|
||||
}: Iprops) {
|
||||
const appContext = useContext(AppContext);
|
||||
|
||||
const [sharableLinkError, setSharableLinkError] = useState(null);
|
||||
|
||||
const createSharableURLHelper = async () => {
|
||||
try {
|
||||
appContext.startLoading();
|
||||
const publicURL = await createShareableURL(collection);
|
||||
setPublicShareProp(publicURL);
|
||||
} catch (e) {
|
||||
const errorMessage = handleSharingErrors(e);
|
||||
setSharableLinkError(errorMessage);
|
||||
} finally {
|
||||
appContext.finishLoading();
|
||||
}
|
||||
};
|
||||
|
||||
const disablePublicSharing = async () => {
|
||||
try {
|
||||
appContext.startLoading();
|
||||
await deleteShareableURL(collection);
|
||||
setPublicShareProp(null);
|
||||
} catch (e) {
|
||||
const errorMessage = handleSharingErrors(e);
|
||||
setSharableLinkError(errorMessage);
|
||||
} finally {
|
||||
appContext.finishLoading();
|
||||
}
|
||||
};
|
||||
|
||||
const confirmDisablePublicSharing = () => {
|
||||
appContext.setDialogMessage({
|
||||
title: constants.DISABLE_PUBLIC_SHARING,
|
||||
content: constants.DISABLE_PUBLIC_SHARING_MESSAGE,
|
||||
close: { text: constants.CANCEL },
|
||||
proceed: {
|
||||
text: constants.DISABLE,
|
||||
action: disablePublicSharing,
|
||||
variant: ButtonVariant.danger,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const handleCollectionPublicSharing = () => {
|
||||
setSharableLinkError(null);
|
||||
if (publicShareActive) {
|
||||
confirmDisablePublicSharing();
|
||||
} else {
|
||||
createSharableURLHelper();
|
||||
}
|
||||
};
|
||||
return (
|
||||
<Box mt={3}>
|
||||
<FlexWrapper>
|
||||
<FlexWrapper>{constants.PUBLIC_SHARING}</FlexWrapper>
|
||||
|
||||
<PublicShareSwitch
|
||||
color="accent"
|
||||
sx={{
|
||||
ml: 2,
|
||||
}}
|
||||
checked={publicShareActive}
|
||||
onChange={handleCollectionPublicSharing}
|
||||
/>
|
||||
</FlexWrapper>
|
||||
{sharableLinkError && (
|
||||
<Typography
|
||||
variant="body2"
|
||||
sx={{
|
||||
color: (theme) => theme.palette.danger.main,
|
||||
mt: 0.5,
|
||||
}}>
|
||||
{sharableLinkError}
|
||||
</Typography>
|
||||
)}
|
||||
</Box>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import { Collection, PublicURL } from 'types/collection';
|
||||
import { appendCollectionKeyToShareURL } from 'utils/collection';
|
||||
import PublicShareControl from './control';
|
||||
import PublicShareLink from './link';
|
||||
import PublicShareManage from './manage';
|
||||
|
||||
export default function PublicShare({
|
||||
collection,
|
||||
}: {
|
||||
collection: Collection;
|
||||
}) {
|
||||
const [publicShareUrl, setPublicShareUrl] = useState<string>(null);
|
||||
const [publicShareProp, setPublicShareProp] = useState<PublicURL>(null);
|
||||
|
||||
useEffect(() => {
|
||||
if (collection.publicURLs?.length) {
|
||||
setPublicShareProp(collection.publicURLs[0]);
|
||||
}
|
||||
}, [collection]);
|
||||
|
||||
useEffect(() => {
|
||||
if (publicShareProp) {
|
||||
const url = appendCollectionKeyToShareURL(
|
||||
publicShareProp.url,
|
||||
collection.key
|
||||
);
|
||||
setPublicShareUrl(url);
|
||||
} else {
|
||||
setPublicShareUrl(null);
|
||||
}
|
||||
}, [publicShareProp]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<PublicShareControl
|
||||
setPublicShareProp={setPublicShareProp}
|
||||
collection={collection}
|
||||
publicShareActive={!!publicShareProp}
|
||||
/>
|
||||
{publicShareProp && (
|
||||
<>
|
||||
<PublicShareLink publicShareUrl={publicShareUrl} />
|
||||
|
||||
<PublicShareManage
|
||||
publicShareProp={publicShareProp}
|
||||
collection={collection}
|
||||
setPublicShareProp={setPublicShareProp}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
import { Box } from '@mui/material';
|
||||
import CodeBlock from 'components/CodeBlock';
|
||||
import React from 'react';
|
||||
|
||||
export default function PublicShareLink({ publicShareUrl }) {
|
||||
return (
|
||||
<Box mt={2} mb={3}>
|
||||
<CodeBlock wordBreak={'break-all'} code={publicShareUrl} />
|
||||
</Box>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
import { Box, Typography } from '@mui/material';
|
||||
import React from 'react';
|
||||
import Select from 'react-select';
|
||||
import { DropdownStyle } from 'styles/dropdown';
|
||||
import { getDeviceLimitOptions } from 'utils/collection';
|
||||
import constants from 'utils/strings/constants';
|
||||
import { OptionWithDivider } from './selectComponents/OptionWithDivider';
|
||||
|
||||
export function ManageDeviceLimit({
|
||||
publicShareProp,
|
||||
collection,
|
||||
updatePublicShareURLHelper,
|
||||
}) {
|
||||
const updateDeviceLimit = async (newLimit: number) => {
|
||||
return updatePublicShareURLHelper({
|
||||
collectionID: collection.id,
|
||||
deviceLimit: newLimit,
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<Box>
|
||||
<Typography mb={0.5}>{constants.LINK_DEVICE_LIMIT}</Typography>
|
||||
<Select
|
||||
menuPosition="fixed"
|
||||
options={getDeviceLimitOptions()}
|
||||
components={{
|
||||
Option: OptionWithDivider,
|
||||
}}
|
||||
isSearchable={false}
|
||||
value={{
|
||||
label: publicShareProp?.deviceLimit.toString(),
|
||||
value: publicShareProp?.deviceLimit,
|
||||
}}
|
||||
onChange={(e) => updateDeviceLimit(e.value)}
|
||||
styles={DropdownStyle}
|
||||
/>
|
||||
</Box>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
import { Box, Typography } from '@mui/material';
|
||||
import { ButtonVariant } from 'components/pages/gallery/LinkButton';
|
||||
import { AppContext } from 'pages/_app';
|
||||
import React, { useContext } from 'react';
|
||||
import constants from 'utils/strings/constants';
|
||||
import PublicShareSwitch from '../switch';
|
||||
export function ManageDownloadAccess({
|
||||
publicShareProp,
|
||||
updatePublicShareURLHelper,
|
||||
collection,
|
||||
}) {
|
||||
const appContext = useContext(AppContext);
|
||||
|
||||
const handleFileDownloadSetting = () => {
|
||||
if (publicShareProp.enableDownload) {
|
||||
disableFileDownload();
|
||||
} else {
|
||||
updatePublicShareURLHelper({
|
||||
collectionID: collection.id,
|
||||
enableDownload: true,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const disableFileDownload = () => {
|
||||
appContext.setDialogMessage({
|
||||
title: constants.DISABLE_FILE_DOWNLOAD,
|
||||
content: constants.DISABLE_FILE_DOWNLOAD_MESSAGE(),
|
||||
close: { text: constants.CANCEL },
|
||||
proceed: {
|
||||
text: constants.DISABLE,
|
||||
action: () =>
|
||||
updatePublicShareURLHelper({
|
||||
collectionID: collection.id,
|
||||
enableDownload: false,
|
||||
}),
|
||||
variant: ButtonVariant.danger,
|
||||
},
|
||||
});
|
||||
};
|
||||
return (
|
||||
<Box>
|
||||
<Typography mb={0.5}>{constants.FILE_DOWNLOAD}</Typography>
|
||||
<PublicShareSwitch
|
||||
checked={publicShareProp?.enableDownload ?? false}
|
||||
onChange={handleFileDownloadSetting}
|
||||
/>
|
||||
</Box>
|
||||
);
|
||||
}
|
|
@ -0,0 +1,115 @@
|
|||
import { ManageLinkPassword } from './linkPassword';
|
||||
import { ManageDeviceLimit } from './deviceLimit';
|
||||
import { ManageLinkExpiry } from './linkExpiry';
|
||||
import { PublicLinkSetPassword } from '../setPassword';
|
||||
import { Stack, Typography } from '@mui/material';
|
||||
import { GalleryContext } from 'pages/gallery';
|
||||
import React, { useContext, useState } from 'react';
|
||||
import { updateShareableURL } from 'services/collectionService';
|
||||
import { UpdatePublicURL } from 'types/collection';
|
||||
import { sleep } from 'utils/common';
|
||||
import { handleSharingErrors } from 'utils/error';
|
||||
import constants from 'utils/strings/constants';
|
||||
import {
|
||||
ManageSectionLabel,
|
||||
ManageSectionOptions,
|
||||
} from '../../styledComponents';
|
||||
import { ManageDownloadAccess } from './downloadAccess';
|
||||
|
||||
export default function PublicShareManage({
|
||||
publicShareProp,
|
||||
collection,
|
||||
setPublicShareProp,
|
||||
}) {
|
||||
const galleryContext = useContext(GalleryContext);
|
||||
|
||||
const [changePasswordView, setChangePasswordView] = useState(false);
|
||||
const [sharableLinkError, setSharableLinkError] = useState(null);
|
||||
|
||||
const closeConfigurePassword = () => setChangePasswordView(false);
|
||||
|
||||
const updatePublicShareURLHelper = async (req: UpdatePublicURL) => {
|
||||
try {
|
||||
galleryContext.setBlockingLoad(true);
|
||||
const response = await updateShareableURL(req);
|
||||
setPublicShareProp(response);
|
||||
} catch (e) {
|
||||
const errorMessage = handleSharingErrors(e);
|
||||
setSharableLinkError(errorMessage);
|
||||
} finally {
|
||||
galleryContext.setBlockingLoad(false);
|
||||
}
|
||||
};
|
||||
|
||||
const scrollToEnd = (e) => {
|
||||
const lastOptionRow: Element =
|
||||
e.currentTarget.nextElementSibling.lastElementChild;
|
||||
const main = async (lastOptionRow: Element) => {
|
||||
await sleep(0);
|
||||
lastOptionRow.scrollIntoView(true);
|
||||
};
|
||||
main(lastOptionRow);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<details>
|
||||
<ManageSectionLabel onClick={scrollToEnd}>
|
||||
{constants.MANAGE_LINK}
|
||||
</ManageSectionLabel>
|
||||
<ManageSectionOptions>
|
||||
<Stack spacing={1.5}>
|
||||
<ManageLinkExpiry
|
||||
collection={collection}
|
||||
publicShareProp={publicShareProp}
|
||||
updatePublicShareURLHelper={
|
||||
updatePublicShareURLHelper
|
||||
}
|
||||
/>
|
||||
<ManageDeviceLimit
|
||||
collection={collection}
|
||||
publicShareProp={publicShareProp}
|
||||
updatePublicShareURLHelper={
|
||||
updatePublicShareURLHelper
|
||||
}
|
||||
/>
|
||||
<ManageDownloadAccess
|
||||
collection={collection}
|
||||
publicShareProp={publicShareProp}
|
||||
updatePublicShareURLHelper={
|
||||
updatePublicShareURLHelper
|
||||
}
|
||||
/>
|
||||
<ManageLinkPassword
|
||||
setChangePasswordView={setChangePasswordView}
|
||||
collection={collection}
|
||||
publicShareProp={publicShareProp}
|
||||
updatePublicShareURLHelper={
|
||||
updatePublicShareURLHelper
|
||||
}
|
||||
/>
|
||||
</Stack>
|
||||
{sharableLinkError && (
|
||||
<Typography
|
||||
textAlign={'center'}
|
||||
variant="body2"
|
||||
sx={{
|
||||
color: (theme) => theme.palette.danger.main,
|
||||
mt: 0.5,
|
||||
}}>
|
||||
{sharableLinkError}
|
||||
</Typography>
|
||||
)}
|
||||
</ManageSectionOptions>
|
||||
</details>
|
||||
<PublicLinkSetPassword
|
||||
open={changePasswordView}
|
||||
onClose={closeConfigurePassword}
|
||||
collection={collection}
|
||||
publicShareProp={publicShareProp}
|
||||
updatePublicShareURLHelper={updatePublicShareURLHelper}
|
||||
setChangePasswordView={setChangePasswordView}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|