diff options
Diffstat (limited to 'vendor/github.com/sjtug/cerberus')
44 files changed, 2941 insertions, 0 deletions
diff --git a/vendor/github.com/sjtug/cerberus/.dist.gitignore b/vendor/github.com/sjtug/cerberus/.dist.gitignore new file mode 100644 index 0000000..9dfa488 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/.dist.gitignore @@ -0,0 +1,41 @@ +# Devenv +.devenv* +devenv.local.nix + +# direnv +.direnv + +# pre-commit +.pre-commit-config.yaml + +.idea/ + + +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work +go.work.sum + +# env file +.env +caddy + +.parcel-cache
\ No newline at end of file diff --git a/vendor/github.com/sjtug/cerberus/.envrc b/vendor/github.com/sjtug/cerberus/.envrc new file mode 100644 index 0000000..30da14f --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/.envrc @@ -0,0 +1,5 @@ +export DIRENV_WARN_TIMEOUT=20s + +eval "$(devenv direnvrc)" + +use devenv diff --git a/vendor/github.com/sjtug/cerberus/.gitignore b/vendor/github.com/sjtug/cerberus/.gitignore new file mode 100644 index 0000000..9dfa488 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/.gitignore @@ -0,0 +1,41 @@ +# Devenv +.devenv* +devenv.local.nix + +# direnv +.direnv + +# pre-commit +.pre-commit-config.yaml + +.idea/ + + +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work +go.work.sum + +# env file +.env +caddy + +.parcel-cache
\ No newline at end of file diff --git a/vendor/github.com/sjtug/cerberus/.golangci.yaml b/vendor/github.com/sjtug/cerberus/.golangci.yaml new file mode 100644 index 0000000..1c0d967 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/.golangci.yaml @@ -0,0 +1,24 @@ +version: "2" +linters: + default: standard + enable: + - gosec + - revive + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/vendor/github.com/sjtug/cerberus/Caddyfile b/vendor/github.com/sjtug/cerberus/Caddyfile new file mode 100644 index 0000000..b3d20f8 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/Caddyfile @@ -0,0 +1,84 @@ +{ + log default { + level DEBUG + } + + # Global configuration for cerberus. + cerberus { + # Challenge difficulty (number of leading zeroes in the hash). + difficulty 12 + # When set to true, the handler will drop the connection instead of returning a 403 if the IP is blocked. + # drop + # Ed25519 signing key file path. If not provided, a new key will be generated. + # ed25519_key_file "ed25519.key" + # MaxPending is the maximum number of pending (and failed) requests. + # Any IP block (prefix configured in prefix_cfg) with more than this number of pending requests will be blocked. + max_pending 128 + # AccessPerApproval is the number of requests allowed per successful challenge. We recommend a value greater than 8 to support parallel and resumable downloads. + access_per_approval 8 + # BlockTTL is the time to live for blocked IPs. + block_ttl "24h" + # PendingTTL is the time to live for pending requests when considering whether to block an IP. + pending_ttl "1h" + # ApprovalTTL is the time to live for approved requests. + approval_ttl "1h" + # MaxMemUsage is the maximum memory usage for the pending and blocklist caches. + max_mem_usage "512MiB" + # CookieName is the name of the cookie used to store signed certificate. + cookie_name "cerberus-auth" + # HeaderName is the name of the header used to store cerberus status ("PASS-BRIEF", "PASS-FULL", "BLOCK", "FAIL"). + header_name "X-Cerberus-Status" + # Title is the title of the challenge page. + title "Cerberus Challenge" + # Mail is the email address to contact for support. + mail "admin@example.com" + # PrefixCfg is to configure prefixes used to block users in these IP prefix blocks, e.g., /24 /64. + # The first argument is for IPv4 and the second is for IPv6. + prefix_cfg 20 64 + } +} + +localhost { + encode + + # You need to deploy a handler for each cerberus instance. + # This route will be used to serve challenge endpoints and static files. + handle_path /.cerberus/* { + cerberus_endpoint + } + + @cerberus { + path *.iso + header User-Agent *Mozilla* + } + + # This is the actual middleware that will be used to challenge requests. + # You can attach a named matcher to the cerberus directive. Only requests matching the matcher will be challenged. + cerberus @cerberus { + # The base URL for the challenge. It must be the same as the deployed endpoint route. + base_url "/.cerberus" + } + + @except_cerberus_endpoint { + not path /.cerberus/* + } + + # Block bad IPs except for the cerberus endpoint. + cerberus @except_cerberus_endpoint { + base_url "/.cerberus" + # Cerberus in block only mode doesn't perform any challenge. It only blocks known bad IPs. + block_only + } + + handle / { + respond "Hello, world!" + } + + handle /foo { + respond "Hello, foo!" + } + + handle /foo.iso { + respond "Hello, foo.iso!" + } +} diff --git a/vendor/github.com/sjtug/cerberus/LICENSE.anubis.md b/vendor/github.com/sjtug/cerberus/LICENSE.anubis.md new file mode 100644 index 0000000..1d2db09 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/LICENSE.anubis.md @@ -0,0 +1,19 @@ +Copyright (c) 2025 Xe Iaso <me@xeiaso.net> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.
\ No newline at end of file diff --git a/vendor/github.com/sjtug/cerberus/LICENSE.md b/vendor/github.com/sjtug/cerberus/LICENSE.md new file mode 100644 index 0000000..1281fdf --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/LICENSE.md @@ -0,0 +1,23 @@ +Copyright (c) 2025 Yanning Chen <self@lightquantum.me> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +--- + +This project includes code from [Anubis](https://github.com/TecharoHQ/anubis/) licensed under the MIT License: see [LICENSE.anubis.md](LICENSE.anubis.md).
\ No newline at end of file diff --git a/vendor/github.com/sjtug/cerberus/README.md b/vendor/github.com/sjtug/cerberus/README.md new file mode 100644 index 0000000..8cef5d2 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/README.md @@ -0,0 +1,96 @@ +# Cerberus + +<center> + <img width=256 src="./web/img/mascot-puzzle.png" alt="A smiling chibi dark-skinned anthro jackal with brown hair and tall ears looking victorious with a thumbs-up" /> +</center> + +Cerberus guards the gates of open source infrastructure using a sha256 PoW challenge to protect them from unwanted traffic. It provides a Caddy handler that can be applied to existing Caddy servers. + +This project started as a Caddy port of [Anubis](https://github.com/TecharoHQ/anubis/) and is now a standalone project. While Anubis focuses on protecting websites from AI scrapers, Cerberus serves a different purpose: it's designed as a last line of defense to protect volunteer-run open source infrastructure from abusive traffic. We would do whatever it takes to stop them, even if it means sacrificing a few innocent cats. + +For now, the project is still mostly a re-implementation of Anubis, but it's actively developed, and will eventually employ more aggressive techniques. You can check the [Roadmap](#roadmap) section for more details. + +## Usage + +### Official Pre-built Binaries + +> Sometimes the official binaries are not up to date. In that case please build from source. + +1. Install Caddy with the plugin: + ```bash + caddy add-package github.com/sjtug/cerberus + ``` +2. Add the handler directive to your Caddyfile. Refer to the [Caddyfile](Caddyfile) for an example configuration. + +### Build from Source + +Please build against the **dist** branch or a release tag: + +```bash +# Build with a specific version +xcaddy build --with github.com/sjtug/cerberus@v1.0.0 + +# Or build with the latest dist branch +xcaddy build --with github.com/sjtug/cerberus@dist +``` + +## Comparison with Anubis + +- Anubis is a standalone server that can be used with any web server, while Cerberus is a Caddy plugin. +- No builtin anti-AI rules: use caddy matchers instead. +- Highly aggressive challenge policy: users need to solve a challenge for every few requests and new challenges are generated per request. For further details, see the [Aggressive challenge policy](#aggressive-challenge-policy) section. +- Can be set up to block IP subnets if there are too many failed challenge attempts to prevent abuse. +- ~~No custom UI or anime girls.~~ Now with an AI-generated placeholder mascot lol + +## Configuration + +Check [Caddyfile](Caddyfile) for an example configuration. + +## Roadmap + +- [x] More frequent challenges (each solution only grants a few accesses) +- [x] More frequent challenge rotation (per week -> per request) +- [ ] Configurable challenge difficulty for each route +- [x] "block_only" mode to serve as a blocklist even a route is not protected by PoW challenge +- [x] ~~RandomX PoW~~ unacceptably slow. Use blake3 (wasm) instead. +- [x] I18n +- [ ] Non-AI mascot + +## Aggressive challenge policy + +This is the first divergence from Anubis. Now, we require a user to repeat the challenge every few accesses. This is to ensure that we waste an attacker's computational resources to the extent that it becomes non-sustainable for the attacker to perform the attack. + +This will surely slow down legitimate users, but we believe that this is a necessary evil to protect our infrastructure. After all, a slow down is better than a complete outage. + +## Development + +You need to first generate necessary go files before developing: +```bash +$ devenv tasks run go:codegen +``` + +If you modified any web asset, you need to run the following command to build the dist files: +```bash +$ devenv tasks run dist:build +``` + +Please run tests and lints before submitting a PR: +```bash +$ direnv test # or go test +$ devenv tasks run go:lint +``` + +## Build Pipeline + +This repository uses a two-branch strategy: + +- **master branch**: Contains source code only (no generated artifacts) +- **dist branch**: Contains both source code and all generated artifacts + +### Release Process + +To create a release: + +1. Update the `Version` constant in `core/const.go`. +2. Go to "Actions" → "Build and Update Dist Branch" → "Run workflow". +3. Enter the version tag (e.g., "v1.0.0") and run the workflow.
\ No newline at end of file diff --git a/vendor/github.com/sjtug/cerberus/cerberus.go b/vendor/github.com/sjtug/cerberus/cerberus.go new file mode 100644 index 0000000..238d00c --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/cerberus.go @@ -0,0 +1,25 @@ +package cerberus + +import ( + "embed" + + "github.com/caddyserver/caddy/v2" + "github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile" + "github.com/sjtug/cerberus/directives" +) + +//go:embed translations +var translations embed.FS + +func init() { + directives.LoadI18n(translations) + + caddy.RegisterModule(directives.App{}) + caddy.RegisterModule(directives.Middleware{}) + caddy.RegisterModule(directives.Endpoint{}) + httpcaddyfile.RegisterGlobalOption("cerberus", directives.ParseCaddyFileApp) + httpcaddyfile.RegisterHandlerDirective("cerberus", directives.ParseCaddyFileMiddleware) + httpcaddyfile.RegisterHandlerDirective("cerberus_endpoint", directives.ParseCaddyFileEndpoint) + httpcaddyfile.RegisterDirectiveOrder("cerberus", httpcaddyfile.Before, "invoke") + httpcaddyfile.RegisterDirectiveOrder("cerberus_endpoint", httpcaddyfile.Before, "invoke") +} diff --git a/vendor/github.com/sjtug/cerberus/core/config.go b/vendor/github.com/sjtug/cerberus/core/config.go new file mode 100644 index 0000000..470d6a3 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/core/config.go @@ -0,0 +1,216 @@ +package core + +import ( + "bytes" + "crypto/ed25519" + "encoding/hex" + "errors" + "fmt" + "os" + "time" + + "github.com/sjtug/cerberus/internal/ipblock" + "go.uber.org/zap" + "golang.org/x/crypto/ssh" +) + +const ( + DefaultCookieName = "cerberus-auth" + DefaultHeaderName = "X-Cerberus-Status" + DefaultDifficulty = 4 + DefaultMaxPending = 128 + DefaultAccessPerApproval = 8 + DefaultBlockTTL = time.Hour * 24 // 1 day + DefaultPendingTTL = time.Hour // 1 hour + DefaultApprovalTTL = time.Hour // 1 hour + DefaultMaxMemUsage = 1 << 29 // 512MB + DefaultTitle = "Cerberus Challenge" + DefaultDescription = "Making sure you're not a bot!" + DefaultIPV4Prefix = 32 + DefaultIPV6Prefix = 64 +) + +type Config struct { + // Challenge difficulty (number of leading zeroes in the hash). + Difficulty int `json:"difficulty,omitempty"` + // When set to true, the handler will drop the connection instead of returning a 403 if the IP is blocked. + Drop bool `json:"drop,omitempty"` + // Ed25519 signing key file path. If not provided, a new key will be generated. + Ed25519KeyFile string `json:"ed25519_key_file,omitempty"` + // Ed25519 signing key content. If not provided, a new key will be generated. + Ed25519Key string `json:"ed25519_key,omitempty"` + // MaxPending is the maximum number of pending (and failed) requests. + // Any IP block (prefix configured in prefix_cfg) with more than this number of pending requests will be blocked. + MaxPending int32 `json:"max_pending,omitempty"` + // AccessPerApproval is the number of requests allowed per successful challenge. + AccessPerApproval int32 `json:"access_per_approval,omitempty"` + // BlockTTL is the time to live for blocked IPs. + BlockTTL time.Duration `json:"block_ttl,omitempty"` + // PendingTTL is the time to live for pending requests when considering whether to block an IP. + PendingTTL time.Duration `json:"pending_ttl,omitempty"` + // ApprovalTTL is the time to live for approved requests. + ApprovalTTL time.Duration `json:"approval_ttl,omitempty"` + // MaxMemUsage is the maximum memory usage for the pending and blocklist caches. + MaxMemUsage int64 `json:"max_mem_usage,omitempty"` + // CookieName is the name of the cookie used to store signed certificate. + CookieName string `json:"cookie_name,omitempty"` + // HeaderName is the name of the header used to store cerberus status ("PASS", "CHALLENGE", "FAIL", "BLOCKED", "DISABLED"). + HeaderName string `json:"header_name,omitempty"` + // Title is the title of the challenge page. + Title string `json:"title,omitempty"` + // Mail is the email address to contact for support. + Mail string `json:"mail,omitempty"` + // PrefixCfg is to configure prefixes used to block users in these IP prefix blocks, e.g., /24 /64. + PrefixCfg ipblock.Config `json:"prefix_cfg,omitempty"` + + ed25519Key ed25519.PrivateKey + ed25519Pub ed25519.PublicKey +} + +func (c *Config) Provision(logger *zap.Logger) error { + if c.Difficulty == 0 { + c.Difficulty = DefaultDifficulty + } + if c.MaxPending == 0 { + c.MaxPending = DefaultMaxPending + } + if c.AccessPerApproval == 0 { + c.AccessPerApproval = DefaultAccessPerApproval + } + if c.BlockTTL == time.Duration(0) { + c.BlockTTL = DefaultBlockTTL + } + if c.PendingTTL == time.Duration(0) { + c.PendingTTL = DefaultPendingTTL + } + if c.ApprovalTTL == time.Duration(0) { + c.ApprovalTTL = DefaultApprovalTTL + } + if c.MaxMemUsage == 0 { + c.MaxMemUsage = DefaultMaxMemUsage + } + if c.CookieName == "" { + c.CookieName = DefaultCookieName + } + if c.HeaderName == "" { + c.HeaderName = DefaultHeaderName + } + if c.Title == "" { + c.Title = DefaultTitle + } + if c.PrefixCfg.IsEmpty() { + c.PrefixCfg = ipblock.Config{ + V4Prefix: DefaultIPV4Prefix, + V6Prefix: DefaultIPV6Prefix, + } + } + + if c.Ed25519KeyFile != "" || c.Ed25519Key != "" { + var raw []byte + var err error + if c.Ed25519KeyFile != "" { + logger.Info("loading ed25519 key from file", zap.String("path", c.Ed25519KeyFile)) + + raw, err = os.ReadFile(c.Ed25519KeyFile) + if err != nil { + return fmt.Errorf("failed to read ed25519 key file: %w", err) + } + } else { + raw = []byte(c.Ed25519Key) + } + + c.ed25519Key, err = LoadEd25519Key(raw) + if err != nil { + return fmt.Errorf("failed to load ed25519 key: %w", err) + } + + c.ed25519Pub = c.ed25519Key.Public().(ed25519.PublicKey) + } else { + logger.Info("generating new ed25519 key") + var err error + c.ed25519Pub, c.ed25519Key, err = ed25519.GenerateKey(nil) + if err != nil { + return fmt.Errorf("failed to generate ed25519 key: %w", err) + } + } + + return nil +} + +func (c *Config) Validate() error { + if c.Difficulty < 1 { + return errors.New("difficulty must be at least 1") + } + if c.MaxPending < 1 { + return errors.New("max_pending must be at least 1") + } + if c.AccessPerApproval < 1 { + return errors.New("access_per_approval must be at least 1") + } + if c.BlockTTL < 0 { + return errors.New("block_ttl must be a positive duration") + } + if c.PendingTTL < 0 { + return errors.New("pending_ttl must be a positive duration") + } + if c.ApprovalTTL < 0 { + return errors.New("approval_ttl must be a positive duration") + } + if c.MaxMemUsage < 1 { + return errors.New("max_mem_usage must be at least 1") + } + if c.Ed25519KeyFile != "" && c.Ed25519Key != "" { + return errors.New("ed25519_key_file and ed25519_key cannot both be set") + } + if err := ipblock.ValidateConfig(c.PrefixCfg); err != nil { + return fmt.Errorf("prefix_cfg: %w", err) + } + + return nil +} + +func (c *Config) StateCompatible(other *Config) bool { + return c.BlockTTL == other.BlockTTL && + c.PendingTTL == other.PendingTTL && + c.ApprovalTTL == other.ApprovalTTL && + c.AccessPerApproval == other.AccessPerApproval && + c.MaxMemUsage == other.MaxMemUsage && + c.PrefixCfg == other.PrefixCfg +} + +func (c *Config) GetPublicKey() ed25519.PublicKey { + return c.ed25519Pub +} + +func (c *Config) GetPrivateKey() ed25519.PrivateKey { + return c.ed25519Key +} + +func LoadEd25519Key(data []byte) (ed25519.PrivateKey, error) { + // First try to parse as openssh or x509 private key + if bytes.HasPrefix(data, []byte("-----BEGIN ")) { + raw, err := ssh.ParseRawPrivateKey(data) + if err != nil { + return nil, fmt.Errorf("failed to parse pem private key: %w", err) + } + if key, ok := raw.(ed25519.PrivateKey); ok { + return key, nil + } + if key, ok := raw.(*ed25519.PrivateKey); ok { + return *key, nil + } + return nil, errors.New("must be ed25519 private key") + } + + // Then try to parse as hex + raw, err := hex.DecodeString(string(data)) + if err != nil { + return nil, fmt.Errorf("failed to parse hex private key: %w", err) + } + if len(raw) != ed25519.SeedSize { + return nil, fmt.Errorf("invalid ed25519 private key: expected %d bytes, got %d", ed25519.SeedSize, len(raw)) + } + + key := ed25519.NewKeyFromSeed(raw) + return key, nil +} diff --git a/vendor/github.com/sjtug/cerberus/core/const.go b/vendor/github.com/sjtug/cerberus/core/const.go new file mode 100644 index 0000000..953cd9d --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/core/const.go @@ -0,0 +1,11 @@ +package core + +import "time" + +const ( + AppName = "cerberus" + VarIPBlock = "cerberus-block" + VarReqID = "cerberus-request-id" + Version = "v0.4.3" + NonceTTL = 2 * time.Minute +) diff --git a/vendor/github.com/sjtug/cerberus/core/instance.go b/vendor/github.com/sjtug/cerberus/core/instance.go new file mode 100644 index 0000000..fa4962f --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/core/instance.go @@ -0,0 +1,39 @@ +package core + +import ( + "go.uber.org/zap" +) + +// Instance is the shared core of the cerberus module. +// There's only one instance of this struct in the entire Caddy runtime. +type Instance struct { + *InstanceState + Config +} + +// UpdateWithConfig updates the instance with a new config. +// If the config is incompatible with the current config, its internal state will be reset. +// User can pass in an optional logger to log basic metrics about the initialized state. +func (i *Instance) UpdateWithConfig(c Config, logger *zap.Logger) error { + logger.Info("updating cerberus instance config") + if i.StateCompatible(&c) { + // We only need to update the config. + i.Config = c + } else { + // We need to reset the state. + logger.Info("existing cerberus instance with incompatible config found, resetting state") + state, pendingElems, blocklistElems, approvalElems, err := NewInstanceState(c) + if err != nil { + return err + } + i.Config = c + i.Close() // Close the old state + i.InstanceState = state + logger.Info("cerberus state initialized", + zap.Int64("pending_elems", pendingElems), + zap.Int64("blocklist_elems", blocklistElems), + zap.Int64("approval_elems", approvalElems), + ) + } + return nil +} diff --git a/vendor/github.com/sjtug/cerberus/core/pool.go b/vendor/github.com/sjtug/cerberus/core/pool.go new file mode 100644 index 0000000..5d6268a --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/core/pool.go @@ -0,0 +1,48 @@ +package core + +import ( + "sync" + + "go.uber.org/zap" +) + +var ( + lock sync.RWMutex + instance *Instance +) + +// GetInstance returns an instance of given config. +// If there already exists an instance (during server reload), it will be updated with the new config. +// Otherwise, a new instance will be created. +// User can pass in an optional logger to log basic metrics about the initialized state. +func GetInstance(config Config, logger *zap.Logger) (*Instance, error) { + lock.Lock() + defer lock.Unlock() + + if instance == nil { + // Initialize a new instance. + state, pendingElems, blocklistElems, approvalElems, err := NewInstanceState(config) + if err != nil { + return nil, err + } + + logger.Info("cerberus state initialized", + zap.Int64("pending_elems", pendingElems), + zap.Int64("blocklist_elems", blocklistElems), + zap.Int64("approval_elems", approvalElems), + ) + instance = &Instance{ + Config: config, + InstanceState: state, + } + return instance, nil + } + + // Update the existing instance with the new config. + err := instance.UpdateWithConfig(config, logger) + if err != nil { + return nil, err + } + + return instance, nil +} diff --git a/vendor/github.com/sjtug/cerberus/core/state.go b/vendor/github.com/sjtug/cerberus/core/state.go new file mode 100644 index 0000000..597ea44 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/core/state.go @@ -0,0 +1,231 @@ +package core + +import ( + "sync/atomic" + "time" + "unsafe" + + "crypto/sha256" + "encoding/binary" + "encoding/hex" + + "github.com/elastic/go-freelru" + "github.com/google/uuid" + "github.com/sjtug/cerberus/internal/expiremap" + "github.com/sjtug/cerberus/internal/ipblock" + "github.com/zeebo/xxh3" +) + +const ( + FreeLRUInternalCost = 20 + PendingItemCost = FreeLRUInternalCost + int64(unsafe.Sizeof(ipblock.IPBlock{})) + int64(unsafe.Sizeof(&atomic.Int32{})) + int64(unsafe.Sizeof(atomic.Int32{})) + BlocklistItemCost = FreeLRUInternalCost + int64(unsafe.Sizeof(ipblock.IPBlock{})) + ApprovalItemCost = FreeLRUInternalCost + int64(unsafe.Sizeof(uuid.UUID{})) + int64(unsafe.Sizeof(&atomic.Int32{})) + int64(unsafe.Sizeof(atomic.Int32{})) +) + +func hashIPBlock(ip ipblock.IPBlock) uint32 { + data := ip.ToUint64() + + var buf [8]byte + binary.BigEndian.PutUint64(buf[:], data) + + hash := xxh3.Hash(buf[:]) + return uint32(hash) // #nosec G115 -- expected truncation +} + +func hashUUID(id uuid.UUID) uint32 { + hash := xxh3.Hash(id[:]) + return uint32(hash) // #nosec G115 -- expected truncation +} + +type InstanceState struct { + fp string + pending freelru.Cache[ipblock.IPBlock, *atomic.Int32] + blocklist freelru.Cache[ipblock.IPBlock, struct{}] + approval freelru.Cache[uuid.UUID, *atomic.Int32] + usedNonce *expiremap.ExpireMap[uint32, struct{}] + stop chan struct{} +} + +// initLRU creates and initializes an LRU cache with the given parameters +func initLRU[K comparable, V any]( + elems uint32, + hashFunc func(K) uint32, + ttl time.Duration, + stop chan struct{}, + purgeInterval time.Duration, +) (freelru.Cache[K, V], error) { + cache, err := freelru.NewSharded[K, V](elems, hashFunc) + if err != nil { + return nil, err + } + cache.SetLifetime(ttl) + + go func() { + for { + select { + case <-stop: + return + case <-time.After(purgeInterval): + cache.PurgeExpired() + } + } + }() + + return cache, nil +} + +// initUsedNonce creates and initializes an ExpireMap for tracking used nonces +func initUsedNonce(stop chan struct{}, purgeInterval time.Duration) *expiremap.ExpireMap[uint32, struct{}] { + usedNonce := expiremap.NewExpireMap[uint32, struct{}](func(x uint32) uint32 { + return x + }) + go func() { + for { + select { + case <-stop: + return + case <-time.After(purgeInterval): + usedNonce.PurgeExpired() + } + } + }() + return usedNonce +} + +func NewInstanceState(config Config) (*InstanceState, int64, int64, int64, error) { + uuid.EnableRandPool() + + stop := make(chan struct{}) + + pendingMaxMemUsage := config.MaxMemUsage / 10 + blocklistMaxMemUsage := config.MaxMemUsage / 10 + approvalMaxMemUsage := config.MaxMemUsage * 4 / 5 + + pendingElems := uint32(pendingMaxMemUsage / PendingItemCost) // #nosec G115 we trust config input + pending, err := initLRU[ipblock.IPBlock, *atomic.Int32]( + pendingElems, + hashIPBlock, + config.PendingTTL, + stop, + 37*time.Second, + ) + if err != nil { + return nil, 0, 0, 0, err + } + + blocklistElems := uint32(blocklistMaxMemUsage / BlocklistItemCost) // #nosec G115 we trust config input + blocklist, err := initLRU[ipblock.IPBlock, struct{}]( + blocklistElems, + hashIPBlock, + config.BlockTTL, + stop, + 61*time.Second, + ) + if err != nil { + return nil, 0, 0, 0, err + } + + approvalElems := uint32(approvalMaxMemUsage / ApprovalItemCost) // #nosec G115 we trust config input + approval, err := initLRU[uuid.UUID, *atomic.Int32]( + approvalElems, + hashUUID, + config.ApprovalTTL, + stop, + 43*time.Second, + ) + if err != nil { + return nil, 0, 0, 0, err + } + + usedNonce := initUsedNonce(stop, 41*time.Second) + + fp := sha256.Sum256(config.ed25519Key.Seed()) + + return &InstanceState{ + fp: hex.EncodeToString(fp[:]), + pending: pending, + blocklist: blocklist, + approval: approval, + usedNonce: usedNonce, + stop: stop, + }, int64(pendingElems), int64(blocklistElems), int64(approvalElems), nil +} + +func (s *InstanceState) GetFingerprint() string { + return s.fp +} + +func (s *InstanceState) IncPending(ip ipblock.IPBlock) int32 { + counter, ok := s.pending.Get(ip) + if ok { + return counter.Add(1) + } + + var newCounter atomic.Int32 + newCounter.Store(1) + s.pending.Add(ip, &newCounter) + return 1 +} + +func (s *InstanceState) DecPending(ip ipblock.IPBlock) int32 { + counter, ok := s.pending.Get(ip) + if ok { + count := counter.Add(-1) + if count <= 0 { + s.pending.Remove(ip) + return 0 + } + return count + } + + return 0 +} + +func (s *InstanceState) RemovePending(ip ipblock.IPBlock) bool { + return s.pending.Remove(ip) +} + +func (s *InstanceState) InsertBlocklist(ip ipblock.IPBlock) { + s.blocklist.Add(ip, struct{}{}) +} + +func (s *InstanceState) ContainsBlocklist(ip ipblock.IPBlock) bool { + _, ok := s.blocklist.Get(ip) + return ok +} + +// IssueApproval issues a new approval ID and returns it +func (s *InstanceState) IssueApproval(n int32) uuid.UUID { + id := uuid.New() + + var counter atomic.Int32 + counter.Store(n) + + s.approval.Add(id, &counter) + return id +} + +// DecApproval decrements the counter of the approval ID and returns whether the ID is still valid +func (s *InstanceState) DecApproval(id uuid.UUID) bool { + counter, ok := s.approval.Get(id) + if ok { + count := counter.Add(-1) + if count < 0 { + s.approval.Remove(id) + return false + } + return true + } + return false +} + +// InsertUsedNonce inserts a nonce into the usedNonce map. +// Returns true if the nonce was inserted, false if it was already present. +func (s *InstanceState) InsertUsedNonce(nonce uint32) bool { + return s.usedNonce.SetIfAbsent(nonce, struct{}{}, NonceTTL) +} + +func (s *InstanceState) Close() { + close(s.stop) +} diff --git a/vendor/github.com/sjtug/cerberus/devenv.lock b/vendor/github.com/sjtug/cerberus/devenv.lock new file mode 100644 index 0000000..3ef5ac0 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/devenv.lock @@ -0,0 +1,103 @@ +{ + "nodes": { + "devenv": { + "locked": { + "dir": "src/modules", + "lastModified": 1747717470, + "owner": "cachix", + "repo": "devenv", + "rev": "c7f2256ee4a4a4ee9cbf1e82a6e49b253c374995", + "type": "github" + }, + "original": { + "dir": "src/modules", + "owner": "cachix", + "repo": "devenv", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1747046372, + "owner": "edolstra", + "repo": "flake-compat", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "git-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1747372754, + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1747885982, + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a16efe5d2fc7455d7328a01f4692bfec152965b3", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "devenv": "devenv", + "git-hooks": "git-hooks", + "nixpkgs": "nixpkgs", + "pre-commit-hooks": [ + "git-hooks" + ] + } + } + }, + "root": "root", + "version": 7 +} diff --git a/vendor/github.com/sjtug/cerberus/devenv.nix b/vendor/github.com/sjtug/cerberus/devenv.nix new file mode 100644 index 0000000..bfab98e --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/devenv.nix @@ -0,0 +1,98 @@ +{ pkgs, ... }: + +{ + # https://devenv.sh/packages/ + packages = with pkgs; [ + git + xcaddy + templ + esbuild + golangci-lint + tailwindcss_4 + pngquant + wasm-pack + ]; + + # https://devenv.sh/languages/ + languages.go = { + enable = true; + enableHardeningWorkaround = true; + }; + + tasks = + let + tailwindcss = "${pkgs.tailwindcss_4}/bin/tailwindcss"; + find = "${pkgs.findutils}/bin/find"; + xargs = "${pkgs.findutils}/bin/xargs"; + pngquant = "${pkgs.pngquant}/bin/pngquant"; + templ = "${pkgs.templ}/bin/templ"; + wasm-pack = "${pkgs.wasm-pack}/bin/wasm-pack"; + pnpm = "${pkgs.nodePackages.pnpm}/bin/pnpm"; + pnpx = "${pkgs.nodePackages.pnpm}/bin/pnpx"; + golangci-lint = "${pkgs.golangci-lint}/bin/golangci-lint"; + node = "${pkgs.nodejs}/bin/node"; + in + { + "css:build".exec = "${tailwindcss} -i ./web/global.css -o ./web/dist/global.css --minify"; + "wasm:build".exec = '' + ${wasm-pack} build --target web ./pow --no-default-features + ''; + "js:install" = { + exec = '' + cd web/js + ${pnpm} install + ''; + after = [ "wasm:build" ]; + }; + "js:bundle" = { + exec = '' + cd web/js + ${pnpx} parcel build --dist-dir ../dist/ + ''; + after = [ + "js:install" + "js:icu" + ]; + }; + "img:dist".exec = '' + mkdir -p ./web/dist/img + ${find} ./web/img -maxdepth 1 -name "*.png" -printf "%f\n" | ${xargs} -n 1 sh -c '${pngquant} --force --strip --quality 0-20 --speed 1 ./web/img/$0 -o ./web/dist/img/$0' + ''; + "go:codegen".exec = "${templ} generate"; + "js:icu" = { + exec = '' + cd web/js + mkdir -p icu + ${node} convert.js ../../translations icu/compiled.mjs + ''; + after = [ "js:install" ]; + }; + "dist:clean".exec = "rm -rf ./web/dist"; + "dist:build".after = [ + "css:build" + "js:bundle" + "img:dist" + "go:codegen" + ]; + "go:lint" = { + exec = "${golangci-lint} run"; + after = [ "go:codegen" ]; + }; + }; + + # tasks = { + # "myproj:setup".exec = "mytool build"; + # "devenv:enterShell".after = [ "myproj:setup" ]; + # }; + + # https://devenv.sh/tests/ + enterTest = '' + echo "Running tests" + go test ./... + ''; + + # https://devenv.sh/git-hooks/ + # git-hooks.hooks.shellcheck.enable = true; + + # See full reference at https://devenv.sh/reference/options/ +} diff --git a/vendor/github.com/sjtug/cerberus/devenv.yaml b/vendor/github.com/sjtug/cerberus/devenv.yaml new file mode 100644 index 0000000..ec3f91a --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/devenv.yaml @@ -0,0 +1,15 @@ +# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json +inputs: + nixpkgs: + url: github:nixos/nixpkgs/nixpkgs-unstable + +# If you're using non-OSS software, you can set allowUnfree to true. +# allowUnfree: true + +# If you're willing to use a package that's vulnerable +# permittedInsecurePackages: +# - "openssl-1.1.1w" + +# If you have more than one devenv you can merge them +#imports: +# - ./backend diff --git a/vendor/github.com/sjtug/cerberus/directives/app.go b/vendor/github.com/sjtug/cerberus/directives/app.go new file mode 100644 index 0000000..9b72632 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/directives/app.go @@ -0,0 +1,60 @@ +package directives + +import ( + "github.com/caddyserver/caddy/v2" + "github.com/sjtug/cerberus/core" +) + +// App is the global configuration for cerberus. +// There can only be one cerberus app in the entire Caddy runtime. +type App struct { + core.Config + instance *core.Instance +} + +func (c *App) GetInstance() *core.Instance { + return c.instance +} + +func (c *App) Provision(context caddy.Context) error { + err := c.Config.Provision(context.Logger()) + if err != nil { + return err + } + + context.Logger().Debug("cerberus instance provision") + + instance, err := core.GetInstance(c.Config, context.Logger()) + if err != nil { + return err + } + + c.instance = instance + + return nil +} + +func (c *App) Validate() error { + return c.Config.Validate() +} + +func (c *App) Start() error { + return nil +} + +func (c *App) Stop() error { + return nil +} + +func (App) CaddyModule() caddy.ModuleInfo { + return caddy.ModuleInfo{ + ID: "cerberus", + New: func() caddy.Module { return new(App) }, + } +} + +var ( + _ caddy.App = (*App)(nil) + _ caddy.Provisioner = (*App)(nil) + _ caddy.Validator = (*App)(nil) +) diff --git a/vendor/github.com/sjtug/cerberus/directives/caddyfile.go b/vendor/github.com/sjtug/cerberus/directives/caddyfile.go new file mode 100644 index 0000000..af0ef64 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/directives/caddyfile.go @@ -0,0 +1,237 @@ +package directives + +import ( + "time" + + "github.com/caddyserver/caddy/v2/caddyconfig" + "github.com/caddyserver/caddy/v2/caddyconfig/caddyfile" + "github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile" + "github.com/caddyserver/caddy/v2/modules/caddyhttp" + "github.com/dustin/go-humanize" + "github.com/sjtug/cerberus/core" + "github.com/sjtug/cerberus/internal/ipblock" +) + +func (c *App) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { + d.Next() // consume the directive + + for nesting := d.Nesting(); d.NextBlock(nesting); { + switch d.Val() { + case "difficulty": + if !d.NextArg() { + return d.ArgErr() + } + difficulty, ok := d.ScalarVal().(int) + if !ok { + return d.Errf("difficulty must be an integer") + } + c.Difficulty = difficulty + case "drop": + if !d.NextArg() { + c.Drop = true + continue + } + drop, ok := d.ScalarVal().(bool) + if !ok { + return d.Errf("drop must be a boolean") + } + c.Drop = drop + case "ed25519_key_file": + if !d.NextArg() { + return d.ArgErr() + } + ed25519KeyFile, ok := d.ScalarVal().(string) + if !ok { + return d.Errf("ed25519_key_file must be a string") + } + c.Ed25519KeyFile = ed25519KeyFile + case "max_pending": + if !d.NextArg() { + return d.ArgErr() + } + maxPending, ok := d.ScalarVal().(int) + if !ok { + return d.Errf("max_pending must be an integer") + } + c.MaxPending = int32(maxPending) // #nosec G115 -- trusted input + case "access_per_approval": + if !d.NextArg() { + return d.ArgErr() + } + accessPerApproval, ok := d.ScalarVal().(int) + if !ok { + return d.Errf("access_per_approval must be an integer") + } + c.AccessPerApproval = int32(accessPerApproval) // #nosec G115 -- trusted input + case "block_ttl": + if !d.NextArg() { + return d.ArgErr() + } + blockTTLRaw, ok := d.ScalarVal().(string) + if !ok { + return d.Errf("block_ttl must be a string") + } + blockTTL, err := time.ParseDuration(blockTTLRaw) + if err != nil { + return d.Errf("block_ttl must be a valid duration: %v", err) + } + c.BlockTTL = blockTTL + case "pending_ttl": + if !d.NextArg() { + return d.ArgErr() + } + pendingTTLRaw, ok := d.ScalarVal().(string) + if !ok { + return d.Errf("pending_ttl must be a string") + } + pendingTTL, err := time.ParseDuration(pendingTTLRaw) + if err != nil { + return d.Errf("pending_ttl must be a valid duration: %v", err) + } + c.PendingTTL = pendingTTL + case "approval_ttl": + if !d.NextArg() { + return d.ArgErr() + } + approvalTTLRaw, ok := d.ScalarVal().(string) + if !ok { + return d.Errf("approval_ttl must be a string") + } + approvalTTL, err := time.ParseDuration(approvalTTLRaw) + if err != nil { + return d.Errf("approval_ttl must be a valid duration: %v", err) + } + c.ApprovalTTL = approvalTTL + case "max_mem_usage": + if !d.NextArg() { + return d.ArgErr() + } + maxMemUsageRaw, ok := d.ScalarVal().(string) + if !ok { + return d.Errf("max_mem_usage must be a string") + } + maxMemUsage, err := humanize.ParseBytes(maxMemUsageRaw) + if err != nil { + return d.Errf("max_mem_usage must be a valid size: %v", err) + } + c.MaxMemUsage = int64(maxMemUsage) // #nosec G115 -- trusted input + case "cookie_name": + if !d.NextArg() { + return d.ArgErr() + } + cookieName, ok := d.ScalarVal().(string) + if !ok { + return d.Errf("cookie_name must be a string") + } + c.CookieName = cookieName + case "header_name": + if !d.NextArg() { + return d.ArgErr() + } + headerName, ok := d.ScalarVal().(string) + if !ok { + return d.Errf("header_name must be a string") + } + c.HeaderName = headerName + case "title": + if !d.NextArg() { + return d.ArgErr() + } + title, ok := d.ScalarVal().(string) + if !ok { + return d.Errf("title must be a string") + } + c.Title = title + case "prefix_cfg": + if !d.NextArg() { + return d.ArgErr() + } + v4Prefix, ok := d.ScalarVal().(int) + if !ok { + return d.Errf("prefix_cfg must be followed by two integers") + } + if !d.NextArg() { + return d.ArgErr() + } + v6Prefix, ok := d.ScalarVal().(int) + if !ok { + return d.Errf("prefix_cfg must be followed by two integers") + } + c.PrefixCfg = ipblock.Config{ + V4Prefix: v4Prefix, + V6Prefix: v6Prefix, + } + case "mail": + if !d.NextArg() { + return d.ArgErr() + } + mail, ok := d.ScalarVal().(string) + if !ok { + return d.Errf("mail must be a string") + } + c.Mail = mail + default: + return d.Errf("unknown subdirective '%s'", d.Val()) + } + } + + return nil +} + +func ParseCaddyFileApp(d *caddyfile.Dispenser, _ any) (any, error) { + var c App + err := c.UnmarshalCaddyfile(d) + return httpcaddyfile.App{ + Name: core.AppName, + Value: caddyconfig.JSON(c, nil), + }, err +} + +func (m *Middleware) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { + d.Next() // consume the directive + + for nesting := d.Nesting(); d.NextBlock(nesting); { + switch d.Val() { + case "base_url": + if !d.NextArg() { + return d.ArgErr() + } + baseURL, ok := d.ScalarVal().(string) + if !ok { + return d.Errf("base_url must be a string") + } + m.BaseURL = baseURL + case "block_only": + if !d.NextArg() { + m.BlockOnly = true + continue + } + blockOnly, ok := d.ScalarVal().(bool) + if !ok { + return d.Errf("block_only must be a boolean") + } + m.BlockOnly = blockOnly + default: + return d.Errf("unknown subdirective '%s'", d.Val()) + } + } + return nil +} + +func ParseCaddyFileMiddleware(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) { + var m Middleware + err := m.UnmarshalCaddyfile(h.Dispenser) + return &m, err +} + +func (e *Endpoint) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { + d.Next() // consume the directive + + return nil +} + +func ParseCaddyFileEndpoint(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) { + var e Endpoint + err := e.UnmarshalCaddyfile(h.Dispenser) + return &e, err +} diff --git a/vendor/github.com/sjtug/cerberus/directives/common.go b/vendor/github.com/sjtug/cerberus/directives/common.go new file mode 100644 index 0000000..117fc73 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/directives/common.go @@ -0,0 +1,176 @@ +package directives + +import ( + "context" + "crypto/ed25519" + "encoding/hex" + "errors" + "fmt" + "net/http" + "time" + + "github.com/a-h/templ" + "github.com/caddyserver/caddy/v2/modules/caddyhttp" + "github.com/golang-jwt/jwt/v5" + "github.com/google/uuid" + "github.com/invopop/ctxi18n" + "github.com/invopop/ctxi18n/i18n" + "github.com/sjtug/cerberus/core" + "github.com/sjtug/cerberus/web" + "github.com/zeebo/blake3" +) + +const ( + IV1 = "/L4y6KgWa8vHEujU3O6JyI8osQxwh1nE0Eoay4nD3vw/y36eSFT0s/GTGfrngN6+" + IV2 = "KHo5hHR3ZfisR7xeG1gJwO3LSc1cYyDUQ5+StoAjV8jLhp01NBNi4joHYTWXDqF0" +) + +func clearCookie(w http.ResponseWriter, cookieName string) { + http.SetCookie(w, &http.Cookie{ + Name: cookieName, + Value: "", + Expires: time.Now().Add(-time.Hour), + MaxAge: -1, + SameSite: http.SameSiteLaxMode, + }) +} + +func validateCookie(cookie *http.Cookie) error { + if err := cookie.Valid(); err != nil { + return err + } + + if time.Now().After(cookie.Expires) && !cookie.Expires.IsZero() { + return errors.New("cookie expired") + } + + return nil +} + +func validateToken(token *jwt.Token) error { + if token == nil { + return fmt.Errorf("token is nil") + } + + if !token.Valid { + return fmt.Errorf("token is not valid") + } + + claims := token.Claims.(jwt.MapClaims) + + exp, ok := claims["exp"].(float64) + if !ok { + return fmt.Errorf("token does not contain exp claim") + } + + if exp := time.Unix(int64(exp), 0); exp.Before(time.Now()) { + return fmt.Errorf("token expired at %s", exp) + } + + return nil +} + +func blake3sum(text string) (string, error) { + hash := blake3.New() + _, err := hash.WriteString(text) + if err != nil { + return "", err + } + return hex.EncodeToString(hash.Sum(nil)), nil +} + +func challengeFor(r *http.Request, c *core.Instance) (string, error) { + fp := c.GetFingerprint() + + payload := fmt.Sprintf("Accept-Language=%s,X-Real-IP=%s,User-Agent=%s,Fingerprint=%s,Difficulty=%d,IV=%s", + r.Header.Get("Accept-Language"), + getClientIP(r), + r.Header.Get("User-Agent"), + fp, + c.Difficulty, + IV1, + ) + + return blake3sum(payload) +} + +func calcSignature(challenge string, nonce uint32, ts int64, c *core.Instance) string { + payload := fmt.Sprintf("Challenge=%s,Nonce=%d,TS=%d,IV=%s", challenge, nonce, ts, IV2) + + signature := ed25519.Sign(c.GetPrivateKey(), []byte(payload)) + return hex.EncodeToString(signature) +} + +func respondFailure(w http.ResponseWriter, r *http.Request, c *core.Config, msg string, blocked bool, status int, baseURL string) error { + // Do not cache failure responses. + w.Header().Set("Cache-Control", "no-cache") + + if blocked { + if c.Drop { + // Drop the connection + panic(http.ErrAbortHandler) + } + w.Header().Set(c.HeaderName, "BLOCKED") + // Close the connection to the client + r.Close = true + w.Header().Set("Connection", "close") + return renderTemplate(w, r, c, baseURL, + i18n.T(r.Context(), "error.access_restricted"), + web.Error( + i18n.T(r.Context(), "error.ip_blocked"), + i18n.T(r.Context(), "error.wait_before_retry"), + c.Mail, + ), + templ.WithStatus(status), + ) + } + + w.Header().Set(c.HeaderName, "FAIL") + return renderTemplate(w, r, c, baseURL, + i18n.T(r.Context(), "error.error_occurred"), + web.Error( + msg, + i18n.T(r.Context(), "error.browser_config_or_bug"), + c.Mail, + ), + templ.WithStatus(status), + ) +} + +func setupLocale(r *http.Request) (*http.Request, error) { + locale := r.Header.Get("Accept-Language") + if locale == "" { + locale = "en" + } + + ctx, err := ctxi18n.WithLocale(r.Context(), locale) + if err != nil { + return nil, err + } + + ctx = context.WithValue(ctx, web.LocaleCtxKey, locale) + + return r.WithContext(ctx), nil +} + +func setupRequestID(r *http.Request) *http.Request { + id := uuid.New().String() + caddyhttp.SetVar(r.Context(), core.VarReqID, id) + return r +} + +func renderTemplate(w http.ResponseWriter, r *http.Request, c *core.Config, baseURL string, header string, child templ.Component, opts ...func(*templ.ComponentHandler)) error { + ctx := templ.WithChildren( + context.WithValue( + context.WithValue(r.Context(), web.BaseURLCtxKey, baseURL), + web.VersionCtxKey, + core.Version, + ), + child, + ) + templ.Handler( + web.Base(c.Title, header), + opts..., + ).ServeHTTP(w, r.WithContext(ctx)) + return nil +} diff --git a/vendor/github.com/sjtug/cerberus/directives/endpoint.go b/vendor/github.com/sjtug/cerberus/directives/endpoint.go new file mode 100644 index 0000000..0fec02f --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/directives/endpoint.go @@ -0,0 +1,238 @@ +package directives + +import ( + "crypto/subtle" + "errors" + "fmt" + "net/http" + "strconv" + "strings" + "time" + + "github.com/caddyserver/caddy/v2" + "github.com/caddyserver/caddy/v2/modules/caddyhttp" + "github.com/golang-jwt/jwt/v5" + "github.com/sjtug/cerberus/core" + "github.com/sjtug/cerberus/internal/ipblock" + "github.com/sjtug/cerberus/web" + "go.uber.org/zap" +) + +// Endpoint is the handler that will be used to serve challenge endpoints and static files. +type Endpoint struct { + instance *core.Instance + logger *zap.Logger +} + +func checkAnswer(s string, difficulty int) bool { + nibbles := difficulty / 2 + remaining := difficulty % 2 + + if !strings.HasPrefix(s, strings.Repeat("0", nibbles)) { + return false + } + + if remaining == 0 { + return true + } + + return s[nibbles] < '8' +} + +func (e *Endpoint) answerHandle(w http.ResponseWriter, r *http.Request) error { + c := e.instance + + // Just to make sure the response is not cached, although this should be the default behavior for POST requests. + w.Header().Set("Cache-Control", "no-cache") + + nonceStr := r.FormValue("nonce") + if nonceStr == "" { + e.logger.Info("nonce is empty") + return respondFailure(w, r, &c.Config, "nonce is empty", false, http.StatusBadRequest, ".") + } + nonce64, err := strconv.ParseUint(nonceStr, 10, 32) + if err != nil { + e.logger.Debug("nonce is not an integer", zap.Error(err)) + return respondFailure(w, r, &c.Config, "nonce is not an integer", false, http.StatusBadRequest, ".") + } + nonce := uint32(nonce64) + if !c.InsertUsedNonce(nonce) { + e.logger.Info("nonce already used") + return respondFailure(w, r, &c.Config, "nonce already used", false, http.StatusBadRequest, ".") + } + + tsStr := r.FormValue("ts") + if tsStr == "" { + e.logger.Info("ts is empty") + return respondFailure(w, r, &c.Config, "ts is empty", false, http.StatusBadRequest, ".") + } + ts, err := strconv.ParseInt(tsStr, 10, 64) + if err != nil { + e.logger.Debug("ts is not a integer", zap.Error(err)) + return respondFailure(w, r, &c.Config, "ts is not a integer", false, http.StatusBadRequest, ".") + } + now := time.Now().Unix() + if ts < now-int64(core.NonceTTL) || ts > now { + e.logger.Info("invalid ts", zap.Int64("ts", ts), zap.Int64("now", now)) + return respondFailure(w, r, &c.Config, "invalid ts", false, http.StatusBadRequest, ".") + } + + signature := r.FormValue("signature") + if signature == "" { + e.logger.Info("signature is empty") + return respondFailure(w, r, &c.Config, "signature is empty", false, http.StatusBadRequest, ".") + } + + solutionStr := r.FormValue("solution") + if solutionStr == "" { + e.logger.Info("solution is empty") + return respondFailure(w, r, &c.Config, "solution is empty", false, http.StatusBadRequest, ".") + } + solution, err := strconv.Atoi(solutionStr) + if err != nil { + e.logger.Debug("solution is not a integer", zap.Error(err)) + return respondFailure(w, r, &c.Config, "solution is not a integer", false, http.StatusBadRequest, ".") + } + + response := r.FormValue("response") + redir := r.FormValue("redir") + + challenge, err := challengeFor(r, c) + if err != nil { + e.logger.Error("failed to calculate challenge", zap.Error(err)) + return err + } + + expectedSignature := calcSignature(challenge, nonce, ts, c) + if signature != expectedSignature { + e.logger.Debug("signature mismatch", zap.String("expected", expectedSignature), zap.String("actual", signature)) + return respondFailure(w, r, &c.Config, "signature mismatch", false, http.StatusForbidden, ".") + } + + answer, err := blake3sum(fmt.Sprintf("%s|%d|%d|%s|%d", challenge, nonce, ts, signature, solution)) + if err != nil { + e.logger.Error("failed to calculate answer", zap.Error(err)) + return err + } + + if !checkAnswer(response, c.Difficulty) { + clearCookie(w, c.CookieName) + e.logger.Error("wrong response", zap.String("response", response), zap.Int("difficulty", c.Difficulty)) + return respondFailure(w, r, &c.Config, "wrong response", false, http.StatusForbidden, ".") + } + + if subtle.ConstantTimeCompare([]byte(answer), []byte(response)) != 1 { + clearCookie(w, c.CookieName) + e.logger.Error("response mismatch", zap.String("expected", answer), zap.String("actual", response)) + return respondFailure(w, r, &c.Config, "response mismatch", false, http.StatusForbidden, ".") + } + + // Now we know the user passed the challenge, we issue an approval and sign the result. + approvalID := c.IssueApproval(c.AccessPerApproval) + token := jwt.NewWithClaims(jwt.SigningMethodEdDSA, jwt.MapClaims{ + "challenge": challenge, + "response": response, + "approval_id": approvalID, + "iat": time.Now().Unix(), + "nbf": time.Now().Add(-time.Minute).Unix(), + "exp": time.Now().Add(c.ApprovalTTL).Unix(), + }) + tokenStr, err := token.SignedString(c.GetPrivateKey()) + if err != nil { + e.logger.Error("failed to sign token", zap.Error(err)) + return err + } + + http.SetCookie(w, &http.Cookie{ + Name: c.CookieName, + Value: tokenStr, + Expires: time.Now().Add(c.ApprovalTTL), + SameSite: http.SameSiteLaxMode, + Path: "/", + }) + + e.logger.Debug("user passed the challenge") + + ipBlockRaw := caddyhttp.GetVar(r.Context(), core.VarIPBlock) + if ipBlockRaw != nil { + ipBlock := ipBlockRaw.(ipblock.IPBlock) + c.DecPending(ipBlock) + } + + w.Header().Set(c.HeaderName, "PASS") + http.Redirect(w, r, redir, http.StatusSeeOther) + return nil +} + +// tryServeFile serves static files from the dist directory. +func tryServeFile(w http.ResponseWriter, r *http.Request) bool { + if !strings.HasPrefix(r.URL.Path, "/static/") { + return false + } + + // Remove the /static/ prefix to get the actual file path + filePath := strings.TrimSuffix(caddyhttp.SanitizedPathJoin("/dist/", strings.TrimPrefix(r.URL.Path, "/static/")), "/") + + // Add cache control headers for static assets + w.Header().Set("Cache-Control", "public, max-age=31536000, immutable") // Cache for 1 year + w.Header().Set("Vary", "Accept-Encoding") + + // Create a new request with the modified path + req := *r + req.URL.Path = filePath + + // Serve the file using http.FileServer + http.FileServer(http.FS(web.Content)).ServeHTTP(w, &req) + return true +} + +func (e *Endpoint) ServeHTTP(w http.ResponseWriter, r *http.Request, _ caddyhttp.Handler) error { + r = setupRequestID(r) + r, err := setupLocale(r) + if err != nil { + return err + } + + if tryServeFile(w, r) { + return nil + } + + c := e.instance + + path := strings.TrimSuffix(r.URL.Path, "/") + if path == "/answer" && r.Method == http.MethodPost { + return e.answerHandle(w, r) + } + + return respondFailure(w, r, &c.Config, "Not found", false, http.StatusNotFound, ".") +} + +func (e *Endpoint) Provision(ctx caddy.Context) error { + e.logger = ctx.Logger() + + appRaw, err := ctx.App("cerberus") + if err != nil { + return err + } + app := appRaw.(*App) + + instance := app.GetInstance() + if instance == nil { + return errors.New("no global cerberus app found") + } + e.instance = instance + + return nil +} + +func (Endpoint) CaddyModule() caddy.ModuleInfo { + return caddy.ModuleInfo{ + ID: "http.handlers.cerberus_endpoint", + New: func() caddy.Module { return new(Endpoint) }, + } +} + +var ( + _ caddy.Provisioner = (*Endpoint)(nil) + _ caddyhttp.MiddlewareHandler = (*Endpoint)(nil) +) diff --git a/vendor/github.com/sjtug/cerberus/directives/i18n.go b/vendor/github.com/sjtug/cerberus/directives/i18n.go new file mode 100644 index 0000000..f2c18ba --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/directives/i18n.go @@ -0,0 +1,13 @@ +package directives + +import ( + "io/fs" + + "github.com/invopop/ctxi18n" +) + +func LoadI18n(fs fs.FS) { + if err := ctxi18n.LoadWithDefault(fs, "en"); err != nil { + panic(err) + } +} diff --git a/vendor/github.com/sjtug/cerberus/directives/middleware.go b/vendor/github.com/sjtug/cerberus/directives/middleware.go new file mode 100644 index 0000000..0fa58e4 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/directives/middleware.go @@ -0,0 +1,211 @@ +package directives + +import ( + "errors" + "fmt" + "net" + "net/http" + "time" + + "github.com/caddyserver/caddy/v2" + "github.com/caddyserver/caddy/v2/modules/caddyhttp" + "github.com/golang-jwt/jwt/v5" + "github.com/google/uuid" + "github.com/invopop/ctxi18n/i18n" + "github.com/sjtug/cerberus/core" + "github.com/sjtug/cerberus/internal/ipblock" + "github.com/sjtug/cerberus/internal/randpool" + "github.com/sjtug/cerberus/web" + "go.uber.org/zap" +) + +// Middleware is the actual middleware that will be used to challenge requests. +type Middleware struct { + // The base URL for the challenge. It must be the same as the deployed endpoint route. + BaseURL string `json:"base_url,omitempty"` + // If true, the middleware will not perform any challenge. It will only block known bad IPs. + BlockOnly bool `json:"block_only,omitempty"` + + instance *core.Instance + logger *zap.Logger +} + +func getClientIP(r *http.Request) string { + address := caddyhttp.GetVar(r.Context(), caddyhttp.ClientIPVarKey).(string) + clientIP, _, err := net.SplitHostPort(address) + if err != nil { + clientIP = address // no port + } + + return clientIP +} + +func (m *Middleware) invokeAuth(w http.ResponseWriter, r *http.Request) error { + c := m.instance + + // Make sure the response is not cached so that users always see the latest challenge. + w.Header().Set("Cache-Control", "no-cache") + + ipBlockRaw := caddyhttp.GetVar(r.Context(), core.VarIPBlock) + if ipBlockRaw != nil { + ipBlock := ipBlockRaw.(ipblock.IPBlock) + + count := c.IncPending(ipBlock) + if count > c.MaxPending { + m.logger.Info( + "Max failed/active challenges reached for IP block, rejecting", + zap.String("ip", ipBlock.ToIPNet(c.PrefixCfg).String()), + ) + c.InsertBlocklist(ipBlock) + c.RemovePending(ipBlock) + + return respondFailure(w, r, &c.Config, "IP blocked", true, http.StatusForbidden, m.BaseURL) + } + } + + clearCookie(w, c.CookieName) + + challenge, err := challengeFor(r, c) + if err != nil { + m.logger.Error("failed to calculate challenge", zap.Error(err)) + return err + } + + nonce := randpool.ReadUint32() + ts := time.Now().Unix() + signature := calcSignature(challenge, nonce, ts, c) + + w.Header().Set(c.HeaderName, "CHALLENGE") + return renderTemplate(w, r, &c.Config, m.BaseURL, i18n.T(r.Context(), "challenge.title"), web.Challenge(challenge, c.Difficulty, nonce, ts, signature)) +} + +func (m *Middleware) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyhttp.Handler) error { + r = setupRequestID(r) + r, err := setupLocale(r) + if err != nil { + return err + } + + c := m.instance + + if ipBlock, err := ipblock.NewIPBlock(net.ParseIP(getClientIP(r)), c.PrefixCfg); err == nil { + caddyhttp.SetVar(r.Context(), core.VarIPBlock, ipBlock) + if c.ContainsBlocklist(ipBlock) { + m.logger.Debug("IP is blocked", zap.String("ip", ipBlock.ToIPNet(c.PrefixCfg).String())) + return respondFailure(w, r, &c.Config, "", true, http.StatusForbidden, m.BaseURL) + } + } + + if m.BlockOnly { + // If block only mode is enabled, we don't need to perform any challenge. + // Continue to the next handler. + w.Header().Set(c.HeaderName, "DISABLED") + return next.ServeHTTP(w, r) + } + + // Get the "cerberus-auth" cookie + cookie, err := r.Cookie(c.CookieName) + if err != nil { + m.logger.Debug("cookie not found", zap.Error(err)) + return m.invokeAuth(w, r) + } + + if err := validateCookie(cookie); err != nil { + m.logger.Debug("invalid cookie", zap.Error(err)) + return m.invokeAuth(w, r) + } + + token, err := jwt.ParseWithClaims(cookie.Value, jwt.MapClaims{}, func(_ *jwt.Token) (interface{}, error) { + return c.GetPublicKey(), nil + }, jwt.WithValidMethods([]string{jwt.SigningMethodEdDSA.Alg()})) + if err != nil { + m.logger.Debug("invalid token", zap.Error(err)) + } + + if err := validateToken(token); err != nil { + m.logger.Debug("invalid token", zap.Error(err)) + return m.invokeAuth(w, r) + } + + // Metadata structure correct. Now we need to check the approval. + claims := token.Claims.(jwt.MapClaims) + + // First we check approval state. + approvalIDRaw, ok := claims["approval_id"].(string) + if !ok { + m.logger.Debug("token does not contain valid approval_id claim") + return m.invokeAuth(w, r) + } + + approvalID, err := uuid.Parse(approvalIDRaw) + if err != nil { + m.logger.Debug("invalid approval_id", zap.String("approval_id", approvalIDRaw), zap.Error(err)) + return m.invokeAuth(w, r) + } + + approved := c.DecApproval(approvalID) + if !approved { + m.logger.Debug("approval not found", zap.String("approval_id", approvalIDRaw)) + return m.invokeAuth(w, r) + } + + // Then we check user fingerprint matches the challenge to prevent cookie reuse. + challenge, ok := claims["challenge"].(string) + if !ok { + m.logger.Debug("token does not contain valid challenge claim") + return m.invokeAuth(w, r) + } + + expected, err := challengeFor(r, c) + if err != nil { + m.logger.Error("failed to calculate challenge", zap.Error(err)) + return err + } + + if challenge != expected { + m.logger.Debug("challenge mismatch", zap.String("expected", expected), zap.String("actual", challenge)) + return m.invokeAuth(w, r) + } + + // OK: Continue to the next handler + w.Header().Set(c.HeaderName, "PASS") + return next.ServeHTTP(w, r) +} + +func (m *Middleware) Provision(ctx caddy.Context) error { + m.logger = ctx.Logger() + + appRaw, err := ctx.App("cerberus") + if err != nil { + return err + } + app := appRaw.(*App) + + instance := app.GetInstance() + if instance == nil { + return errors.New("no global cerberus app found") + } + m.instance = instance + + return nil +} + +func (m *Middleware) Validate() error { + if m.BaseURL == "" { + return fmt.Errorf("base_url is required") + } + return nil +} + +func (Middleware) CaddyModule() caddy.ModuleInfo { + return caddy.ModuleInfo{ + ID: "http.handlers.cerberus", + New: func() caddy.Module { return new(Middleware) }, + } +} + +var ( + _ caddy.Provisioner = (*Middleware)(nil) + _ caddy.Validator = (*Middleware)(nil) + _ caddyhttp.MiddlewareHandler = (*Middleware)(nil) +) diff --git a/vendor/github.com/sjtug/cerberus/internal/expiremap/expiremap.go b/vendor/github.com/sjtug/cerberus/internal/expiremap/expiremap.go new file mode 100644 index 0000000..9a53715 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/internal/expiremap/expiremap.go @@ -0,0 +1,92 @@ +package expiremap + +import ( + "runtime" + "sync" + "time" +) + +var ( + numShards = runtime.GOMAXPROCS(0) * 16 +) + +type entry[V any] struct { + value V + expire time.Time +} + +type shard[K comparable, V any] struct { + mu sync.Mutex + store map[K]entry[V] +} + +type ExpireMap[K comparable, V any] struct { + shards []*shard[K, V] + hash func(K) uint32 +} + +// fastModulo calculates x % n without using the modulo operator (~4x faster). +// Reference: https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/ +func fastModulo(x, n uint32) uint32 { + return uint32((uint64(x) * uint64(n)) >> 32) //nolint:gosec +} + +func NewExpireMap[K comparable, V any](hash func(K) uint32) *ExpireMap[K, V] { + shards := make([]*shard[K, V], numShards) + for i := range shards { + shards[i] = &shard[K, V]{store: make(map[K]entry[V])} + } + return &ExpireMap[K, V]{shards: shards, hash: hash} +} + +func (m *ExpireMap[K, V]) Get(key K) (*V, bool) { + shard := m.shards[fastModulo(m.hash(key), uint32(len(m.shards)))] // #nosec G115 we don't have so many cores + + shard.mu.Lock() + defer shard.mu.Unlock() + + value, ok := shard.store[key] + if !ok { + // Key not found + return nil, false + } + + if value.expire.Before(time.Now()) { + // Key expired, remove it + delete(shard.store, key) + return nil, false + } + + return &value.value, true +} + +// SetIfAbsent sets the value for the key if it is not already present. +// Returns true if the value was set, false if it was already present. +func (m *ExpireMap[K, V]) SetIfAbsent(key K, value V, ttl time.Duration) bool { + shard := m.shards[fastModulo(m.hash(key), uint32(len(m.shards)))] // #nosec G115 we don't have so many cores + + shard.mu.Lock() + defer shard.mu.Unlock() + + if _, ok := shard.store[key]; ok { + return false + } + + shard.store[key] = entry[V]{value: value, expire: time.Now().Add(ttl)} + return true +} + +func (m *ExpireMap[K, V]) PurgeExpired() { + now := time.Now() + + for _, shard := range m.shards { + shard.mu.Lock() + defer shard.mu.Unlock() + + for key, entry := range shard.store { + if entry.expire.Before(now) { + delete(shard.store, key) + } + } + } +} diff --git a/vendor/github.com/sjtug/cerberus/internal/ipblock/ipblock.go b/vendor/github.com/sjtug/cerberus/internal/ipblock/ipblock.go new file mode 100644 index 0000000..6abd469 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/internal/ipblock/ipblock.go @@ -0,0 +1,86 @@ +package ipblock + +import ( + "errors" + "fmt" + "net" +) + +// IPBlock represents either an IPv4 or IPv6 block +// Data representation: +// v6: Stored as first 8 bytes of the address +// v4: Stored as 2001:db8:<v4> +type IPBlock struct { + data uint64 +} + +// IPBlockConfig represents the configuration for an IPBlock. +// It's used to specify the prefix length for IPv4 and IPv6 blocks for IP blocking. +type Config struct { + // V4Prefix is the prefix length for IPv4 blocks + V4Prefix int `json:"v4_prefix"` + // V6Prefix is the prefix length for IPv6 blocks + V6Prefix int `json:"v6_prefix"` +} + +func (c Config) IsEmpty() bool { + return c.V4Prefix == 0 && c.V6Prefix == 0 +} + +func ValidateConfig(cfg Config) error { + if cfg.V4Prefix > 32 || cfg.V4Prefix < 1 { + return fmt.Errorf("v4_prefix must be between 1 and 32, got %d", cfg.V4Prefix) + } else if cfg.V6Prefix > 64 || cfg.V6Prefix < 1 { + // Due to uint64 size limitation, we only allow at most /64 for IPv6 + return fmt.Errorf("v6_prefix must be between 1 and 64, got %d", cfg.V6Prefix) + } + return nil +} + +// NewIPBlock creates a new IPBlock from an IP address +func NewIPBlock(ip net.IP, cfg Config) (IPBlock, error) { + if ip == nil { + return IPBlock{}, errors.New("invalid IP: nil") + } + + ip4 := ip.To4() + if ip4 != nil { + ip4 = ip4.Mask(net.CIDRMask(cfg.V4Prefix, 32)) + return IPBlock{ + data: 0x20010db800000000 | uint64(ip4[0])<<24 | uint64(ip4[1])<<16 | uint64(ip4[2])<<8 | uint64(ip4[3]), + }, nil + } + + ip6 := ip.To16() + if ip6 == nil { + return IPBlock{}, fmt.Errorf("invalid IP: %v", ip) + } + ip6 = ip6.Mask(net.CIDRMask(cfg.V6Prefix, 128)) + data := uint64(0) + for i := range 8 { + data = data<<8 | uint64(ip6[i]) + } + return IPBlock{data: data}, nil +} + +func (b IPBlock) ToUint64() uint64 { + return b.data +} + +func (b IPBlock) ToIPNet(cfg Config) *net.IPNet { + if b.data&0xffffffff00000000 == 0x20010db800000000 { + return &net.IPNet{ + IP: net.IPv4(byte(b.data>>24&0xff), byte(b.data>>16&0xff), byte(b.data>>8&0xff), byte(b.data&0xff)), + Mask: net.CIDRMask(cfg.V4Prefix, 32), + } + } + + ip := make(net.IP, 16) + for i := range 8 { + ip[7-i] = byte(b.data >> (8 * i)) + } + return &net.IPNet{ + IP: ip, + Mask: net.CIDRMask(cfg.V6Prefix, 128), + } +} diff --git a/vendor/github.com/sjtug/cerberus/internal/randpool/randpool.go b/vendor/github.com/sjtug/cerberus/internal/randpool/randpool.go new file mode 100644 index 0000000..ef772fd --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/internal/randpool/randpool.go @@ -0,0 +1,35 @@ +package randpool + +import ( + "crypto/rand" + "encoding/binary" + "io" + "sync" +) + +const ( + poolSize = 16 * 16 +) + +var ( + poolMu sync.Mutex + pool [poolSize]byte + poolPos = poolSize +) + +func ReadUint32() uint32 { + poolMu.Lock() + defer poolMu.Unlock() + + if poolPos == poolSize { + _, err := io.ReadFull(rand.Reader, pool[:]) + if err != nil { + panic(err) + } + poolPos = 0 + } + + poolPos += 4 + + return binary.BigEndian.Uint32(pool[poolPos-4 : poolPos]) +} diff --git a/vendor/github.com/sjtug/cerberus/translations/en.yaml b/vendor/github.com/sjtug/cerberus/translations/en.yaml new file mode 100644 index 0000000..e7746be --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/translations/en.yaml @@ -0,0 +1,29 @@ +en: + challenge: + title: "Making sure you're not a bot!" + calculating: "Performing browser checks..." + difficulty_speed: "Difficulty: %{difficulty}, Speed: %{speed}kH/s" + taking_longer: "This is taking longer than expected. Please do not refresh the page." + why_seeing: "Why am I seeing this?" + why_seeing_body: + part_1: >- + You are seeing this because the administrator of this website has set up %{cerberus} to protect the server against abusive traffic. This can and does cause downtime for the websites, which makes their resources inaccessible for everyone. + part_2: >- + If you're familiar with %{anubis} by %{techaro}, Cerberus is similar - it performs a PoW challenge to verify the request. While Anubis focuses on protecting websites from AI scrapers, Cerberus takes a much more aggressive approach to protect our open-source infrastructure. + part_3: >- + Please note that Cerberus requires the use of modern JavaScript features that plugins like %{jshelter} will disable. Please disable %{jshelter} or other such plugins for this domain. + must_enable_js: "You must enable JavaScript to proceed." + success: + title: "Success!" + verification_complete: "Verification Complete!" + took_time_iterations: "Took %{time}ms, %{iterations} iterations" + error: + error_occurred: "Error occurred while processing your request" + access_restricted: "Access has been restricted" + browser_config_or_bug: "There might be an issue with your browser configuration, or something is wrong on our side." + ip_blocked: "You (or your local network) have been blocked due to suspicious activity." + wait_before_retry: "Please wait a while before you try again; in some cases this may take a few hours." + contact_us: "If you believe this is an error, please contact us at %{mail}. Attach the request ID shown below to help us investigate." + footer: + author: Protected by %{cerberus} from %{sjtug}. + upstream: Heavily inspired by %{anubis} from %{techaro} in 🇨🇦. diff --git a/vendor/github.com/sjtug/cerberus/translations/zh.yaml b/vendor/github.com/sjtug/cerberus/translations/zh.yaml new file mode 100644 index 0000000..49e4192 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/translations/zh.yaml @@ -0,0 +1,30 @@ +# I know I should split this into zh-Hans and zh-Hant, but @messageformat/convert only supports CLDR plural categories +zh: + challenge: + title: "验证您不是机器人" + calculating: "正在进行浏览器检查..." + difficulty_speed: "难度:%{difficulty},速度:%{speed}kH/s" + taking_longer: "验证时间超出预期,请勿刷新页面" + why_seeing: "为什么我会看到这个页面?" + why_seeing_body: + part_1: >- + 您看到这个页面是因为网站管理员启用了 %{cerberus} 来防御异常流量攻击。这类攻击可能导致网站服务中断,影响所有用户的正常访问。 + part_2: >- + 如果您了解 %{techaro} 开发的 %{anubis},那么 Cerberus 采用了类似的 PoW 验证技术。不同的是,Anubis 主要针对 AI 爬虫,而 Cerberus 则采用了更激进的策略来保护我们的开源基础设施。 + part_3: >- + 请注意,Cerberus 需要启用现代 JavaScript 功能,而 %{jshelter} 等插件会禁用这些功能。请为本域名禁用 %{jshelter} 或类似的插件。 + must_enable_js: "请启用 JavaScript 以继续访问" + success: + title: "验证成功" + verification_complete: "验证已完成" + took_time_iterations: "用时 %{time}ms,完成 %{iterations} 次迭代" + error: + error_occurred: "发生错误" + access_restricted: "访问受限" + browser_config_or_bug: "可能是浏览器配置问题,也可能是我们的系统出现了异常" + ip_blocked: "由于检测到可疑活动,您的 IP 地址或本地网络已被封禁" + wait_before_retry: "请稍后再试,某些情况下可能需要等待数小时" + contact_us: "如有问题,请通过 %{mail} 联系我们。请附上下方显示的 request ID,以便我们进行排查。" + footer: + author: "由 %{sjtug} 开发的 %{cerberus} 提供保护" + upstream: "灵感来源于 🇨🇦 %{techaro} 开发的 %{anubis}" diff --git a/vendor/github.com/sjtug/cerberus/web/dist/global.css b/vendor/github.com/sjtug/cerberus/web/dist/global.css new file mode 100644 index 0000000..e72f5f1 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/dist/global.css @@ -0,0 +1,2 @@ +/*! tailwindcss v4.1.7 | MIT License | https://tailwindcss.com */ +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-white:#fff;--spacing:.25rem;--container-2xl:42rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--font-weight-bold:700;--ease-out:cubic-bezier(0,0,.2,1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.mx-auto{margin-inline:auto}.my-auto{margin-block:auto}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.flex{display:flex}.hidden{display:none}.h-6{height:calc(var(--spacing)*6)}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-48{width:calc(var(--spacing)*48)}.w-\[60\%\]{width:60%}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-64{max-width:calc(var(--spacing)*64)}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}.rounded-full{border-radius:3.40282e38px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[\#b79ecf\]{border-color:#b79ecf}.bg-\[\#b79ecf\]{background-color:#b79ecf}.bg-\[\#fff8e7\]{background-color:#fff8e7}.bg-white{background-color:var(--color-white)}.p-1{padding:calc(var(--spacing)*1)}.p-4{padding:calc(var(--spacing)*4)}.px-4{padding-inline:calc(var(--spacing)*4)}.pt-2{padding-top:calc(var(--spacing)*2)}.text-center{text-align:center}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.text-amber-600{color:var(--color-amber-600)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media (hover:hover){.hover\:text-amber-700:hover{color:var(--color-amber-700)}.hover\:text-gray-800:hover{color:var(--color-gray-800)}}}body{background-color:#f4e9d5}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
\ No newline at end of file diff --git a/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-fail-bak.png b/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-fail-bak.png Binary files differnew file mode 100644 index 0000000..a4aaa21 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-fail-bak.png diff --git a/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-fail.png b/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-fail.png Binary files differnew file mode 100644 index 0000000..2926993 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-fail.png diff --git a/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-pass-bak.png b/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-pass-bak.png Binary files differnew file mode 100644 index 0000000..5890879 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-pass-bak.png diff --git a/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-pass.png b/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-pass.png Binary files differnew file mode 100644 index 0000000..0ae0c24 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-pass.png diff --git a/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-puzzle-bak.png b/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-puzzle-bak.png Binary files differnew file mode 100644 index 0000000..a0ba0fb --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-puzzle-bak.png diff --git a/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-puzzle.png b/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-puzzle.png Binary files differnew file mode 100644 index 0000000..7ed2fc2 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/dist/img/mascot-puzzle.png diff --git a/vendor/github.com/sjtug/cerberus/web/dist/main.js b/vendor/github.com/sjtug/cerberus/web/dist/main.js new file mode 100644 index 0000000..b7ea2ff --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/dist/main.js @@ -0,0 +1,2 @@ +!function(){function e(e){if(e=a.i?.[e]||e,!t)try{throw Error()}catch(o){var r=(""+o.stack).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/[^)\n]+/g);if(!r)return n+e;t=r[0]}return new URL(n+e,t).toString()}var t,r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},n="./",o={},i={},a=r.parcelRequireec24;function s(e,t,r,n,o,i,a){try{var s=e[i](a),u=s.value}catch(e){r(e);return}s.done?t(u):Promise.resolve(u).then(n,o)}function u(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){s(i,n,o,a,u,"next",e)}function u(e){s(i,n,o,a,u,"throw",e)}a(void 0)})}}function c(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function l(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(u){var c=[s,u];if(r)throw TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&c[0]?n.return:c[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,c[1])).done)return o;switch(n=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,n=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){i=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){i.label=c[1];break}if(6===c[0]&&i.label<o[1]){i.label=o[1],o=c;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(c);break}o[2]&&i.ops.pop(),i.trys.pop();continue}c=t.call(e,i)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}null==a&&((a=function(e){if(e in o)return o[e].exports;if(e in i){var t=i[e];delete i[e];var r={id:e,exports:{}};return o[e]=r,t.call(r.exports,r,r.exports),r.exports}var n=Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}).register=function(e,t){i[e]=t},r.parcelRequireec24=a),a.register,Object.assign(a.i??={},{aykjc:"pow_bg.e56bb07e.wasm",lyHvT:"pow.worker.8c3779b0.js"}),"function"==typeof SuppressedError&&SuppressedError;var f={};"use strict";f=e("aykjc");var h={},d={};d=function(e,t,r){if(t===self.location.origin)return e;var n=r?"import "+JSON.stringify(e)+";":"importScripts("+JSON.stringify(e)+");";return URL.createObjectURL(new Blob([n],{type:"application/javascript"}))};var p=new URL(e("lyHvT"));function g(e,t){if(!e)return null;var r=e;if(Array.isArray(t)){for(var n=0;n<t.length;++n)if((void 0===r?"undefined":c(r))!=="object"||!(r=r[t[n]]))return null;return r}return(void 0===r?"undefined":c(r))==="object"?r[t]:null}function b(e,t,r,n,o){var i=g(e[t],r);if(i)return(void 0===i?"undefined":c(i))===o;if(n){for(var a=0;a<n.length;++a)if(i=g(e[n[a]],r))return(void 0===i?"undefined":c(i))===o}return!1}h=d(p.toString(),p.origin,!1);var m=new(function(){function e(e,t){var r=this;this._data={},this._fallback={},this._defaultLocale=null,this._locale=null,Object.keys(e).forEach(function(n){"toString"!==n&&(r._data[n]=e[n],void 0===t&&(t=n))}),this.locale=t||null,this._defaultLocale=this.locale}return Object.defineProperty(e.prototype,"availableLocales",{get:function(){return Object.keys(this._data)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"locale",{get:function(){return this._locale},set:function(e){this._locale=this.resolveLocale(e)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"defaultLocale",{get:function(){return this._defaultLocale},set:function(e){this._defaultLocale=this.resolveLocale(e)},enumerable:!1,configurable:!0}),e.prototype.addMessages=function(e,t,r){var n=t||String(this.locale);if("function"!=typeof e&&(e=Object.keys(e).reduce(function(t,r){return"toString"!==r&&(t[r]=e[r]),t},{})),Array.isArray(r)&&r.length>0){for(var o=this._data[n],i=0;i<r.length-1;++i){var a=r[i];o[a]||(o[a]={}),o=o[a]}o[r[r.length-1]]=e}else this._data[n]=e;return this},e.prototype.resolveLocale=function(e){var t=String(e);if(this._data[t])return e;if(e){for(;t=t.replace(/[-_]?[^-_]*$/,"");)if(this._data[t])return t;for(var r=this.availableLocales,n=RegExp("^"+e+"[-_]"),o=0;o<r.length;++o)if(n.test(r[o]))return r[o]}return null},e.prototype.getFallback=function(e){var t=e||String(this.locale);return this._fallback[t]||(t!==this.defaultLocale&&this.defaultLocale?[this.defaultLocale]:[])},e.prototype.setFallback=function(e,t){return this._fallback[e]=Array.isArray(t)?t:null,this},e.prototype.hasMessage=function(e,t,r){var n=t||String(this.locale),o=r?this.getFallback(n):null;return b(this._data,n,e,o,"function")},e.prototype.hasObject=function(e,t,r){var n=t||String(this.locale),o=r?this.getFallback(n):null;return b(this._data,n,e,o,"object")},e.prototype.get=function(e,t,r){var n=r||String(this.locale),o=g(this._data[n],e);if(o)return"function"==typeof o?o(t):o;for(var i=this.getFallback(n),a=0;a<i.length;++a)if(o=g(this._data[i[a]],e))return"function"==typeof o?o(t):o;return e},e}())({zh:{challenge:{title:function(){return"验证您不是机器人"},calculating:function(){return"正在进行浏览器检查..."},difficulty_speed:function(e){return"难度:"+e.difficulty+",速度:"+e.speed+"kH/s"},taking_longer:function(){return"验证时间超出预期,请勿刷新页面"},why_seeing:function(){return"为什么我会看到这个页面?"},why_seeing_body:{part_1:function(e){return"您看到这个页面是因为网站管理员启用了 "+e.cerberus+" 来防御异常流量攻击。这类攻击可能导致网站服务中断,影响所有用户的正常访问。"},part_2:function(e){return"如果您了解 "+e.techaro+" 开发的 "+e.anubis+",那么 Cerberus 采用了类似的 PoW 验证技术。不同的是,Anubis 主要针对 AI 爬虫,而 Cerberus 则采用了更激进的策略来保护我们的开源基础设施。"},part_3:function(e){return"请注意,Cerberus 需要启用现代 JavaScript 功能,而 "+e.jshelter+" 等插件会禁用这些功能。请为本域名禁用 "+e.jshelter+" 或类似的插件。"}},must_enable_js:function(){return"请启用 JavaScript 以继续访问"}},success:{title:function(){return"验证成功"},verification_complete:function(){return"验证已完成"},took_time_iterations:function(e){return"用时 "+e.time+"ms,完成 "+e.iterations+" 次迭代"}},error:{error_occurred:function(){return"发生错误"},access_restricted:function(){return"访问受限"},browser_config_or_bug:function(){return"可能是浏览器配置问题,也可能是我们的系统出现了异常"},ip_blocked:function(){return"由于检测到可疑活动,您的 IP 地址或本地网络已被封禁"},wait_before_retry:function(){return"请稍后再试,某些情况下可能需要等待数小时"},contact_us:function(e){return"如有问题,请通过 "+e.mail+" 联系我们。请附上下方显示的 request ID,以便我们进行排查。"}},footer:{author:function(e){return"由 "+e.sjtug+" 开发的 "+e.cerberus+" 提供保护"},upstream:function(e){return"灵感来源于 \uD83C\uDDE8\uD83C\uDDE6 "+e.techaro+" 开发的 "+e.anubis}}},en:{challenge:{title:function(){return"Making sure you're not a bot!"},calculating:function(){return"Performing browser checks..."},difficulty_speed:function(e){return"Difficulty: "+e.difficulty+", Speed: "+e.speed+"kH/s"},taking_longer:function(){return"This is taking longer than expected. Please do not refresh the page."},why_seeing:function(){return"Why am I seeing this?"},why_seeing_body:{part_1:function(e){return"You are seeing this because the administrator of this website has set up "+e.cerberus+" to protect the server against abusive traffic. This can and does cause downtime for the websites, which makes their resources inaccessible for everyone."},part_2:function(e){return"If you're familiar with "+e.anubis+" by "+e.techaro+", Cerberus is similar - it performs a PoW challenge to verify the request. While Anubis focuses on protecting websites from AI scrapers, Cerberus takes a much more aggressive approach to protect our open-source infrastructure."},part_3:function(e){return"Please note that Cerberus requires the use of modern JavaScript features that plugins like "+e.jshelter+" will disable. Please disable "+e.jshelter+" or other such plugins for this domain."}},must_enable_js:function(){return"You must enable JavaScript to proceed."}},success:{title:function(){return"Success!"},verification_complete:function(){return"Verification Complete!"},took_time_iterations:function(e){return"Took "+e.time+"ms, "+e.iterations+" iterations"}},error:{error_occurred:function(){return"Error occurred while processing your request"},access_restricted:function(){return"Access has been restricted"},browser_config_or_bug:function(){return"There might be an issue with your browser configuration, or something is wrong on our side."},ip_blocked:function(){return"You (or your local network) have been blocked due to suspicious activity."},wait_before_retry:function(){return"Please wait a while before you try again; in some cases this may take a few hours."},contact_us:function(e){return"If you believe this is an error, please contact us at "+e.mail+". Attach the request ID shown below to help us investigate."}},footer:{author:function(e){return"Protected by "+e.cerberus+" from "+e.sjtug+"."},upstream:function(e){return"Heavily inspired by "+e.anubis+" from "+e.techaro+" in \uD83C\uDDE8\uD83C\uDDE6."}}}});function y(e,t){return m.get(e.split("."),t)}console.log(m.locale,m.availableLocales);var v={baseURL:"",version:"",locale:""},_={title:document.getElementById("title"),mascot:document.getElementById("mascot"),status:document.getElementById("status"),metrics:document.getElementById("metrics"),message:document.getElementById("message"),progressContainer:document.getElementById("progress-container"),progressBar:document.getElementById("progress-bar")},w={title:function(e){return _.title.textContent=e},mascotState:function(e){return _.mascot.src="".concat(v.baseURL,"/static/img/mascot-").concat(e,".png?v=").concat(v.version)},status:function(e){return _.status.textContent=e},metrics:function(e){return _.metrics.textContent=e},message:function(e){return _.message.textContent=e},progress:function(e){_.progressContainer.classList.toggle("hidden",!e),_.progressBar.style.width="".concat(e,"%")}};u(function(){var e,t,r,n,o,i,a,s,c,d,p,g,b,_,k,S,E,j,L;return l(this,function(C){switch(C.label){case 0:return r=(t=JSON.parse((e=document.getElementById("challenge-script")).getAttribute("x-challenge"))).challenge,n=t.difficulty,o=t.nonce,i=t.ts,a=t.signature,c=(s=JSON.parse(e.getAttribute("x-meta"))).baseURL,d=s.version,p=s.locale,v.baseURL=c,v.version=d,v.locale=p,m.locale=p,w.title(y("challenge.title")),w.mascotState("puzzle"),w.status(y("challenge.calculating")),w.metrics(y("challenge.difficulty_speed",{difficulty:n,speed:0})),w.message(""),w.progress(0),g=Date.now(),b=0,_=Math.pow(16,-n/2),[4,function(e){return u(function(e){var t,r,n,o,i=arguments;return l(this,function(a){return t=i.length>1&&void 0!==i[1]?i[1]:5,r=i.length>2&&void 0!==i[2]?i[2]:null,n=i.length>3&&void 0!==i[3]?i[3]:null,o=i.length>4&&void 0!==i[4]?i[4]:navigator.hardwareConcurrency||1,[2,new Promise(function(i,a){console.debug("fast algo");var s=[],c=function(){s.forEach(function(e){return e.terminate()}),null!==r&&(r.removeEventListener("abort",c),r.aborted&&(console.log("PoW aborted"),a(Error("PoW aborted"))))};null!==r&&r.addEventListener("abort",c,{once:!0}),u(function(){var r,u,d;return l(this,function(l){switch(l.label){case 0:var p;return[4,fetch((p=f)&&p.__esModule?p.default:p)];case 1:return[4,l.sent().arrayBuffer()];case 2:for(u=0,r=l.sent();u<o;u++)(d=new Worker(h)).onmessage=function(e){"number"==typeof e.data?null==n||n(e.data):(c(),i(e.data))},d.onerror=function(e){c(),a(e)},d.postMessage({wasmModule:r,data:e,difficulty:t,nonce:u,threads:o}),s.push(d);return[2]}})})()})]})}).apply(this,arguments)}("".concat(r,"|").concat(o,"|").concat(i,"|").concat(a,"|"),n,null,function(e){var t=Math.pow(1-_,e),r=(1-Math.pow(t,2))*100,o=Date.now()-g;o-b>200&&(w.progress(r),w.metrics(y("challenge.difficulty_speed",{difficulty:n,speed:(e/o).toFixed(3)})),w.message(t<.01?y("challenge.taking_longer"):void 0),b=o)})];case 1:return S=(k=C.sent()).hash,E=k.nonce,j=Date.now(),console.log({hash:S,solution:E}),w.title(y("success.title")),w.mascotState("pass"),w.status(y("success.verification_complete")),w.metrics(y("success.took_time_iterations",{time:j-g,iterations:E})),w.message(""),w.progress(0),L=function(e,t,r,n,o,i){function a(e,t,r){var n=document.createElement("input");n.type="hidden",n.name=t,n.value=r,e.appendChild(n)}var s=document.createElement("form");return s.method="POST",s.action="".concat(r,"/answer"),a(s,"response",e),a(s,"solution",t),a(s,"nonce",n),a(s,"ts",o),a(s,"signature",i),a(s,"redir",window.location.href),document.body.appendChild(s),s}(S,E,c,o,i,a),setTimeout(function(){L.submit()},250),[2]}})})()}(); +//# sourceMappingURL=main.js.map diff --git a/vendor/github.com/sjtug/cerberus/web/dist/main.js.map b/vendor/github.com/sjtug/cerberus/web/dist/main.js.map new file mode 100644 index 0000000..4247b34 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/dist/main.js.map @@ -0,0 +1 @@ +{"mappings":"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","sources":["<anon>","../../../../../.cache/pnpm/dlx/7bc3f1fc538288d74bbdf957652e2bfde452102023bb0e338840e100a321b1b1/196f9d99867-3d05/node_modules/.pnpm/@parcel+runtime-js@2.15.1_@parcel+core@2.15.1_@swc+helpers@0.5.17_/node_modules/@parcel/runtime-js/lib/runtime-8d4e8e0fec2137e8.js","main.mjs","../../../../../.cache/pnpm/dlx/7bc3f1fc538288d74bbdf957652e2bfde452102023bb0e338840e100a321b1b1/196f9d99867-3d05/node_modules/.pnpm/@swc+helpers@0.5.17/node_modules/@swc/helpers/esm/_async_to_generator.js","../../../../../.cache/pnpm/dlx/7bc3f1fc538288d74bbdf957652e2bfde452102023bb0e338840e100a321b1b1/196f9d99867-3d05/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.js","../../../../../.cache/pnpm/dlx/7bc3f1fc538288d74bbdf957652e2bfde452102023bb0e338840e100a321b1b1/196f9d99867-3d05/node_modules/.pnpm/@swc+helpers@0.5.17/node_modules/@swc/helpers/esm/_type_of.js","pow.mjs","../../../../../.cache/pnpm/dlx/7bc3f1fc538288d74bbdf957652e2bfde452102023bb0e338840e100a321b1b1/196f9d99867-3d05/node_modules/.pnpm/@parcel+runtime-js@2.15.1_@parcel+core@2.15.1_@swc+helpers@0.5.17_/node_modules/@parcel/runtime-js/lib/runtime-20c694af779891fe.js","../../../../../.cache/pnpm/dlx/7bc3f1fc538288d74bbdf957652e2bfde452102023bb0e338840e100a321b1b1/196f9d99867-3d05/node_modules/.pnpm/@parcel+runtime-js@2.15.1_@parcel+core@2.15.1_@swc+helpers@0.5.17_/node_modules/@parcel/runtime-js/lib/runtime-bb3dbbdf0c599235.js","../../../../../.cache/pnpm/dlx/7bc3f1fc538288d74bbdf957652e2bfde452102023bb0e338840e100a321b1b1/196f9d99867-3d05/node_modules/.pnpm/@parcel+runtime-js@2.15.1_@parcel+core@2.15.1_@swc+helpers@0.5.17_/node_modules/@parcel/runtime-js/lib/helpers/get-worker-url.js","node_modules/.pnpm/@messageformat+runtime@3.0.1/node_modules/@messageformat/runtime/esm/messages.js","icu/compiled.mjs"],"sourcesContent":["(function () {\n\nfunction $parcel$extendImportMap(map) {\n Object.assign(parcelRequire.i ??= {}, map);\n}\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nvar $parcel$bundleURL;\nfunction $parcel$resolve(url) {\n url = parcelRequire.i?.[url] || url;\n if (!$parcel$bundleURL) {\n try {\n throw new Error();\n } catch (err) {\n var matches = ('' + err.stack).match(\n /(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^)\\n]+/g,\n );\n if (matches) {\n $parcel$bundleURL = matches[0];\n } else {\n return $parcel$distDir + url;\n }\n }\n }\n return new URL($parcel$distDir + url, $parcel$bundleURL).toString();\n}\n\n var $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n var $parcel$distDir = \"./\";\n\nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequireec24\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequireec24\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nvar $62804d96ae25d478$exports = {};\n$parcel$extendImportMap({\n \"aykjc\": \"pow_bg.e56bb07e.wasm\",\n \"lyHvT\": \"pow.worker.8c3779b0.js\"\n});\n\n// This file contains code adapted from https://github.com/TecharoHQ/anubis under the MIT License.\nfunction $cf6e67383540718f$var$asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nfunction $cf6e67383540718f$export$71511d61b312f219(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n $cf6e67383540718f$var$asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n $cf6e67383540718f$var$asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\n\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */ function $67ae305e1674258d$export$71511d61b312f219(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\n\n\nvar $01ec0fe86f91b5d8$var$extendStatics = function extendStatics1(d, b) {\n $01ec0fe86f91b5d8$var$extendStatics = Object.setPrototypeOf || ({\n __proto__: []\n }) instanceof Array && function(d, b) {\n d.__proto__ = b;\n } || function(d, b) {\n for(var p in b)if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n return $01ec0fe86f91b5d8$var$extendStatics(d, b);\n};\nfunction $01ec0fe86f91b5d8$export$a8ba968b8961cb8a(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n $01ec0fe86f91b5d8$var$extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar $01ec0fe86f91b5d8$export$18ce0697a983be9b = function __assign1() {\n $01ec0fe86f91b5d8$export$18ce0697a983be9b = Object.assign || function __assign(t) {\n for(var s, i = 1, n = arguments.length; i < n; i++){\n s = arguments[i];\n for(var p in s)if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return $01ec0fe86f91b5d8$export$18ce0697a983be9b.apply(this, arguments);\n};\nfunction $01ec0fe86f91b5d8$export$3c9a16f847548506(s, e) {\n var t = {};\n for(var p in s)if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") {\n for(var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++)if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction $01ec0fe86f91b5d8$export$29e00dfd3077644b(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if ((typeof Reflect === \"undefined\" ? \"undefined\" : (0, $67ae305e1674258d$export$71511d61b312f219)(Reflect)) === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction $01ec0fe86f91b5d8$export$d5ad3fd78186038f(paramIndex, decorator) {\n return function(target, key) {\n decorator(target, key, paramIndex);\n };\n}\nfunction $01ec0fe86f91b5d8$export$3a84e1ae4e97e9b0(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) {\n if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\");\n return f;\n }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for(var i = decorators.length - 1; i >= 0; i--){\n var context = {};\n for(var p in contextIn)context[p] = p === \"access\" ? {} : contextIn[p];\n for(var p in contextIn.access)context.access[p] = contextIn.access[p];\n context.addInitializer = function(f) {\n if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\");\n extraInitializers.push(accept(f || null));\n };\n var result = (0, decorators[i])(kind === \"accessor\" ? {\n get: descriptor.get,\n set: descriptor.set\n } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || (typeof result === \"undefined\" ? \"undefined\" : (0, $67ae305e1674258d$export$71511d61b312f219)(result)) !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n } else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n}\nfunction $01ec0fe86f91b5d8$export$d831c04e792af3d(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for(var i = 0; i < initializers.length; i++)value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n return useValue ? value : void 0;\n}\nfunction $01ec0fe86f91b5d8$export$6a2a36740a146cb8(x) {\n return (typeof x === \"undefined\" ? \"undefined\" : (0, $67ae305e1674258d$export$71511d61b312f219)(x)) === \"symbol\" ? x : \"\".concat(x);\n}\nfunction $01ec0fe86f91b5d8$export$d1a06452d3489bc7(f, name, prefix) {\n if ((typeof name === \"undefined\" ? \"undefined\" : (0, $67ae305e1674258d$export$71511d61b312f219)(name)) === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", {\n configurable: true,\n value: prefix ? \"\".concat(prefix, \" \", name) : name\n });\n}\nfunction $01ec0fe86f91b5d8$export$f1db080c865becb9(metadataKey, metadataValue) {\n if ((typeof Reflect === \"undefined\" ? \"undefined\" : (0, $67ae305e1674258d$export$71511d61b312f219)(Reflect)) === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nfunction $01ec0fe86f91b5d8$export$1050f835b63b671e(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction $01ec0fe86f91b5d8$export$67ebef60e6f28a6(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(g && (g = 0, op[0] && (_ = 0)), _)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nvar $01ec0fe86f91b5d8$export$45d3717a4c69092e = Object.create ? function __createBinding(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {\n enumerable: true,\n get: function get() {\n return m[k];\n }\n };\n Object.defineProperty(o, k2, desc);\n} : function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n};\nfunction $01ec0fe86f91b5d8$export$f33643c0debef087(m, o) {\n for(var p in m)if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) $01ec0fe86f91b5d8$export$45d3717a4c69092e(o, m, p);\n}\nfunction $01ec0fe86f91b5d8$export$19a8beecd37a4c45(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction $01ec0fe86f91b5d8$export$8d051b38c9118094(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while((n === void 0 || n-- > 0) && !(r = i.next()).done)ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally{\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally{\n if (e) throw e.error;\n }\n }\n return ar;\n}\nfunction $01ec0fe86f91b5d8$export$afc72e2116322959() {\n for(var ar = [], i = 0; i < arguments.length; i++)ar = ar.concat($01ec0fe86f91b5d8$export$8d051b38c9118094(arguments[i]));\n return ar;\n}\nfunction $01ec0fe86f91b5d8$export$6388937ca91ccae8() {\n for(var s = 0, i = 0, il = arguments.length; i < il; i++)s += arguments[i].length;\n for(var r = Array(s), k = 0, i = 0; i < il; i++)for(var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)r[k] = a[j];\n return r;\n}\nfunction $01ec0fe86f91b5d8$export$1216008129fb82ed(to, from, pack) {\n if (pack || arguments.length === 2) {\n for(var i = 0, l = from.length, ar; i < l; i++)if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\nfunction $01ec0fe86f91b5d8$export$10c90e4f7922046c(v) {\n return this instanceof $01ec0fe86f91b5d8$export$10c90e4f7922046c ? (this.v = v, this) : new $01ec0fe86f91b5d8$export$10c90e4f7922046c(v);\n}\nfunction $01ec0fe86f91b5d8$export$e427f37a30a4de9b(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function() {\n return this;\n }, i;\n function awaitReturn(f) {\n return function(v) {\n return Promise.resolve(v).then(f, reject);\n };\n }\n function verb(n, f) {\n if (g[n]) {\n i[n] = function(v) {\n return new Promise(function(a, b) {\n q.push([\n n,\n v,\n a,\n b\n ]) > 1 || resume(n, v);\n });\n };\n if (f) i[n] = f(i[n]);\n }\n }\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n function step(r) {\n r.value instanceof $01ec0fe86f91b5d8$export$10c90e4f7922046c ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n function fulfill(value) {\n resume(\"next\", value);\n }\n function reject(value) {\n resume(\"throw\", value);\n }\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nfunction $01ec0fe86f91b5d8$export$bbd80228419bb833(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function(e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function() {\n return this;\n }, i;\n function verb(n, f) {\n i[n] = o[n] ? function(v) {\n return (p = !p) ? {\n value: $01ec0fe86f91b5d8$export$10c90e4f7922046c(o[n](v)),\n done: false\n } : f ? f(v) : v;\n } : f;\n }\n}\nfunction $01ec0fe86f91b5d8$export$e3b29a3d6162315f(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof $01ec0fe86f91b5d8$export$19a8beecd37a4c45 === \"function\" ? $01ec0fe86f91b5d8$export$19a8beecd37a4c45(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function() {\n return this;\n }, i);\n function verb(n) {\n i[n] = o[n] && function(v) {\n return new Promise(function(resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function(v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nfunction $01ec0fe86f91b5d8$export$4fb47efe1390b86f(cooked, raw) {\n if (Object.defineProperty) Object.defineProperty(cooked, \"raw\", {\n value: raw\n });\n else cooked.raw = raw;\n return cooked;\n}\nvar $01ec0fe86f91b5d8$var$__setModuleDefault = Object.create ? function __setModuleDefault(o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function(o, v) {\n o[\"default\"] = v;\n};\nvar $01ec0fe86f91b5d8$var$ownKeys = function ownKeys1(o) {\n $01ec0fe86f91b5d8$var$ownKeys = Object.getOwnPropertyNames || function(o) {\n var ar = [];\n for(var k in o)if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return $01ec0fe86f91b5d8$var$ownKeys(o);\n};\nfunction $01ec0fe86f91b5d8$export$c21735bcef00d192(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) {\n for(var k = $01ec0fe86f91b5d8$var$ownKeys(mod), i = 0; i < k.length; i++)if (k[i] !== \"default\") $01ec0fe86f91b5d8$export$45d3717a4c69092e(result, mod, k[i]);\n }\n $01ec0fe86f91b5d8$var$__setModuleDefault(result, mod);\n return result;\n}\nfunction $01ec0fe86f91b5d8$export$da59b14a69baef04(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nfunction $01ec0fe86f91b5d8$export$d5dcaf168c640c35(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nfunction $01ec0fe86f91b5d8$export$d40a35129aaff81f(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;\n}\nfunction $01ec0fe86f91b5d8$export$81fdc39f203e4e04(state, receiver) {\n if (receiver === null || (typeof receiver === \"undefined\" ? \"undefined\" : (0, $67ae305e1674258d$export$71511d61b312f219)(receiver)) !== \"object\" && typeof receiver !== \"function\") throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\nfunction $01ec0fe86f91b5d8$export$88ac25d8e944e405(env, value, async) {\n if (value !== null && value !== void 0) {\n if ((typeof value === \"undefined\" ? \"undefined\" : (0, $67ae305e1674258d$export$71511d61b312f219)(value)) !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function dispose() {\n try {\n inner.call(this);\n } catch (e) {\n return Promise.reject(e);\n }\n };\n env.stack.push({\n value: value,\n dispose: dispose,\n async: async\n });\n } else if (async) env.stack.push({\n async: true\n });\n return value;\n}\nvar $01ec0fe86f91b5d8$var$_SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function _SuppressedError(error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\nfunction $01ec0fe86f91b5d8$export$8f076105dc360e92(env) {\n function fail(e) {\n env.error = env.hasError ? new $01ec0fe86f91b5d8$var$_SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while(r = env.stack.pop())try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {\n fail(e);\n return next();\n });\n } else s |= 1;\n } catch (e) {\n fail(e);\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\nfunction $01ec0fe86f91b5d8$export$889dfb5d17574b0b(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : d + ext + \".\" + cm.toLowerCase() + \"js\";\n });\n return path;\n}\nvar $01ec0fe86f91b5d8$export$2e2bcd8739ae039 = {\n __extends: $01ec0fe86f91b5d8$export$a8ba968b8961cb8a,\n __assign: $01ec0fe86f91b5d8$export$18ce0697a983be9b,\n __rest: $01ec0fe86f91b5d8$export$3c9a16f847548506,\n __decorate: $01ec0fe86f91b5d8$export$29e00dfd3077644b,\n __param: $01ec0fe86f91b5d8$export$d5ad3fd78186038f,\n __esDecorate: $01ec0fe86f91b5d8$export$3a84e1ae4e97e9b0,\n __runInitializers: $01ec0fe86f91b5d8$export$d831c04e792af3d,\n __propKey: $01ec0fe86f91b5d8$export$6a2a36740a146cb8,\n __setFunctionName: $01ec0fe86f91b5d8$export$d1a06452d3489bc7,\n __metadata: $01ec0fe86f91b5d8$export$f1db080c865becb9,\n __awaiter: $01ec0fe86f91b5d8$export$1050f835b63b671e,\n __generator: $01ec0fe86f91b5d8$export$67ebef60e6f28a6,\n __createBinding: $01ec0fe86f91b5d8$export$45d3717a4c69092e,\n __exportStar: $01ec0fe86f91b5d8$export$f33643c0debef087,\n __values: $01ec0fe86f91b5d8$export$19a8beecd37a4c45,\n __read: $01ec0fe86f91b5d8$export$8d051b38c9118094,\n __spread: $01ec0fe86f91b5d8$export$afc72e2116322959,\n __spreadArrays: $01ec0fe86f91b5d8$export$6388937ca91ccae8,\n __spreadArray: $01ec0fe86f91b5d8$export$1216008129fb82ed,\n __await: $01ec0fe86f91b5d8$export$10c90e4f7922046c,\n __asyncGenerator: $01ec0fe86f91b5d8$export$e427f37a30a4de9b,\n __asyncDelegator: $01ec0fe86f91b5d8$export$bbd80228419bb833,\n __asyncValues: $01ec0fe86f91b5d8$export$e3b29a3d6162315f,\n __makeTemplateObject: $01ec0fe86f91b5d8$export$4fb47efe1390b86f,\n __importStar: $01ec0fe86f91b5d8$export$c21735bcef00d192,\n __importDefault: $01ec0fe86f91b5d8$export$da59b14a69baef04,\n __classPrivateFieldGet: $01ec0fe86f91b5d8$export$d5dcaf168c640c35,\n __classPrivateFieldSet: $01ec0fe86f91b5d8$export$d40a35129aaff81f,\n __classPrivateFieldIn: $01ec0fe86f91b5d8$export$81fdc39f203e4e04,\n __addDisposableResource: $01ec0fe86f91b5d8$export$88ac25d8e944e405,\n __disposeResources: $01ec0fe86f91b5d8$export$8f076105dc360e92,\n __rewriteRelativeImportExtension: $01ec0fe86f91b5d8$export$889dfb5d17574b0b\n};\n\n\n// This file contains code adapted from https://github.com/TecharoHQ/anubis under the MIT License.\n\n\nvar $66d4361906f4496b$exports = {};\n$66d4361906f4496b$exports = $parcel$resolve(\"aykjc\");\n\n\nvar $7077909a1ae871cf$exports = {};\nvar $0ae13573b5316750$exports = {};\n\"use strict\";\n$0ae13573b5316750$exports = function(workerUrl, origin, isESM) {\n if (origin === self.location.origin) // If the worker bundle's url is on the same origin as the document,\n // use the worker bundle's own url.\n return workerUrl;\n else {\n // Otherwise, create a blob URL which loads the worker bundle with `importScripts`.\n var source = isESM ? 'import ' + JSON.stringify(workerUrl) + ';' : 'importScripts(' + JSON.stringify(workerUrl) + ');';\n return URL.createObjectURL(new Blob([\n source\n ], {\n type: 'application/javascript'\n }));\n }\n};\n\n\nvar $7077909a1ae871cf$var$url = new URL($parcel$resolve(\"lyHvT\"));\n$7077909a1ae871cf$exports = $0ae13573b5316750$exports($7077909a1ae871cf$var$url.toString(), $7077909a1ae871cf$var$url.origin, false);\n\n\nfunction $2b9a098d94c679e8$export$2e2bcd8739ae039(_0) {\n return (/*#__PURE__*/ 0, /*#__PURE__*/ $cf6e67383540718f$export$71511d61b312f219)(function(data) {\n var difficulty, signal, progressCallback, threads;\n var _arguments = arguments;\n return (0, $01ec0fe86f91b5d8$export$67ebef60e6f28a6)(this, function(_state) {\n difficulty = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : 5, signal = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : null, progressCallback = _arguments.length > 3 && _arguments[3] !== void 0 ? _arguments[3] : null, threads = _arguments.length > 4 && _arguments[4] !== void 0 ? _arguments[4] : navigator.hardwareConcurrency || 1;\n return [\n 2,\n new Promise(function(resolve, reject) {\n console.debug(\"fast algo\");\n var workers = [];\n var terminate = function() {\n workers.forEach(function(w) {\n return w.terminate();\n });\n if (signal !== null) {\n // clean up listener to avoid memory leak\n signal.removeEventListener(\"abort\", terminate);\n if (signal.aborted) {\n console.log(\"PoW aborted\");\n reject(new Error(\"PoW aborted\"));\n }\n }\n };\n if (signal !== null) signal.addEventListener(\"abort\", terminate, {\n once: true\n });\n (function() {\n return (/*#__PURE__*/ 0, /*#__PURE__*/ $cf6e67383540718f$export$71511d61b312f219)(function() {\n var wasmModule, i, worker;\n return (0, $01ec0fe86f91b5d8$export$67ebef60e6f28a6)(this, function(_state) {\n switch(_state.label){\n case 0:\n return [\n 4,\n fetch((0, (/*@__PURE__*/$parcel$interopDefault($66d4361906f4496b$exports))))\n ];\n case 1:\n return [\n 4,\n _state.sent().arrayBuffer()\n ];\n case 2:\n wasmModule = _state.sent();\n for(i = 0; i < threads; i++){\n worker = new Worker($7077909a1ae871cf$exports);\n worker.onmessage = function(event) {\n if (typeof event.data === \"number\") progressCallback === null || progressCallback === void 0 ? void 0 : progressCallback(event.data);\n else {\n terminate();\n resolve(event.data);\n }\n };\n worker.onerror = function(event) {\n terminate();\n reject(event);\n };\n worker.postMessage({\n wasmModule: wasmModule,\n data: data,\n difficulty: difficulty,\n nonce: i,\n threads: threads\n });\n workers.push(worker);\n }\n return [\n 2\n ];\n }\n });\n })();\n })();\n })\n ];\n });\n }).apply(this, arguments);\n}\n\n\n/**\n * A collection of runtime utility functions\n *\n * @remarks\n * This package should be marked as a dependency for any package that publishes the output of {@link @messageformat/core#compileModule},\n * as it may be included in its ES module source output as a dependency.\n *\n * For applications that bundle their output using e.g. Webpack this is not necessary.\n *\n * The `Messages` accessor class is a completely optional addition.\n * See also {@link @messageformat/react# | @messageformat/react} for a React-specific solution.\n *\n * @packageDocumentation\n */ /**\n * Accessor class for compiled message functions generated by\n * {@link @messageformat/core#compileModule}\n *\n * @public\n * @remarks\n * ```js\n * import Messages from '@messageformat/runtime/messages'\n * ```\n *\n * @example\n * ```js\n * // build.js\n * import { writeFileSync } from 'fs';\n * import MessageFormat from '@messageformat/core';\n * import compileModule from '@messageformat/core/compile-module'\n *\n * const mf = new MessageFormat(['en', 'fi']);\n * const msgSet = {\n * en: {\n * a: 'A {TYPE} example.',\n * b: 'This has {COUNT, plural, one{one user} other{# users}}.',\n * c: {\n * d: 'We have {P, number, percent} code coverage.'\n * }\n * },\n * fi: {\n * b: 'Tällä on {COUNT, plural, one{yksi käyttäjä} other{# käyttäjää}}.',\n * e: 'Minä puhun vain suomea.'\n * }\n * };\n * writeFileSync('messages.js', compileModule(mf, msgSet));\n * ```\n *\n * ```js\n * // runtime.js\n * import Messages from '@messageformat/runtime/messages';\n * import msgData from './messages';\n *\n * const messages = new Messages(msgData, 'en');\n *\n * messages.hasMessage('a') // true\n * messages.hasObject('c') // true\n * messages.get('b', { COUNT: 3 }) // 'This has 3 users.'\n * messages.get(['c', 'd'], { P: 0.314 }) // 'We have 31% code coverage.'\n *\n * messages.get('e') // 'e'\n * messages.setFallback('en', ['foo', 'fi'])\n * messages.get('e') // 'Minä puhun vain suomea.'\n *\n * messages.locale = 'fi'\n * messages.hasMessage('a') // false\n * messages.hasMessage('a', 'en') // true\n * messages.hasMessage('a', null, true) // true\n * messages.hasObject('c') // false\n * messages.get('b', { COUNT: 3 }) // 'Tällä on 3 käyttäjää.'\n * messages.get('c').d({ P: 0.628 }) // 'We have 63% code coverage.'\n * ```\n */ \nvar $7d2dbc41645dbcab$var$Messages = /** @class */ function() {\n /**\n * @param msgData - A map of locale codes to their function objects\n * @param defaultLocale - If not defined, default and initial locale is the first key of `msgData`\n */ function Messages(msgData, defaultLocale) {\n var _this = this;\n /** @internal */ this._data = {};\n /** @internal */ this._fallback = {};\n /** @internal */ this._defaultLocale = null;\n /** @internal */ this._locale = null;\n Object.keys(msgData).forEach(function(lc) {\n if (lc !== 'toString') {\n _this._data[lc] = msgData[lc];\n if (defaultLocale === undefined) defaultLocale = lc;\n }\n });\n this.locale = defaultLocale || null;\n this._defaultLocale = this.locale;\n }\n Object.defineProperty(Messages.prototype, \"availableLocales\", {\n /** Read-only list of available locales */ get: function get() {\n return Object.keys(this._data);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Messages.prototype, \"locale\", {\n /**\n * Current locale\n *\n * @remarks\n * One of {@link Messages.availableLocales} or `null`.\n * Partial matches of language tags are supported, so e.g. with an `en` locale defined, it will be selected by `messages.locale = 'en-US'` and vice versa.\n */ get: function get() {\n return this._locale;\n },\n set: function set(locale) {\n this._locale = this.resolveLocale(locale);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Messages.prototype, \"defaultLocale\", {\n /**\n * Default fallback locale\n *\n * @remarks\n * One of {@link Messages.availableLocales} or `null`.\n * Partial matches of language tags are supported, so e.g. with an `en` locale defined, it will be selected by `messages.defaultLocale = 'en-US'` and vice versa.\n */ get: function get() {\n return this._defaultLocale;\n },\n set: function set(locale) {\n this._defaultLocale = this.resolveLocale(locale);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Add new messages to the accessor; useful if loading data dynamically\n *\n * @remarks\n * The locale code `lc` should be an exact match for the locale being updated, or empty to default to the current locale.\n * Use {@link Messages.resolveLocale} for resolving partial locale strings.\n *\n * If `keypath` is empty, adds or sets the complete message object for the corresponding locale.\n * If any keys in `keypath` do not exist, a new object will be created at that key.\n *\n * @param data - Hierarchical map of keys to functions, or a single message function\n * @param locale - If empty or undefined, defaults to `this.locale`\n * @param keypath - The keypath being added\n */ Messages.prototype.addMessages = function(data, locale, keypath) {\n var lc = locale || String(this.locale);\n if (typeof data !== 'function') data = Object.keys(data).reduce(function(map, key) {\n if (key !== 'toString') map[key] = data[key];\n return map;\n }, {});\n if (Array.isArray(keypath) && keypath.length > 0) {\n var parent_1 = this._data[lc];\n for(var i = 0; i < keypath.length - 1; ++i){\n var key = keypath[i];\n if (!parent_1[key]) parent_1[key] = {};\n parent_1 = parent_1[key];\n }\n parent_1[keypath[keypath.length - 1]] = data;\n } else this._data[lc] = data;\n return this;\n };\n /**\n * Resolve `lc` to the key of an available locale or `null`, allowing for partial matches.\n *\n * @remarks\n * For example, with an `en` locale defined, it will be selected by `messages.defaultLocale = 'en-US'` and vice versa.\n */ Messages.prototype.resolveLocale = function(locale) {\n var lc = String(locale);\n if (this._data[lc]) return locale;\n if (locale) {\n while(lc = lc.replace(/[-_]?[^-_]*$/, '')){\n if (this._data[lc]) return lc;\n }\n var ll = this.availableLocales;\n var re = new RegExp('^' + locale + '[-_]');\n for(var i = 0; i < ll.length; ++i){\n if (re.test(ll[i])) return ll[i];\n }\n }\n return null;\n };\n /**\n * Get the list of fallback locales\n *\n * @param locale - If empty or undefined, defaults to `this.locale`\n */ Messages.prototype.getFallback = function(locale) {\n var lc = locale || String(this.locale);\n return this._fallback[lc] || (lc === this.defaultLocale || !this.defaultLocale ? [] : [\n this.defaultLocale\n ]);\n };\n /**\n * Set the fallback locale or locales for `lc`\n *\n * @remarks\n * To disable fallback for the locale, use `setFallback(lc, [])`.\n * To use the default fallback, use `setFallback(lc, null)`.\n */ Messages.prototype.setFallback = function(lc, fallback) {\n this._fallback[lc] = Array.isArray(fallback) ? fallback : null;\n return this;\n };\n /**\n * Check if `key` is a message function for the locale\n *\n * @remarks\n * `key` may be a `string` for functions at the root level, or `string[]` for\n * accessing hierarchical objects. If an exact match is not found and\n * `fallback` is true, the fallback locales are checked for the first match.\n *\n * @param key - The key or keypath being sought\n * @param locale - If empty or undefined, defaults to `this.locale`\n * @param fallback - If true, also checks fallback locales\n */ Messages.prototype.hasMessage = function(key, locale, fallback) {\n var lc = locale || String(this.locale);\n var fb = fallback ? this.getFallback(lc) : null;\n return $7d2dbc41645dbcab$var$_has(this._data, lc, key, fb, 'function');\n };\n /**\n * Check if `key` is a message object for the locale\n *\n * @remarks\n * `key` may be a `string` for functions at the root level, or `string[]` for\n * accessing hierarchical objects. If an exact match is not found and\n * `fallback` is true, the fallback locales are checked for the first match.\n *\n * @param key - The key or keypath being sought\n * @param locale - If empty or undefined, defaults to `this.locale`\n * @param fallback - If true, also checks fallback locales\n */ Messages.prototype.hasObject = function(key, locale, fallback) {\n var lc = locale || String(this.locale);\n var fb = fallback ? this.getFallback(lc) : null;\n return $7d2dbc41645dbcab$var$_has(this._data, lc, key, fb, 'object');\n };\n /**\n * Get the message or object corresponding to `key`\n *\n * @remarks\n * `key` may be a `string` for functions at the root level, or `string[]` for accessing hierarchical objects.\n * If an exact match is not found, the fallback locales are checked for the first match.\n *\n * If `key` maps to a message function, the returned value will be the result of calling it with `props`.\n * If it maps to an object, the object is returned directly.\n * If nothing is found, `key` is returned.\n *\n * @param key - The key or keypath being sought\n * @param props - Optional properties passed to the function\n * @param lc - If empty or undefined, defaults to `this.locale`\n */ Messages.prototype.get = function(key, props, locale) {\n var lc = locale || String(this.locale);\n var msg = $7d2dbc41645dbcab$var$_get(this._data[lc], key);\n if (msg) return typeof msg == 'function' ? msg(props) : msg;\n var fb = this.getFallback(lc);\n for(var i = 0; i < fb.length; ++i){\n msg = $7d2dbc41645dbcab$var$_get(this._data[fb[i]], key);\n if (msg) return typeof msg == 'function' ? msg(props) : msg;\n }\n return key;\n };\n return Messages;\n}();\nvar $7d2dbc41645dbcab$export$2e2bcd8739ae039 = $7d2dbc41645dbcab$var$Messages;\nfunction $7d2dbc41645dbcab$var$_get(obj, key) {\n if (!obj) return null;\n var res = obj;\n if (Array.isArray(key)) {\n for(var i = 0; i < key.length; ++i){\n if ((typeof res === \"undefined\" ? \"undefined\" : (0, $67ae305e1674258d$export$71511d61b312f219)(res)) !== 'object') return null;\n res = res[key[i]];\n if (!res) return null;\n }\n return res;\n }\n return (typeof res === \"undefined\" ? \"undefined\" : (0, $67ae305e1674258d$export$71511d61b312f219)(res)) === 'object' ? res[key] : null;\n}\nfunction $7d2dbc41645dbcab$var$_has(data, lc, key, fallback, type) {\n var msg = $7d2dbc41645dbcab$var$_get(data[lc], key);\n if (msg) return (typeof msg === \"undefined\" ? \"undefined\" : (0, $67ae305e1674258d$export$71511d61b312f219)(msg)) === type;\n if (fallback) for(var i = 0; i < fallback.length; ++i){\n msg = $7d2dbc41645dbcab$var$_get(data[fallback[i]], key);\n if (msg) return (typeof msg === \"undefined\" ? \"undefined\" : (0, $67ae305e1674258d$export$71511d61b312f219)(msg)) === type;\n }\n return false;\n}\n\n\nvar $2442b2bff5a8bcca$export$2e2bcd8739ae039 = {\n zh: {\n challenge: {\n title: function() {\n return \"\\u9A8C\\u8BC1\\u60A8\\u4E0D\\u662F\\u673A\\u5668\\u4EBA\";\n },\n calculating: function() {\n return \"\\u6B63\\u5728\\u8FDB\\u884C\\u6D4F\\u89C8\\u5668\\u68C0\\u67E5...\";\n },\n difficulty_speed: function(d) {\n return \"\\u96BE\\u5EA6\\uFF1A\" + d.difficulty + \"\\uFF0C\\u901F\\u5EA6\\uFF1A\" + d.speed + \"kH/s\";\n },\n taking_longer: function() {\n return \"\\u9A8C\\u8BC1\\u65F6\\u95F4\\u8D85\\u51FA\\u9884\\u671F\\uFF0C\\u8BF7\\u52FF\\u5237\\u65B0\\u9875\\u9762\";\n },\n why_seeing: function() {\n return \"\\u4E3A\\u4EC0\\u4E48\\u6211\\u4F1A\\u770B\\u5230\\u8FD9\\u4E2A\\u9875\\u9762\\uFF1F\";\n },\n why_seeing_body: {\n part_1: function(d) {\n return \"\\u60A8\\u770B\\u5230\\u8FD9\\u4E2A\\u9875\\u9762\\u662F\\u56E0\\u4E3A\\u7F51\\u7AD9\\u7BA1\\u7406\\u5458\\u542F\\u7528\\u4E86 \" + d.cerberus + \" \\u6765\\u9632\\u5FA1\\u5F02\\u5E38\\u6D41\\u91CF\\u653B\\u51FB\\u3002\\u8FD9\\u7C7B\\u653B\\u51FB\\u53EF\\u80FD\\u5BFC\\u81F4\\u7F51\\u7AD9\\u670D\\u52A1\\u4E2D\\u65AD\\uFF0C\\u5F71\\u54CD\\u6240\\u6709\\u7528\\u6237\\u7684\\u6B63\\u5E38\\u8BBF\\u95EE\\u3002\";\n },\n part_2: function(d) {\n return \"\\u5982\\u679C\\u60A8\\u4E86\\u89E3 \" + d.techaro + \" \\u5F00\\u53D1\\u7684 \" + d.anubis + \"\\uFF0C\\u90A3\\u4E48 Cerberus \\u91C7\\u7528\\u4E86\\u7C7B\\u4F3C\\u7684 PoW \\u9A8C\\u8BC1\\u6280\\u672F\\u3002\\u4E0D\\u540C\\u7684\\u662F\\uFF0CAnubis \\u4E3B\\u8981\\u9488\\u5BF9 AI \\u722C\\u866B\\uFF0C\\u800C Cerberus \\u5219\\u91C7\\u7528\\u4E86\\u66F4\\u6FC0\\u8FDB\\u7684\\u7B56\\u7565\\u6765\\u4FDD\\u62A4\\u6211\\u4EEC\\u7684\\u5F00\\u6E90\\u57FA\\u7840\\u8BBE\\u65BD\\u3002\";\n },\n part_3: function(d) {\n return \"\\u8BF7\\u6CE8\\u610F\\uFF0CCerberus \\u9700\\u8981\\u542F\\u7528\\u73B0\\u4EE3 JavaScript \\u529F\\u80FD\\uFF0C\\u800C \" + d.jshelter + \" \\u7B49\\u63D2\\u4EF6\\u4F1A\\u7981\\u7528\\u8FD9\\u4E9B\\u529F\\u80FD\\u3002\\u8BF7\\u4E3A\\u672C\\u57DF\\u540D\\u7981\\u7528 \" + d.jshelter + \" \\u6216\\u7C7B\\u4F3C\\u7684\\u63D2\\u4EF6\\u3002\";\n }\n },\n must_enable_js: function() {\n return \"\\u8BF7\\u542F\\u7528 JavaScript \\u4EE5\\u7EE7\\u7EED\\u8BBF\\u95EE\";\n }\n },\n success: {\n title: function() {\n return \"\\u9A8C\\u8BC1\\u6210\\u529F\";\n },\n verification_complete: function() {\n return \"\\u9A8C\\u8BC1\\u5DF2\\u5B8C\\u6210\";\n },\n took_time_iterations: function(d) {\n return \"\\u7528\\u65F6 \" + d.time + \"ms\\uFF0C\\u5B8C\\u6210 \" + d.iterations + \" \\u6B21\\u8FED\\u4EE3\";\n }\n },\n error: {\n error_occurred: function() {\n return \"\\u53D1\\u751F\\u9519\\u8BEF\";\n },\n access_restricted: function() {\n return \"\\u8BBF\\u95EE\\u53D7\\u9650\";\n },\n browser_config_or_bug: function() {\n return \"\\u53EF\\u80FD\\u662F\\u6D4F\\u89C8\\u5668\\u914D\\u7F6E\\u95EE\\u9898\\uFF0C\\u4E5F\\u53EF\\u80FD\\u662F\\u6211\\u4EEC\\u7684\\u7CFB\\u7EDF\\u51FA\\u73B0\\u4E86\\u5F02\\u5E38\";\n },\n ip_blocked: function() {\n return \"\\u7531\\u4E8E\\u68C0\\u6D4B\\u5230\\u53EF\\u7591\\u6D3B\\u52A8\\uFF0C\\u60A8\\u7684 IP \\u5730\\u5740\\u6216\\u672C\\u5730\\u7F51\\u7EDC\\u5DF2\\u88AB\\u5C01\\u7981\";\n },\n wait_before_retry: function() {\n return \"\\u8BF7\\u7A0D\\u540E\\u518D\\u8BD5\\uFF0C\\u67D0\\u4E9B\\u60C5\\u51B5\\u4E0B\\u53EF\\u80FD\\u9700\\u8981\\u7B49\\u5F85\\u6570\\u5C0F\\u65F6\";\n },\n contact_us: function(d) {\n return \"\\u5982\\u6709\\u95EE\\u9898\\uFF0C\\u8BF7\\u901A\\u8FC7 \" + d.mail + \" \\u8054\\u7CFB\\u6211\\u4EEC\\u3002\\u8BF7\\u9644\\u4E0A\\u4E0B\\u65B9\\u663E\\u793A\\u7684 request ID\\uFF0C\\u4EE5\\u4FBF\\u6211\\u4EEC\\u8FDB\\u884C\\u6392\\u67E5\\u3002\";\n }\n },\n footer: {\n author: function(d) {\n return \"\\u7531 \" + d.sjtug + \" \\u5F00\\u53D1\\u7684 \" + d.cerberus + \" \\u63D0\\u4F9B\\u4FDD\\u62A4\";\n },\n upstream: function(d) {\n return \"\\u7075\\u611F\\u6765\\u6E90\\u4E8E \\uD83C\\uDDE8\\uD83C\\uDDE6 \" + d.techaro + \" \\u5F00\\u53D1\\u7684 \" + d.anubis;\n }\n }\n },\n en: {\n challenge: {\n title: function() {\n return \"Making sure you're not a bot!\";\n },\n calculating: function() {\n return \"Performing browser checks...\";\n },\n difficulty_speed: function(d) {\n return \"Difficulty: \" + d.difficulty + \", Speed: \" + d.speed + \"kH/s\";\n },\n taking_longer: function() {\n return \"This is taking longer than expected. Please do not refresh the page.\";\n },\n why_seeing: function() {\n return \"Why am I seeing this?\";\n },\n why_seeing_body: {\n part_1: function(d) {\n return \"You are seeing this because the administrator of this website has set up \" + d.cerberus + \" to protect the server against abusive traffic. This can and does cause downtime for the websites, which makes their resources inaccessible for everyone.\";\n },\n part_2: function(d) {\n return \"If you're familiar with \" + d.anubis + \" by \" + d.techaro + \", Cerberus is similar - it performs a PoW challenge to verify the request. While Anubis focuses on protecting websites from AI scrapers, Cerberus takes a much more aggressive approach to protect our open-source infrastructure.\";\n },\n part_3: function(d) {\n return \"Please note that Cerberus requires the use of modern JavaScript features that plugins like \" + d.jshelter + \" will disable. Please disable \" + d.jshelter + \" or other such plugins for this domain.\";\n }\n },\n must_enable_js: function() {\n return \"You must enable JavaScript to proceed.\";\n }\n },\n success: {\n title: function() {\n return \"Success!\";\n },\n verification_complete: function() {\n return \"Verification Complete!\";\n },\n took_time_iterations: function(d) {\n return \"Took \" + d.time + \"ms, \" + d.iterations + \" iterations\";\n }\n },\n error: {\n error_occurred: function() {\n return \"Error occurred while processing your request\";\n },\n access_restricted: function() {\n return \"Access has been restricted\";\n },\n browser_config_or_bug: function() {\n return \"There might be an issue with your browser configuration, or something is wrong on our side.\";\n },\n ip_blocked: function() {\n return \"You (or your local network) have been blocked due to suspicious activity.\";\n },\n wait_before_retry: function() {\n return \"Please wait a while before you try again; in some cases this may take a few hours.\";\n },\n contact_us: function(d) {\n return \"If you believe this is an error, please contact us at \" + d.mail + \". Attach the request ID shown below to help us investigate.\";\n }\n },\n footer: {\n author: function(d) {\n return \"Protected by \" + d.cerberus + \" from \" + d.sjtug + \".\";\n },\n upstream: function(d) {\n return \"Heavily inspired by \" + d.anubis + \" from \" + d.techaro + \" in \\uD83C\\uDDE8\\uD83C\\uDDE6.\";\n }\n }\n }\n};\n\n\nvar $879896b395956ce6$var$messages = new (0, $7d2dbc41645dbcab$export$2e2bcd8739ae039)((0, $2442b2bff5a8bcca$export$2e2bcd8739ae039));\nconsole.log($879896b395956ce6$var$messages.locale, $879896b395956ce6$var$messages.availableLocales);\nfunction $879896b395956ce6$var$t(key, props) {\n return $879896b395956ce6$var$messages.get(key.split('.'), props);\n}\nvar $879896b395956ce6$var$meta = {\n baseURL: \"\",\n version: \"\",\n locale: \"\"\n};\nvar $879896b395956ce6$var$dom = {\n title: document.getElementById('title'),\n mascot: document.getElementById('mascot'),\n status: document.getElementById('status'),\n metrics: document.getElementById('metrics'),\n message: document.getElementById('message'),\n progressContainer: document.getElementById('progress-container'),\n progressBar: document.getElementById('progress-bar')\n};\nvar $879896b395956ce6$var$ui = {\n title: function(title) {\n return $879896b395956ce6$var$dom.title.textContent = title;\n },\n mascotState: function(state) {\n return $879896b395956ce6$var$dom.mascot.src = \"\".concat($879896b395956ce6$var$meta.baseURL, \"/static/img/mascot-\").concat(state, \".png?v=\").concat($879896b395956ce6$var$meta.version);\n },\n status: function(status) {\n return $879896b395956ce6$var$dom.status.textContent = status;\n },\n metrics: function(metrics) {\n return $879896b395956ce6$var$dom.metrics.textContent = metrics;\n },\n message: function(message) {\n return $879896b395956ce6$var$dom.message.textContent = message;\n },\n progress: function(progress) {\n $879896b395956ce6$var$dom.progressContainer.classList.toggle('hidden', !progress);\n $879896b395956ce6$var$dom.progressBar.style.width = \"\".concat(progress, \"%\");\n }\n};\nfunction $879896b395956ce6$var$createAnswerForm(hash, solution, baseURL, nonce, ts, signature) {\n function addHiddenInput(form, name, value) {\n var input = document.createElement('input');\n input.type = 'hidden';\n input.name = name;\n input.value = value;\n form.appendChild(input);\n }\n var form = document.createElement('form');\n form.method = 'POST';\n form.action = \"\".concat(baseURL, \"/answer\");\n addHiddenInput(form, 'response', hash);\n addHiddenInput(form, 'solution', solution);\n addHiddenInput(form, 'nonce', nonce);\n addHiddenInput(form, 'ts', ts);\n addHiddenInput(form, 'signature', signature);\n addHiddenInput(form, 'redir', window.location.href);\n document.body.appendChild(form);\n return form;\n}\n(function() {\n return (/*#__PURE__*/ 0, /*#__PURE__*/ $cf6e67383540718f$export$71511d61b312f219)(function() {\n var thisScript, _JSON_parse, challenge, difficulty, inputNonce, ts, signature, _JSON_parse1, baseURL, version, locale, t0, lastUpdate, likelihood, mergedChallenge, _ref, hash, solution, t1, form;\n return (0, $01ec0fe86f91b5d8$export$67ebef60e6f28a6)(this, function(_state) {\n switch(_state.label){\n case 0:\n // const image = document.getElementById('image');\n // const spinner = document.getElementById('spinner');\n // const anubisVersion = JSON.parse(document.getElementById('anubis_version').textContent);\n thisScript = document.getElementById('challenge-script');\n _JSON_parse = JSON.parse(thisScript.getAttribute('x-challenge')), challenge = _JSON_parse.challenge, difficulty = _JSON_parse.difficulty, inputNonce = _JSON_parse.nonce, ts = _JSON_parse.ts, signature = _JSON_parse.signature;\n _JSON_parse1 = JSON.parse(thisScript.getAttribute('x-meta')), baseURL = _JSON_parse1.baseURL, version = _JSON_parse1.version, locale = _JSON_parse1.locale;\n // Initialize UI\n $879896b395956ce6$var$meta.baseURL = baseURL;\n $879896b395956ce6$var$meta.version = version;\n $879896b395956ce6$var$meta.locale = locale;\n // Set locale\n $879896b395956ce6$var$messages.locale = locale;\n // Set initial checking state\n $879896b395956ce6$var$ui.title($879896b395956ce6$var$t('challenge.title'));\n $879896b395956ce6$var$ui.mascotState('puzzle');\n $879896b395956ce6$var$ui.status($879896b395956ce6$var$t('challenge.calculating'));\n $879896b395956ce6$var$ui.metrics($879896b395956ce6$var$t('challenge.difficulty_speed', {\n difficulty: difficulty,\n speed: 0\n }));\n $879896b395956ce6$var$ui.message('');\n $879896b395956ce6$var$ui.progress(0);\n t0 = Date.now();\n lastUpdate = 0;\n likelihood = Math.pow(16, -difficulty / 2);\n mergedChallenge = \"\".concat(challenge, \"|\").concat(inputNonce, \"|\").concat(ts, \"|\").concat(signature, \"|\");\n return [\n 4,\n (0, $2b9a098d94c679e8$export$2e2bcd8739ae039)(mergedChallenge, difficulty, null, function(iters) {\n // the probability of still being on the page is (1 - likelihood) ^ iters.\n // by definition, half of the time the progress bar only gets to half, so\n // apply a polynomial ease-out function to move faster in the beginning\n // and then slow down as things get increasingly unlikely. quadratic felt\n // the best in testing, but this may need adjustment in the future.\n var probability = Math.pow(1 - likelihood, iters);\n var distance = (1 - Math.pow(probability, 2)) * 100;\n // Update progress every 200ms\n var now = Date.now();\n var delta = now - t0;\n if (delta - lastUpdate > 200) {\n var speed = iters / delta;\n $879896b395956ce6$var$ui.progress(distance);\n $879896b395956ce6$var$ui.metrics($879896b395956ce6$var$t('challenge.difficulty_speed', {\n difficulty: difficulty,\n speed: speed.toFixed(3)\n }));\n $879896b395956ce6$var$ui.message(probability < 0.01 ? $879896b395956ce6$var$t('challenge.taking_longer') : undefined);\n lastUpdate = delta;\n }\n })\n ];\n case 1:\n _ref = _state.sent(), hash = _ref.hash, solution = _ref.nonce;\n t1 = Date.now();\n console.log({\n hash: hash,\n solution: solution\n });\n // Show success state\n $879896b395956ce6$var$ui.title($879896b395956ce6$var$t('success.title'));\n $879896b395956ce6$var$ui.mascotState('pass');\n $879896b395956ce6$var$ui.status($879896b395956ce6$var$t('success.verification_complete'));\n $879896b395956ce6$var$ui.metrics($879896b395956ce6$var$t('success.took_time_iterations', {\n time: t1 - t0,\n iterations: solution\n }));\n $879896b395956ce6$var$ui.message('');\n $879896b395956ce6$var$ui.progress(0);\n form = $879896b395956ce6$var$createAnswerForm(hash, solution, baseURL, inputNonce, ts, signature);\n setTimeout(function() {\n form.submit();\n }, 250);\n return [\n 2\n ];\n }\n });\n })();\n})();\n\n})();\n//# sourceMappingURL=main.js.map\n","parcelRequire.extendImportMap({\"aykjc\":\"pow_bg.e56bb07e.wasm\",\"lyHvT\":\"pow.worker.8c3779b0.js\"});","// This file contains code adapted from https://github.com/TecharoHQ/anubis under the MIT License.\n\nimport pow from \"./pow.mjs\";\nimport Messages from \"@messageformat/runtime/messages\"\nimport msgData from \"./icu/compiled.mjs\"\n\nconst messages = new Messages(msgData)\nconsole.log(messages.locale, messages.availableLocales);\n\nfunction t(key, props) {\n return messages.get(key.split('.'), props)\n}\n\nconst meta = {\n baseURL: \"\",\n version: \"\",\n locale: \"\"\n}\n\nconst dom = {\n title: document.getElementById('title'),\n mascot: document.getElementById('mascot'),\n status: document.getElementById('status'),\n metrics: document.getElementById('metrics'),\n message: document.getElementById('message'),\n progressContainer: document.getElementById('progress-container'),\n progressBar: document.getElementById('progress-bar')\n}\n\nconst ui = {\n title: (title) => dom.title.textContent = title,\n mascotState: (state) => dom.mascot.src = `${meta.baseURL}/static/img/mascot-${state}.png?v=${meta.version}`,\n status: (status) => dom.status.textContent = status,\n metrics: (metrics) => dom.metrics.textContent = metrics,\n message: (message) => dom.message.textContent = message,\n progress: (progress) => {\n dom.progressContainer.classList.toggle('hidden', !progress);\n dom.progressBar.style.width = `${progress}%`;\n }\n}\n\nfunction createAnswerForm(hash, solution, baseURL, nonce, ts, signature) {\n function addHiddenInput(form, name, value) {\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = name;\n input.value = value;\n form.appendChild(input);\n }\n\n const form = document.createElement('form');\n form.method = 'POST';\n form.action = `${baseURL}/answer`;\n\n addHiddenInput(form, 'response', hash);\n addHiddenInput(form, 'solution', solution);\n addHiddenInput(form, 'nonce', nonce);\n addHiddenInput(form, 'ts', ts);\n addHiddenInput(form, 'signature', signature);\n addHiddenInput(form, 'redir', window.location.href);\n\n document.body.appendChild(form);\n return form;\n}\n\n(async () => {\n // const image = document.getElementById('image');\n // const spinner = document.getElementById('spinner');\n // const anubisVersion = JSON.parse(document.getElementById('anubis_version').textContent);\n\n const thisScript = document.getElementById('challenge-script');\n const { challenge, difficulty, nonce: inputNonce, ts, signature } = JSON.parse(thisScript.getAttribute('x-challenge'));\n const { baseURL, version, locale } = JSON.parse(thisScript.getAttribute('x-meta'));\n\n // Initialize UI\n meta.baseURL = baseURL;\n meta.version = version;\n meta.locale = locale;\n\n // Set locale\n messages.locale = locale;\n\n // Set initial checking state\n ui.title(t('challenge.title'));\n ui.mascotState('puzzle');\n ui.status(t('challenge.calculating'));\n ui.metrics(t('challenge.difficulty_speed', { difficulty, speed: 0 }));\n ui.message('');\n ui.progress(0);\n\n const t0 = Date.now();\n let lastUpdate = 0;\n\n const likelihood = Math.pow(16, -difficulty/2);\n\n const mergedChallenge = `${challenge}|${inputNonce}|${ts}|${signature}|`;\n const { hash, nonce: solution } = await pow(mergedChallenge, difficulty, null, (iters) => {\n // the probability of still being on the page is (1 - likelihood) ^ iters.\n // by definition, half of the time the progress bar only gets to half, so\n // apply a polynomial ease-out function to move faster in the beginning\n // and then slow down as things get increasingly unlikely. quadratic felt\n // the best in testing, but this may need adjustment in the future.\n const probability = Math.pow(1 - likelihood, iters);\n const distance = (1 - Math.pow(probability, 2)) * 100;\n\n // Update progress every 200ms\n const now = Date.now();\n const delta = now - t0;\n\n if (delta - lastUpdate > 200) {\n const speed = iters / delta;\n ui.progress(distance);\n ui.metrics(t('challenge.difficulty_speed', { difficulty, speed: speed.toFixed(3) }));\n ui.message(probability < 0.01 ? t('challenge.taking_longer') : undefined);\n lastUpdate = delta;\n };\n });\n const t1 = Date.now();\n console.log({ hash, solution });\n\n // Show success state\n ui.title(t('success.title'));\n ui.mascotState('pass');\n ui.status(t('success.verification_complete'));\n ui.metrics(t('success.took_time_iterations', { time: t1 - t0, iterations: solution }));\n ui.message('');\n ui.progress(0);\n\n const form = createAnswerForm(hash, solution, baseURL, inputNonce, ts, signature);\n setTimeout(() => {\n form.submit();\n }, 250);\n\n})();","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\nexport { _async_to_generator as _ };\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","function _type_of(obj) {\n \"@swc/helpers - typeof\";\n\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nexport { _type_of as _ };\n","// This file contains code adapted from https://github.com/TecharoHQ/anubis under the MIT License.\nimport wasm from 'url:pow-wasm/pow_bg.wasm';\n\nexport default async function process(\n data,\n difficulty = 5,\n signal = null,\n progressCallback = null,\n threads = (navigator.hardwareConcurrency || 1),\n) {\n return new Promise((resolve, reject) => {\n console.debug(\"fast algo\");\n const workers = [];\n const terminate = () => {\n workers.forEach((w) => w.terminate());\n if (signal !== null) {\n // clean up listener to avoid memory leak\n signal.removeEventListener(\"abort\", terminate);\n if (signal.aborted) {\n console.log(\"PoW aborted\");\n reject(new Error(\"PoW aborted\"));\n }\n }\n };\n if (signal !== null) {\n signal.addEventListener(\"abort\", terminate, { once: true });\n }\n\n (async () => {\n const wasmModule = await (await fetch(wasm)).arrayBuffer();\n\n for (let i = 0; i < threads; i++) {\n let worker = new Worker(new URL(\"./pow.worker.js\", import.meta.url), { type: \"module\" });\n\n worker.onmessage = (event) => {\n if (typeof event.data === \"number\") {\n progressCallback?.(event.data);\n } else {\n terminate();\n resolve(event.data);\n }\n };\n\n worker.onerror = (event) => {\n terminate();\n reject(event);\n };\n\n worker.postMessage({\n wasmModule,\n data,\n difficulty,\n nonce: i,\n threads,\n });\n\n workers.push(worker);\n }\n })();\n });\n}","module.exports = parcelRequire.resolve(\"aykjc\");","let workerURL = require('./helpers/get-worker-url');\nlet url = new URL(parcelRequire.resolve(\"lyHvT\"));\nmodule.exports = workerURL(url.toString(), url.origin, false);","\"use strict\";\n\nmodule.exports = function (workerUrl, origin, isESM) {\n if (origin === self.location.origin) {\n // If the worker bundle's url is on the same origin as the document,\n // use the worker bundle's own url.\n return workerUrl;\n } else {\n // Otherwise, create a blob URL which loads the worker bundle with `importScripts`.\n var source = isESM ? 'import ' + JSON.stringify(workerUrl) + ';' : 'importScripts(' + JSON.stringify(workerUrl) + ');';\n return URL.createObjectURL(new Blob([source], {\n type: 'application/javascript'\n }));\n }\n};","/**\n * A collection of runtime utility functions\n *\n * @remarks\n * This package should be marked as a dependency for any package that publishes the output of {@link @messageformat/core#compileModule},\n * as it may be included in its ES module source output as a dependency.\n *\n * For applications that bundle their output using e.g. Webpack this is not necessary.\n *\n * The `Messages` accessor class is a completely optional addition.\n * See also {@link @messageformat/react# | @messageformat/react} for a React-specific solution.\n *\n * @packageDocumentation\n */\n/**\n * Accessor class for compiled message functions generated by\n * {@link @messageformat/core#compileModule}\n *\n * @public\n * @remarks\n * ```js\n * import Messages from '@messageformat/runtime/messages'\n * ```\n *\n * @example\n * ```js\n * // build.js\n * import { writeFileSync } from 'fs';\n * import MessageFormat from '@messageformat/core';\n * import compileModule from '@messageformat/core/compile-module'\n *\n * const mf = new MessageFormat(['en', 'fi']);\n * const msgSet = {\n * en: {\n * a: 'A {TYPE} example.',\n * b: 'This has {COUNT, plural, one{one user} other{# users}}.',\n * c: {\n * d: 'We have {P, number, percent} code coverage.'\n * }\n * },\n * fi: {\n * b: 'Tällä on {COUNT, plural, one{yksi käyttäjä} other{# käyttäjää}}.',\n * e: 'Minä puhun vain suomea.'\n * }\n * };\n * writeFileSync('messages.js', compileModule(mf, msgSet));\n * ```\n *\n * ```js\n * // runtime.js\n * import Messages from '@messageformat/runtime/messages';\n * import msgData from './messages';\n *\n * const messages = new Messages(msgData, 'en');\n *\n * messages.hasMessage('a') // true\n * messages.hasObject('c') // true\n * messages.get('b', { COUNT: 3 }) // 'This has 3 users.'\n * messages.get(['c', 'd'], { P: 0.314 }) // 'We have 31% code coverage.'\n *\n * messages.get('e') // 'e'\n * messages.setFallback('en', ['foo', 'fi'])\n * messages.get('e') // 'Minä puhun vain suomea.'\n *\n * messages.locale = 'fi'\n * messages.hasMessage('a') // false\n * messages.hasMessage('a', 'en') // true\n * messages.hasMessage('a', null, true) // true\n * messages.hasObject('c') // false\n * messages.get('b', { COUNT: 3 }) // 'Tällä on 3 käyttäjää.'\n * messages.get('c').d({ P: 0.628 }) // 'We have 63% code coverage.'\n * ```\n */\nvar Messages = /** @class */ (function () {\n /**\n * @param msgData - A map of locale codes to their function objects\n * @param defaultLocale - If not defined, default and initial locale is the first key of `msgData`\n */\n function Messages(msgData, defaultLocale) {\n var _this = this;\n /** @internal */\n this._data = {};\n /** @internal */\n this._fallback = {};\n /** @internal */\n this._defaultLocale = null;\n /** @internal */\n this._locale = null;\n Object.keys(msgData).forEach(function (lc) {\n if (lc !== 'toString') {\n _this._data[lc] = msgData[lc];\n if (defaultLocale === undefined)\n defaultLocale = lc;\n }\n });\n this.locale = defaultLocale || null;\n this._defaultLocale = this.locale;\n }\n Object.defineProperty(Messages.prototype, \"availableLocales\", {\n /** Read-only list of available locales */\n get: function () {\n return Object.keys(this._data);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Messages.prototype, \"locale\", {\n /**\n * Current locale\n *\n * @remarks\n * One of {@link Messages.availableLocales} or `null`.\n * Partial matches of language tags are supported, so e.g. with an `en` locale defined, it will be selected by `messages.locale = 'en-US'` and vice versa.\n */\n get: function () {\n return this._locale;\n },\n set: function (locale) {\n this._locale = this.resolveLocale(locale);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Messages.prototype, \"defaultLocale\", {\n /**\n * Default fallback locale\n *\n * @remarks\n * One of {@link Messages.availableLocales} or `null`.\n * Partial matches of language tags are supported, so e.g. with an `en` locale defined, it will be selected by `messages.defaultLocale = 'en-US'` and vice versa.\n */\n get: function () {\n return this._defaultLocale;\n },\n set: function (locale) {\n this._defaultLocale = this.resolveLocale(locale);\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Add new messages to the accessor; useful if loading data dynamically\n *\n * @remarks\n * The locale code `lc` should be an exact match for the locale being updated, or empty to default to the current locale.\n * Use {@link Messages.resolveLocale} for resolving partial locale strings.\n *\n * If `keypath` is empty, adds or sets the complete message object for the corresponding locale.\n * If any keys in `keypath` do not exist, a new object will be created at that key.\n *\n * @param data - Hierarchical map of keys to functions, or a single message function\n * @param locale - If empty or undefined, defaults to `this.locale`\n * @param keypath - The keypath being added\n */\n Messages.prototype.addMessages = function (data, locale, keypath) {\n var lc = locale || String(this.locale);\n if (typeof data !== 'function') {\n data = Object.keys(data).reduce(function (map, key) {\n if (key !== 'toString')\n map[key] = data[key];\n return map;\n }, {});\n }\n if (Array.isArray(keypath) && keypath.length > 0) {\n var parent_1 = this._data[lc];\n for (var i = 0; i < keypath.length - 1; ++i) {\n var key = keypath[i];\n if (!parent_1[key])\n parent_1[key] = {};\n parent_1 = parent_1[key];\n }\n parent_1[keypath[keypath.length - 1]] = data;\n }\n else {\n this._data[lc] = data;\n }\n return this;\n };\n /**\n * Resolve `lc` to the key of an available locale or `null`, allowing for partial matches.\n *\n * @remarks\n * For example, with an `en` locale defined, it will be selected by `messages.defaultLocale = 'en-US'` and vice versa.\n */\n Messages.prototype.resolveLocale = function (locale) {\n var lc = String(locale);\n if (this._data[lc])\n return locale;\n if (locale) {\n while ((lc = lc.replace(/[-_]?[^-_]*$/, ''))) {\n if (this._data[lc])\n return lc;\n }\n var ll = this.availableLocales;\n var re = new RegExp('^' + locale + '[-_]');\n for (var i = 0; i < ll.length; ++i) {\n if (re.test(ll[i]))\n return ll[i];\n }\n }\n return null;\n };\n /**\n * Get the list of fallback locales\n *\n * @param locale - If empty or undefined, defaults to `this.locale`\n */\n Messages.prototype.getFallback = function (locale) {\n var lc = locale || String(this.locale);\n return (this._fallback[lc] ||\n (lc === this.defaultLocale || !this.defaultLocale\n ? []\n : [this.defaultLocale]));\n };\n /**\n * Set the fallback locale or locales for `lc`\n *\n * @remarks\n * To disable fallback for the locale, use `setFallback(lc, [])`.\n * To use the default fallback, use `setFallback(lc, null)`.\n */\n Messages.prototype.setFallback = function (lc, fallback) {\n this._fallback[lc] = Array.isArray(fallback) ? fallback : null;\n return this;\n };\n /**\n * Check if `key` is a message function for the locale\n *\n * @remarks\n * `key` may be a `string` for functions at the root level, or `string[]` for\n * accessing hierarchical objects. If an exact match is not found and\n * `fallback` is true, the fallback locales are checked for the first match.\n *\n * @param key - The key or keypath being sought\n * @param locale - If empty or undefined, defaults to `this.locale`\n * @param fallback - If true, also checks fallback locales\n */\n Messages.prototype.hasMessage = function (key, locale, fallback) {\n var lc = locale || String(this.locale);\n var fb = fallback ? this.getFallback(lc) : null;\n return _has(this._data, lc, key, fb, 'function');\n };\n /**\n * Check if `key` is a message object for the locale\n *\n * @remarks\n * `key` may be a `string` for functions at the root level, or `string[]` for\n * accessing hierarchical objects. If an exact match is not found and\n * `fallback` is true, the fallback locales are checked for the first match.\n *\n * @param key - The key or keypath being sought\n * @param locale - If empty or undefined, defaults to `this.locale`\n * @param fallback - If true, also checks fallback locales\n */\n Messages.prototype.hasObject = function (key, locale, fallback) {\n var lc = locale || String(this.locale);\n var fb = fallback ? this.getFallback(lc) : null;\n return _has(this._data, lc, key, fb, 'object');\n };\n /**\n * Get the message or object corresponding to `key`\n *\n * @remarks\n * `key` may be a `string` for functions at the root level, or `string[]` for accessing hierarchical objects.\n * If an exact match is not found, the fallback locales are checked for the first match.\n *\n * If `key` maps to a message function, the returned value will be the result of calling it with `props`.\n * If it maps to an object, the object is returned directly.\n * If nothing is found, `key` is returned.\n *\n * @param key - The key or keypath being sought\n * @param props - Optional properties passed to the function\n * @param lc - If empty or undefined, defaults to `this.locale`\n */\n Messages.prototype.get = function (key, props, locale) {\n var lc = locale || String(this.locale);\n var msg = _get(this._data[lc], key);\n if (msg)\n return typeof msg == 'function' ? msg(props) : msg;\n var fb = this.getFallback(lc);\n for (var i = 0; i < fb.length; ++i) {\n msg = _get(this._data[fb[i]], key);\n if (msg)\n return typeof msg == 'function' ? msg(props) : msg;\n }\n return key;\n };\n return Messages;\n}());\nexport default Messages;\nfunction _get(obj, key) {\n if (!obj)\n return null;\n var res = obj;\n if (Array.isArray(key)) {\n for (var i = 0; i < key.length; ++i) {\n if (typeof res !== 'object')\n return null;\n res = res[key[i]];\n if (!res)\n return null;\n }\n return res;\n }\n return typeof res === 'object' ? res[key] : null;\n}\nfunction _has(data, lc, key, fallback, type) {\n var msg = _get(data[lc], key);\n if (msg)\n return typeof msg === type;\n if (fallback) {\n for (var i = 0; i < fallback.length; ++i) {\n msg = _get(data[fallback[i]], key);\n if (msg)\n return typeof msg === type;\n }\n }\n return false;\n}\n","\nexport default {\n zh: {\n challenge: {\n title: () => \"验证您不是机器人\",\n calculating: () => \"正在进行浏览器检查...\",\n difficulty_speed: (d) => \"难度:\" + d.difficulty + \",速度:\" + d.speed + \"kH/s\",\n taking_longer: () => \"验证时间超出预期,请勿刷新页面\",\n why_seeing: () => \"为什么我会看到这个页面?\",\n why_seeing_body: {\n part_1: (d) => \"您看到这个页面是因为网站管理员启用了 \" + d.cerberus + \" 来防御异常流量攻击。这类攻击可能导致网站服务中断,影响所有用户的正常访问。\",\n part_2: (d) => \"如果您了解 \" + d.techaro + \" 开发的 \" + d.anubis + \",那么 Cerberus 采用了类似的 PoW 验证技术。不同的是,Anubis 主要针对 AI 爬虫,而 Cerberus 则采用了更激进的策略来保护我们的开源基础设施。\",\n part_3: (d) => \"请注意,Cerberus 需要启用现代 JavaScript 功能,而 \" + d.jshelter + \" 等插件会禁用这些功能。请为本域名禁用 \" + d.jshelter + \" 或类似的插件。\"\n },\n must_enable_js: () => \"请启用 JavaScript 以继续访问\"\n },\n success: {\n title: () => \"验证成功\",\n verification_complete: () => \"验证已完成\",\n took_time_iterations: (d) => \"用时 \" + d.time + \"ms,完成 \" + d.iterations + \" 次迭代\"\n },\n error: {\n error_occurred: () => \"发生错误\",\n access_restricted: () => \"访问受限\",\n browser_config_or_bug: () => \"可能是浏览器配置问题,也可能是我们的系统出现了异常\",\n ip_blocked: () => \"由于检测到可疑活动,您的 IP 地址或本地网络已被封禁\",\n wait_before_retry: () => \"请稍后再试,某些情况下可能需要等待数小时\",\n contact_us: (d) => \"如有问题,请通过 \" + d.mail + \" 联系我们。请附上下方显示的 request ID,以便我们进行排查。\"\n },\n footer: {\n author: (d) => \"由 \" + d.sjtug + \" 开发的 \" + d.cerberus + \" 提供保护\",\n upstream: (d) => \"灵感来源于 🇨🇦 \" + d.techaro + \" 开发的 \" + d.anubis\n }\n },\n en: {\n challenge: {\n title: () => \"Making sure you're not a bot!\",\n calculating: () => \"Performing browser checks...\",\n difficulty_speed: (d) => \"Difficulty: \" + d.difficulty + \", Speed: \" + d.speed + \"kH/s\",\n taking_longer: () => \"This is taking longer than expected. Please do not refresh the page.\",\n why_seeing: () => \"Why am I seeing this?\",\n why_seeing_body: {\n part_1: (d) => \"You are seeing this because the administrator of this website has set up \" + d.cerberus + \" to protect the server against abusive traffic. This can and does cause downtime for the websites, which makes their resources inaccessible for everyone.\",\n part_2: (d) => \"If you're familiar with \" + d.anubis + \" by \" + d.techaro + \", Cerberus is similar - it performs a PoW challenge to verify the request. While Anubis focuses on protecting websites from AI scrapers, Cerberus takes a much more aggressive approach to protect our open-source infrastructure.\",\n part_3: (d) => \"Please note that Cerberus requires the use of modern JavaScript features that plugins like \" + d.jshelter + \" will disable. Please disable \" + d.jshelter + \" or other such plugins for this domain.\"\n },\n must_enable_js: () => \"You must enable JavaScript to proceed.\"\n },\n success: {\n title: () => \"Success!\",\n verification_complete: () => \"Verification Complete!\",\n took_time_iterations: (d) => \"Took \" + d.time + \"ms, \" + d.iterations + \" iterations\"\n },\n error: {\n error_occurred: () => \"Error occurred while processing your request\",\n access_restricted: () => \"Access has been restricted\",\n browser_config_or_bug: () => \"There might be an issue with your browser configuration, or something is wrong on our side.\",\n ip_blocked: () => \"You (or your local network) have been blocked due to suspicious activity.\",\n wait_before_retry: () => \"Please wait a while before you try again; in some cases this may take a few hours.\",\n contact_us: (d) => \"If you believe this is an error, please contact us at \" + d.mail + \". Attach the request ID shown below to help us investigate.\"\n },\n footer: {\n author: (d) => \"Protected by \" + d.cerberus + \" from \" + d.sjtug + \".\",\n upstream: (d) => \"Heavily inspired by \" + d.anubis + \" from \" + d.techaro + \" in 🇨🇦.\"\n }\n }\n}"],"names":["$parcel$resolve","url","parcelRequire","i","$parcel$bundleURL","Error","err","matches","stack","match","$parcel$distDir","URL","toString","$parcel$global","globalThis","self","window","global","$parcel$modules","$parcel$inits","$cf6e67383540718f$var$asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","$cf6e67383540718f$export$71511d61b312f219","fn","args","arguments","apply","undefined","$67ae305e1674258d$export$71511d61b312f219","obj","Symbol","constructor","$01ec0fe86f91b5d8$export$67ebef60e6f28a6","thisArg","body","f","y","t","_","label","sent","trys","ops","g","Object","create","Iterator","prototype","next","verb","iterator","n","v","op","TypeError","call","pop","length","push","e","id","exports","init","module","code","register","assign","SuppressedError","$66d4361906f4496b$exports","$7077909a1ae871cf$exports","$0ae13573b5316750$exports","workerUrl","origin","isESM","location","source","JSON","stringify","createObjectURL","Blob","type","$7077909a1ae871cf$var$url","$7d2dbc41645dbcab$var$_get","res","Array","isArray","$7d2dbc41645dbcab$var$_has","data","lc","fallback","msg","$879896b395956ce6$var$messages","Messages","msgData","defaultLocale","_this","_data","_fallback","_defaultLocale","_locale","keys","forEach","locale","defineProperty","get","enumerable","configurable","set","resolveLocale","addMessages","keypath","String","reduce","map","parent_1","replace","ll","availableLocales","re","RegExp","test","getFallback","setFallback","hasMessage","fb","hasObject","props","zh","challenge","title","calculating","difficulty_speed","d","difficulty","speed","taking_longer","why_seeing","why_seeing_body","part_1","cerberus","part_2","techaro","anubis","part_3","jshelter","must_enable_js","success","verification_complete","took_time_iterations","time","iterations","error_occurred","access_restricted","browser_config_or_bug","ip_blocked","wait_before_retry","contact_us","mail","footer","author","sjtug","upstream","en","$879896b395956ce6$var$t","split","console","log","$879896b395956ce6$var$meta","baseURL","version","$879896b395956ce6$var$dom","document","getElementById","mascot","status","metrics","message","progressContainer","progressBar","$879896b395956ce6$var$ui","textContent","mascotState","state","src","concat","progress","classList","toggle","style","width","thisScript","_JSON_parse","inputNonce","ts","signature","_JSON_parse1","t0","lastUpdate","likelihood","_ref","hash","solution","t1","form","_state","parse","getAttribute","nonce","Date","now","Math","pow","_0","signal","progressCallback","threads","_arguments","navigator","hardwareConcurrency","debug","workers","terminate","w","removeEventListener","aborted","addEventListener","once","wasmModule","worker","a","fetch","__esModule","default","arrayBuffer","Worker","onmessage","event","onerror","postMessage","iters","probability","distance","delta","toFixed","$879896b395956ce6$var$createAnswerForm","addHiddenInput","name","input","createElement","appendChild","method","action","href","setTimeout","submit"],"version":3,"file":"main.js.map"}
\ No newline at end of file diff --git a/vendor/github.com/sjtug/cerberus/web/dist/pow.worker.8c3779b0.js b/vendor/github.com/sjtug/cerberus/web/dist/pow.worker.8c3779b0.js new file mode 100644 index 0000000..35fe6b2 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/dist/pow.worker.8c3779b0.js @@ -0,0 +1,2 @@ +!function(){function e(e,n,t,r){Object.defineProperty(e,n,{get:t,set:r,enumerable:!0,configurable:!0})}var n,t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},r={},o={},i=t.parcelRequireec24;null==i&&((i=function(e){if(e in r)return r[e].exports;if(e in o){var n=o[e];delete o[e];var t={id:e,exports:{}};return r[e]=t,n.call(t.exports,t,t.exports),t.exports}var i=Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}).register=function(e,n){o[e]=n},t.parcelRequireec24=i);var a=i.register;a("2838M",function(e,n){var t=i("gi2E2"),r=i("769Cg"),o=i("itvzF");addEventListener("message",function(e){return(0,t._)(function(){return(0,r.__generator)(this,function(n){return(0,o.initSync)({module:e.data.wasmModule}),(0,o.process_task)(e.data.data,e.data.difficulty,e.data.nonce,e.data.threads),[2]})})()})}),a("gi2E2",function(n,t){function r(e,n,t,r,o,i,a){try{var c=e[i](a),u=c.value}catch(e){t(e);return}c.done?n(u):Promise.resolve(u).then(r,o)}function o(e){return function(){var n=this,t=arguments;return new Promise(function(o,i){var a=e.apply(n,t);function c(e){r(a,o,i,c,u,"next",e)}function u(e){r(a,o,i,c,u,"throw",e)}c(void 0)})}}e(n.exports,"_",function(){return o})}),a("769Cg",function(n,t){function r(e,n){var t,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=c(0),a.throw=c(1),a.return=c(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(u){var s=[c,u];if(t)throw TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)try{if(t=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===s[0]||2===s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=n.call(e,i)}catch(e){s=[6,e],r=0}finally{t=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}}}e(n.exports,"__generator",function(){return r}),i("eXCMu"),"function"==typeof SuppressedError&&SuppressedError}),a("eXCMu",function(n,t){e(n.exports,"_",function(){return r});function r(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}}),a("itvzF",function(n,r){e(n.exports,"process_task",function(){return m}),e(n.exports,"initSync",function(){return E});var o,a=i("gi2E2"),c=i("eXCMu"),u=i("769Cg");function s(e){var n=o.__externref_table_alloc();return o.__wbindgen_export_2.set(n,e),n}function f(e,n){try{return e.apply(this,n)}catch(e){var t=s(e);o.__wbindgen_exn_store(t)}}var l="undefined"!=typeof TextDecoder?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:function(){throw Error("TextDecoder not available")}};"undefined"!=typeof TextDecoder&&l.decode();var d=null;function b(){return(null===d||0===d.byteLength)&&(d=new Uint8Array(o.memory.buffer)),d}function _(e,n){return e>>>=0,l.decode(b().subarray(e,e+n))}var g=0,p="undefined"!=typeof TextEncoder?new TextEncoder("utf-8"):{encode:function(){throw Error("TextEncoder not available")}},w="function"==typeof p.encodeInto?function(e,n){return p.encodeInto(e,n)}:function(e,n){var t=p.encode(e);return n.set(t),{read:e.length,written:t.length}};function y(e,n,t){if(void 0===t){var r=p.encode(e),o=n(r.length,1)>>>0;return b().subarray(o,o+r.length).set(r),g=r.length,o}for(var i=e.length,a=n(i,1)>>>0,c=b(),u=0;u<i;u++){var s=e.charCodeAt(u);if(s>127)break;c[a+u]=s}if(u!==i){0!==u&&(e=e.slice(u)),a=t(a,i,i=u+3*e.length,1)>>>0;var f=w(e,b().subarray(a+u,a+i));u+=f.written,a=t(a,i,u,1)>>>0}return g=u,a}var v=null;function h(){return(null===v||!0===v.buffer.detached||void 0===v.buffer.detached&&v.buffer!==o.memory.buffer)&&(v=new DataView(o.memory.buffer)),v}function m(e,n,t,r){var i=y(e,o.__wbindgen_malloc,o.__wbindgen_realloc),a=g;o.process_task(i,a,n,t,r)}function x(e,n){return(0,a._)(function(){var t,r,o;return(0,u.__generator)(this,function(i){switch(i.label){case 0:if(!("function"==typeof Response&&e instanceof Response))return[3,7];if("function"!=typeof WebAssembly.instantiateStreaming)return[3,4];i.label=1;case 1:return i.trys.push([1,3,,4]),[4,WebAssembly.instantiateStreaming(e,n)];case 2:case 6:return[2,i.sent()];case 3:if(t=i.sent(),"application/wasm"!=e.headers.get("Content-Type"))console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",t);else throw t;return[3,4];case 4:return[4,e.arrayBuffer()];case 5:return r=i.sent(),[4,WebAssembly.instantiate(r,n)];case 7:return[4,WebAssembly.instantiate(e,n)];case 8:if((o=i.sent())instanceof WebAssembly.Instance)return[2,{instance:o,module:e}];return[2,o];case 9:return[2]}})})()}function S(){var e={};return e.wbg={},e.wbg.__wbg_call_672a4d21634d4a24=function(){return f(function(e,n){return e.call(n)},arguments)},e.wbg.__wbg_instanceof_DedicatedWorkerGlobalScope_a688e81380e34e02=function(e){var n;try{n=e instanceof DedicatedWorkerGlobalScope}catch(e){n=!1}return n},e.wbg.__wbg_new_405e22f390576ce2=function(){return{}},e.wbg.__wbg_newnoargs_105ed471475aaf50=function(e,n){return Function(_(e,n))},e.wbg.__wbg_postMessage_83a8d58d3fcb6c13=function(){return f(function(e,n){e.postMessage(n)},arguments)},e.wbg.__wbg_set_3f1d0b984ed272ed=function(e,n,t){e[n]=t},e.wbg.__wbg_static_accessor_GLOBAL_88a902d13a557d07=function(){var e=void 0===t?null:t;return null==e?0:s(e)},e.wbg.__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0=function(){var e="undefined"==typeof globalThis?null:globalThis;return null==e?0:s(e)},e.wbg.__wbg_static_accessor_SELF_37c5d418e4bf5819=function(){var e="undefined"==typeof self?null:self;return null==e?0:s(e)},e.wbg.__wbg_static_accessor_WINDOW_5de37043a91a9c40=function(){var e="undefined"==typeof window?null:window;return null==e?0:s(e)},e.wbg.__wbindgen_debug_string=function(e,n){var t=y(function e(n){var t,r=void 0===n?"undefined":(0,c._)(n);if("number"==r||"boolean"==r||null==n)return"".concat(n);if("string"==r)return'"'.concat(n,'"');if("symbol"==r){var o=n.description;return null==o?"Symbol":"Symbol(".concat(o,")")}if("function"==r){var i=n.name;return"string"==typeof i&&i.length>0?"Function(".concat(i,")"):"Function"}if(Array.isArray(n)){var a=n.length,u="[";a>0&&(u+=e(n[0]));for(var s=1;s<a;s++)u+=", "+e(n[s]);return u+"]"}var f=/\[object ([^\]]+)\]/.exec(toString.call(n));if(!f||!(f.length>1))return toString.call(n);if("Object"==(t=f[1]))try{return"Object("+JSON.stringify(n)+")"}catch(e){return"Object"}return n instanceof Error?"".concat(n.name,": ").concat(n.message,"\n").concat(n.stack):t}(n),o.__wbindgen_malloc,o.__wbindgen_realloc),r=g;h().setInt32(e+4,r,!0),h().setInt32(e+0,t,!0)},e.wbg.__wbindgen_init_externref_table=function(){var e=o.__wbindgen_export_2,n=e.grow(4);e.set(0,void 0),e.set(n+0,void 0),e.set(n+1,null),e.set(n+2,!0),e.set(n+3,!1)},e.wbg.__wbindgen_is_undefined=function(e){return void 0===e},e.wbg.__wbindgen_number_new=function(e){return e},e.wbg.__wbindgen_string_new=function(e,n){return _(e,n)},e.wbg.__wbindgen_throw=function(e,n){throw Error(_(e,n))},e}function O(e,n){return o=e.exports,A.__wbindgen_wasm_module=n,v=null,d=null,o.__wbindgen_start(),o}function E(e){if(void 0!==o)return o;void 0!==e&&(Object.getPrototypeOf(e)===Object.prototype?e=e.module:console.warn("using deprecated parameters for `initSync()`; pass a single object instead"));var n=S();return e instanceof WebAssembly.Module||(e=new WebAssembly.Module(e)),O(new WebAssembly.Instance(e,n),e)}function A(e){return(0,a._)(function(){var n,t;return(0,u.__generator)(this,function(r){switch(r.label){case 0:if(void 0!==o)return[2,o];return void 0!==e&&(Object.getPrototypeOf(e)===Object.prototype?e=e.module_or_path:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),void 0===e&&(e=new URL(i("hmXoP"))),n=S(),("string"==typeof e||"function"==typeof Request&&e instanceof Request||"function"==typeof URL&&e instanceof URL)&&(e=fetch(e)),[4,e];case 1:return[4,x.apply(void 0,[r.sent(),n])];case 2:return[2,O((t=r.sent()).instance,t.module)]}})})()}}),a("hmXoP",function(e,t){e.exports=function(e){if(e=i.i?.[e]||e,!n)try{throw Error()}catch(r){var t=(""+r.stack).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/[^)\n]+/g);if(!t)return"./"+e;n=t[0]}return new URL("./"+e,n).toString()}("4RDch")}),Object.assign(i.i??={},{"4RDch":"pow_bg.e56bb07e.wasm"}),i("2838M")}(); +//# sourceMappingURL=pow.worker.8c3779b0.js.map diff --git a/vendor/github.com/sjtug/cerberus/web/dist/pow.worker.8c3779b0.js.map b/vendor/github.com/sjtug/cerberus/web/dist/pow.worker.8c3779b0.js.map new file mode 100644 index 0000000..bfbf5c6 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/dist/pow.worker.8c3779b0.js.map @@ -0,0 +1 @@ +{"mappings":"C,A,W,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,I,E,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,I,E,E,Q,C,E,Q,S,C,C,C,E,I,E,E,S,E,E,S,E,E,SCEA,iBAAiB,UAAW,SAAO,CAAnC,E,M,A,C,E,E,C,A,E,W,M,A,C,E,E,W,A,E,I,C,S,C,E,MACI,AAAA,CAAA,EAAA,EAAA,QAAO,AAAP,EAAS,CAAE,OAAQ,EAAM,IAAI,CAAC,UAAU,AAAC,GACzC,AAAA,CAAA,EAAA,EAAA,YAAW,AAAX,EAAa,EAAM,IAAI,CAAC,IAAI,CAAE,EAAM,IAAI,CAAC,UAAU,CAAE,EAAM,IAAI,CAAC,KAAK,CAAE,EAAM,IAAI,CAAC,OAAO,E,C,E,A,EAC7F,I,E,G,E,Q,S,C,C,C,ECLA,SAAS,EAAmB,CAAG,CAAE,CAAO,CAAE,CAAM,CAAE,CAAK,CAAE,CAAM,CAAE,CAAG,CAAE,CAAG,EACrE,GAAI,CACA,IAAI,EAAO,CAAG,CAAC,EAAI,CAAC,GAChB,EAAQ,EAAK,KAAK,AAC1B,CAAE,MAAO,EAAO,CACZ,EAAO,GACP,MACJ,CACI,EAAK,IAAI,CAAE,EAAQ,GAClB,QAAQ,OAAO,CAAC,GAAO,IAAI,CAAC,EAAO,EAC5C,CACA,SAAS,EAAoB,CAAE,EAC3B,OAAO,WACH,IAAI,EAAO,IAAI,CAAE,EAAO,UAExB,OAAO,IAAI,QAAQ,SAAS,CAAO,CAAE,CAAM,EACvC,IAAI,EAAM,EAAG,KAAK,CAAC,EAAM,GAEzB,SAAS,EAAM,CAAK,EAChB,EAAmB,EAAK,EAAS,EAAQ,EAAO,EAAQ,OAAQ,EACpE,CAEA,SAAS,EAAO,CAAG,EACf,EAAmB,EAAK,EAAS,EAAQ,EA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","sources":["<anon>","pow.worker.js","../../../../../.cache/pnpm/dlx/7bc3f1fc538288d74bbdf957652e2bfde452102023bb0e338840e100a321b1b1/196f9d99867-3d05/node_modules/.pnpm/@swc+helpers@0.5.17/node_modules/@swc/helpers/esm/_async_to_generator.js","../../../../../.cache/pnpm/dlx/7bc3f1fc538288d74bbdf957652e2bfde452102023bb0e338840e100a321b1b1/196f9d99867-3d05/node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.js","../../../../../.cache/pnpm/dlx/7bc3f1fc538288d74bbdf957652e2bfde452102023bb0e338840e100a321b1b1/196f9d99867-3d05/node_modules/.pnpm/@swc+helpers@0.5.17/node_modules/@swc/helpers/esm/_type_of.js","node_modules/.pnpm/pow@file+..+..+pow+pkg/node_modules/pow/pow.js","../../../../../.cache/pnpm/dlx/7bc3f1fc538288d74bbdf957652e2bfde452102023bb0e338840e100a321b1b1/196f9d99867-3d05/node_modules/.pnpm/@parcel+runtime-js@2.15.1_@parcel+core@2.15.1_@swc+helpers@0.5.17_/node_modules/@parcel/runtime-js/lib/runtime-98c5b16e56b1727d.js","../../../../../.cache/pnpm/dlx/7bc3f1fc538288d74bbdf957652e2bfde452102023bb0e338840e100a321b1b1/196f9d99867-3d05/node_modules/.pnpm/@parcel+runtime-js@2.15.1_@parcel+core@2.15.1_@swc+helpers@0.5.17_/node_modules/@parcel/runtime-js/lib/runtime-60527c1f2b254f89.js"],"sourcesContent":["(function () {\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n var $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n \nvar $parcel$bundleURL;\nfunction $parcel$resolve(url) {\n url = parcelRequire.i?.[url] || url;\n if (!$parcel$bundleURL) {\n try {\n throw new Error();\n } catch (err) {\n var matches = ('' + err.stack).match(\n /(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^)\\n]+/g,\n );\n if (matches) {\n $parcel$bundleURL = matches[0];\n } else {\n return $parcel$distDir + url;\n }\n }\n }\n return new URL($parcel$distDir + url, $parcel$bundleURL).toString();\n}\n\nfunction $parcel$extendImportMap(map) {\n Object.assign(parcelRequire.i ??= {}, map);\n}\nvar $parcel$distDir = \"./\";\n\nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequireec24\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequireec24\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nparcelRegister(\"2838M\", function(module, exports) {\n\nvar $gi2E2 = parcelRequire(\"gi2E2\");\n\nvar $769Cg = parcelRequire(\"769Cg\");\n\nvar $itvzF = parcelRequire(\"itvzF\");\naddEventListener('message', function(event) {\n return (/*#__PURE__*/ 0, /*#__PURE__*/ $gi2E2._)(function() {\n return (0, $769Cg.__generator)(this, function(_state) {\n (0, $itvzF.initSync)({\n module: event.data.wasmModule\n });\n (0, $itvzF.process_task)(event.data.data, event.data.difficulty, event.data.nonce, event.data.threads);\n return [\n 2\n ];\n });\n })();\n});\n\n});\nparcelRegister(\"gi2E2\", function(module, exports) {\n\n$parcel$export(module.exports, \"_\", function () { return $bdc060f6523371e4$export$71511d61b312f219; });\nfunction $bdc060f6523371e4$var$asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nfunction $bdc060f6523371e4$export$71511d61b312f219(fn) {\n return function() {\n var self = this, args = arguments;\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n $bdc060f6523371e4$var$asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n $bdc060f6523371e4$var$asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\n\n});\n\nparcelRegister(\"769Cg\", function(module, exports) {\n\n$parcel$export(module.exports, \"__generator\", function () { return $52b08d845193ff78$export$67ebef60e6f28a6; });\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */ \nvar $eXCMu = parcelRequire(\"eXCMu\");\nvar $52b08d845193ff78$var$extendStatics = function extendStatics1(d, b) {\n $52b08d845193ff78$var$extendStatics = Object.setPrototypeOf || ({\n __proto__: []\n }) instanceof Array && function(d, b) {\n d.__proto__ = b;\n } || function(d, b) {\n for(var p in b)if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n return $52b08d845193ff78$var$extendStatics(d, b);\n};\nfunction $52b08d845193ff78$export$a8ba968b8961cb8a(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n $52b08d845193ff78$var$extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar $52b08d845193ff78$export$18ce0697a983be9b = function __assign1() {\n $52b08d845193ff78$export$18ce0697a983be9b = Object.assign || function __assign(t) {\n for(var s, i = 1, n = arguments.length; i < n; i++){\n s = arguments[i];\n for(var p in s)if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return $52b08d845193ff78$export$18ce0697a983be9b.apply(this, arguments);\n};\nfunction $52b08d845193ff78$export$3c9a16f847548506(s, e) {\n var t = {};\n for(var p in s)if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") {\n for(var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++)if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction $52b08d845193ff78$export$29e00dfd3077644b(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if ((typeof Reflect === \"undefined\" ? \"undefined\" : (0, $eXCMu._)(Reflect)) === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction $52b08d845193ff78$export$d5ad3fd78186038f(paramIndex, decorator) {\n return function(target, key) {\n decorator(target, key, paramIndex);\n };\n}\nfunction $52b08d845193ff78$export$3a84e1ae4e97e9b0(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) {\n if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\");\n return f;\n }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for(var i = decorators.length - 1; i >= 0; i--){\n var context = {};\n for(var p in contextIn)context[p] = p === \"access\" ? {} : contextIn[p];\n for(var p in contextIn.access)context.access[p] = contextIn.access[p];\n context.addInitializer = function(f) {\n if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\");\n extraInitializers.push(accept(f || null));\n };\n var result = (0, decorators[i])(kind === \"accessor\" ? {\n get: descriptor.get,\n set: descriptor.set\n } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || (typeof result === \"undefined\" ? \"undefined\" : (0, $eXCMu._)(result)) !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n } else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n}\nfunction $52b08d845193ff78$export$d831c04e792af3d(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for(var i = 0; i < initializers.length; i++)value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n return useValue ? value : void 0;\n}\nfunction $52b08d845193ff78$export$6a2a36740a146cb8(x) {\n return (typeof x === \"undefined\" ? \"undefined\" : (0, $eXCMu._)(x)) === \"symbol\" ? x : \"\".concat(x);\n}\nfunction $52b08d845193ff78$export$d1a06452d3489bc7(f, name, prefix) {\n if ((typeof name === \"undefined\" ? \"undefined\" : (0, $eXCMu._)(name)) === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", {\n configurable: true,\n value: prefix ? \"\".concat(prefix, \" \", name) : name\n });\n}\nfunction $52b08d845193ff78$export$f1db080c865becb9(metadataKey, metadataValue) {\n if ((typeof Reflect === \"undefined\" ? \"undefined\" : (0, $eXCMu._)(Reflect)) === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\nfunction $52b08d845193ff78$export$1050f835b63b671e(thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function(resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function(resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\nfunction $52b08d845193ff78$export$67ebef60e6f28a6(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n return this;\n }), g;\n function verb(n) {\n return function(v) {\n return step([\n n,\n v\n ]);\n };\n }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while(g && (g = 0, op[0] && (_ = 0)), _)try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [\n op[0] & 2,\n t.value\n ];\n switch(op[0]){\n case 0:\n case 1:\n t = op;\n break;\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n case 5:\n _.label++;\n y = op[1];\n op = [\n 0\n ];\n continue;\n case 7:\n op = _.ops.pop();\n _.trys.pop();\n continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n if (t && _.label < t[2]) {\n _.label = t[2];\n _.ops.push(op);\n break;\n }\n if (t[2]) _.ops.pop();\n _.trys.pop();\n continue;\n }\n op = body.call(thisArg, _);\n } catch (e) {\n op = [\n 6,\n e\n ];\n y = 0;\n } finally{\n f = t = 0;\n }\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\nvar $52b08d845193ff78$export$45d3717a4c69092e = Object.create ? function __createBinding(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {\n enumerable: true,\n get: function get() {\n return m[k];\n }\n };\n Object.defineProperty(o, k2, desc);\n} : function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n};\nfunction $52b08d845193ff78$export$f33643c0debef087(m, o) {\n for(var p in m)if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) $52b08d845193ff78$export$45d3717a4c69092e(o, m, p);\n}\nfunction $52b08d845193ff78$export$19a8beecd37a4c45(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function next() {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction $52b08d845193ff78$export$8d051b38c9118094(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while((n === void 0 || n-- > 0) && !(r = i.next()).done)ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally{\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally{\n if (e) throw e.error;\n }\n }\n return ar;\n}\nfunction $52b08d845193ff78$export$afc72e2116322959() {\n for(var ar = [], i = 0; i < arguments.length; i++)ar = ar.concat($52b08d845193ff78$export$8d051b38c9118094(arguments[i]));\n return ar;\n}\nfunction $52b08d845193ff78$export$6388937ca91ccae8() {\n for(var s = 0, i = 0, il = arguments.length; i < il; i++)s += arguments[i].length;\n for(var r = Array(s), k = 0, i = 0; i < il; i++)for(var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)r[k] = a[j];\n return r;\n}\nfunction $52b08d845193ff78$export$1216008129fb82ed(to, from, pack) {\n if (pack || arguments.length === 2) {\n for(var i = 0, l = from.length, ar; i < l; i++)if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\nfunction $52b08d845193ff78$export$10c90e4f7922046c(v) {\n return this instanceof $52b08d845193ff78$export$10c90e4f7922046c ? (this.v = v, this) : new $52b08d845193ff78$export$10c90e4f7922046c(v);\n}\nfunction $52b08d845193ff78$export$e427f37a30a4de9b(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function() {\n return this;\n }, i;\n function awaitReturn(f) {\n return function(v) {\n return Promise.resolve(v).then(f, reject);\n };\n }\n function verb(n, f) {\n if (g[n]) {\n i[n] = function(v) {\n return new Promise(function(a, b) {\n q.push([\n n,\n v,\n a,\n b\n ]) > 1 || resume(n, v);\n });\n };\n if (f) i[n] = f(i[n]);\n }\n }\n function resume(n, v) {\n try {\n step(g[n](v));\n } catch (e) {\n settle(q[0][3], e);\n }\n }\n function step(r) {\n r.value instanceof $52b08d845193ff78$export$10c90e4f7922046c ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);\n }\n function fulfill(value) {\n resume(\"next\", value);\n }\n function reject(value) {\n resume(\"throw\", value);\n }\n function settle(f, v) {\n if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);\n }\n}\nfunction $52b08d845193ff78$export$bbd80228419bb833(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function(e) {\n throw e;\n }), verb(\"return\"), i[Symbol.iterator] = function() {\n return this;\n }, i;\n function verb(n, f) {\n i[n] = o[n] ? function(v) {\n return (p = !p) ? {\n value: $52b08d845193ff78$export$10c90e4f7922046c(o[n](v)),\n done: false\n } : f ? f(v) : v;\n } : f;\n }\n}\nfunction $52b08d845193ff78$export$e3b29a3d6162315f(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof $52b08d845193ff78$export$19a8beecd37a4c45 === \"function\" ? $52b08d845193ff78$export$19a8beecd37a4c45(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function() {\n return this;\n }, i);\n function verb(n) {\n i[n] = o[n] && function(v) {\n return new Promise(function(resolve, reject) {\n v = o[n](v), settle(resolve, reject, v.done, v.value);\n });\n };\n }\n function settle(resolve, reject, d, v) {\n Promise.resolve(v).then(function(v) {\n resolve({\n value: v,\n done: d\n });\n }, reject);\n }\n}\nfunction $52b08d845193ff78$export$4fb47efe1390b86f(cooked, raw) {\n if (Object.defineProperty) Object.defineProperty(cooked, \"raw\", {\n value: raw\n });\n else cooked.raw = raw;\n return cooked;\n}\nvar $52b08d845193ff78$var$__setModuleDefault = Object.create ? function __setModuleDefault(o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function(o, v) {\n o[\"default\"] = v;\n};\nvar $52b08d845193ff78$var$ownKeys = function ownKeys1(o) {\n $52b08d845193ff78$var$ownKeys = Object.getOwnPropertyNames || function(o) {\n var ar = [];\n for(var k in o)if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return $52b08d845193ff78$var$ownKeys(o);\n};\nfunction $52b08d845193ff78$export$c21735bcef00d192(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) {\n for(var k = $52b08d845193ff78$var$ownKeys(mod), i = 0; i < k.length; i++)if (k[i] !== \"default\") $52b08d845193ff78$export$45d3717a4c69092e(result, mod, k[i]);\n }\n $52b08d845193ff78$var$__setModuleDefault(result, mod);\n return result;\n}\nfunction $52b08d845193ff78$export$da59b14a69baef04(mod) {\n return mod && mod.__esModule ? mod : {\n default: mod\n };\n}\nfunction $52b08d845193ff78$export$d5dcaf168c640c35(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nfunction $52b08d845193ff78$export$d40a35129aaff81f(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;\n}\nfunction $52b08d845193ff78$export$81fdc39f203e4e04(state, receiver) {\n if (receiver === null || (typeof receiver === \"undefined\" ? \"undefined\" : (0, $eXCMu._)(receiver)) !== \"object\" && typeof receiver !== \"function\") throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\nfunction $52b08d845193ff78$export$88ac25d8e944e405(env, value, async) {\n if (value !== null && value !== void 0) {\n if ((typeof value === \"undefined\" ? \"undefined\" : (0, $eXCMu._)(value)) !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function dispose() {\n try {\n inner.call(this);\n } catch (e) {\n return Promise.reject(e);\n }\n };\n env.stack.push({\n value: value,\n dispose: dispose,\n async: async\n });\n } else if (async) env.stack.push({\n async: true\n });\n return value;\n}\nvar $52b08d845193ff78$var$_SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function _SuppressedError(error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\nfunction $52b08d845193ff78$export$8f076105dc360e92(env) {\n function fail(e) {\n env.error = env.hasError ? new $52b08d845193ff78$var$_SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while(r = env.stack.pop())try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {\n fail(e);\n return next();\n });\n } else s |= 1;\n } catch (e) {\n fail(e);\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\nfunction $52b08d845193ff78$export$889dfb5d17574b0b(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function(m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : d + ext + \".\" + cm.toLowerCase() + \"js\";\n });\n return path;\n}\nvar $52b08d845193ff78$export$2e2bcd8739ae039 = {\n __extends: $52b08d845193ff78$export$a8ba968b8961cb8a,\n __assign: $52b08d845193ff78$export$18ce0697a983be9b,\n __rest: $52b08d845193ff78$export$3c9a16f847548506,\n __decorate: $52b08d845193ff78$export$29e00dfd3077644b,\n __param: $52b08d845193ff78$export$d5ad3fd78186038f,\n __esDecorate: $52b08d845193ff78$export$3a84e1ae4e97e9b0,\n __runInitializers: $52b08d845193ff78$export$d831c04e792af3d,\n __propKey: $52b08d845193ff78$export$6a2a36740a146cb8,\n __setFunctionName: $52b08d845193ff78$export$d1a06452d3489bc7,\n __metadata: $52b08d845193ff78$export$f1db080c865becb9,\n __awaiter: $52b08d845193ff78$export$1050f835b63b671e,\n __generator: $52b08d845193ff78$export$67ebef60e6f28a6,\n __createBinding: $52b08d845193ff78$export$45d3717a4c69092e,\n __exportStar: $52b08d845193ff78$export$f33643c0debef087,\n __values: $52b08d845193ff78$export$19a8beecd37a4c45,\n __read: $52b08d845193ff78$export$8d051b38c9118094,\n __spread: $52b08d845193ff78$export$afc72e2116322959,\n __spreadArrays: $52b08d845193ff78$export$6388937ca91ccae8,\n __spreadArray: $52b08d845193ff78$export$1216008129fb82ed,\n __await: $52b08d845193ff78$export$10c90e4f7922046c,\n __asyncGenerator: $52b08d845193ff78$export$e427f37a30a4de9b,\n __asyncDelegator: $52b08d845193ff78$export$bbd80228419bb833,\n __asyncValues: $52b08d845193ff78$export$e3b29a3d6162315f,\n __makeTemplateObject: $52b08d845193ff78$export$4fb47efe1390b86f,\n __importStar: $52b08d845193ff78$export$c21735bcef00d192,\n __importDefault: $52b08d845193ff78$export$da59b14a69baef04,\n __classPrivateFieldGet: $52b08d845193ff78$export$d5dcaf168c640c35,\n __classPrivateFieldSet: $52b08d845193ff78$export$d40a35129aaff81f,\n __classPrivateFieldIn: $52b08d845193ff78$export$81fdc39f203e4e04,\n __addDisposableResource: $52b08d845193ff78$export$88ac25d8e944e405,\n __disposeResources: $52b08d845193ff78$export$8f076105dc360e92,\n __rewriteRelativeImportExtension: $52b08d845193ff78$export$889dfb5d17574b0b\n};\n\n});\nparcelRegister(\"eXCMu\", function(module, exports) {\n\n$parcel$export(module.exports, \"_\", function () { return $ae44a88405106244$export$71511d61b312f219; });\nfunction $ae44a88405106244$export$71511d61b312f219(obj) {\n \"@swc/helpers - typeof\";\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\n\n});\n\n\nparcelRegister(\"itvzF\", function(module, exports) {\n\n$parcel$export(module.exports, \"process_task\", function () { return $d7336d67281c62aa$export$fcb6bce1d050ce61; });\n$parcel$export(module.exports, \"initSync\", function () { return $d7336d67281c62aa$export$2ec80ee76a9348bf; });\n\nvar $gi2E2 = parcelRequire(\"gi2E2\");\n\nvar $eXCMu = parcelRequire(\"eXCMu\");\n\nvar $769Cg = parcelRequire(\"769Cg\");\nvar $d7336d67281c62aa$var$wasm;\nfunction $d7336d67281c62aa$var$addToExternrefTable0(obj) {\n var idx = $d7336d67281c62aa$var$wasm.__externref_table_alloc();\n $d7336d67281c62aa$var$wasm.__wbindgen_export_2.set(idx, obj);\n return idx;\n}\nfunction $d7336d67281c62aa$var$handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n var idx = $d7336d67281c62aa$var$addToExternrefTable0(e);\n $d7336d67281c62aa$var$wasm.__wbindgen_exn_store(idx);\n }\n}\nvar $d7336d67281c62aa$var$cachedTextDecoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', {\n ignoreBOM: true,\n fatal: true\n}) : {\n decode: function() {\n throw Error('TextDecoder not available');\n }\n};\nif (typeof TextDecoder !== 'undefined') $d7336d67281c62aa$var$cachedTextDecoder.decode();\nvar $d7336d67281c62aa$var$cachedUint8ArrayMemory0 = null;\nfunction $d7336d67281c62aa$var$getUint8ArrayMemory0() {\n if ($d7336d67281c62aa$var$cachedUint8ArrayMemory0 === null || $d7336d67281c62aa$var$cachedUint8ArrayMemory0.byteLength === 0) $d7336d67281c62aa$var$cachedUint8ArrayMemory0 = new Uint8Array($d7336d67281c62aa$var$wasm.memory.buffer);\n return $d7336d67281c62aa$var$cachedUint8ArrayMemory0;\n}\nfunction $d7336d67281c62aa$var$getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return $d7336d67281c62aa$var$cachedTextDecoder.decode($d7336d67281c62aa$var$getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\nfunction $d7336d67281c62aa$var$isLikeNone(x) {\n return x === undefined || x === null;\n}\nfunction $d7336d67281c62aa$var$debugString(val) {\n // primitive types\n var type = typeof val === \"undefined\" ? \"undefined\" : (0, $eXCMu._)(val);\n if (type == 'number' || type == 'boolean' || val == null) return \"\".concat(val);\n if (type == 'string') return '\"'.concat(val, '\"');\n if (type == 'symbol') {\n var description = val.description;\n if (description == null) return 'Symbol';\n else return \"Symbol(\".concat(description, \")\");\n }\n if (type == 'function') {\n var name = val.name;\n if (typeof name == 'string' && name.length > 0) return \"Function(\".concat(name, \")\");\n else return 'Function';\n }\n // objects\n if (Array.isArray(val)) {\n var length = val.length;\n var debug = '[';\n if (length > 0) debug += $d7336d67281c62aa$var$debugString(val[0]);\n for(var i = 1; i < length; i++)debug += ', ' + $d7336d67281c62aa$var$debugString(val[i]);\n debug += ']';\n return debug;\n }\n // Test for built-in\n var builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n var className;\n if (builtInMatches && builtInMatches.length > 1) className = builtInMatches[1];\n else // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n if (className == 'Object') // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n // errors\n if (val instanceof Error) return \"\".concat(val.name, \": \").concat(val.message, \"\\n\").concat(val.stack);\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\nvar $d7336d67281c62aa$var$WASM_VECTOR_LEN = 0;\nvar $d7336d67281c62aa$var$cachedTextEncoder = typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : {\n encode: function() {\n throw Error('TextEncoder not available');\n }\n};\nvar $d7336d67281c62aa$var$encodeString = typeof $d7336d67281c62aa$var$cachedTextEncoder.encodeInto === 'function' ? function encodeString(arg, view) {\n return $d7336d67281c62aa$var$cachedTextEncoder.encodeInto(arg, view);\n} : function(arg, view) {\n var buf = $d7336d67281c62aa$var$cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n};\nfunction $d7336d67281c62aa$var$passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n var buf = $d7336d67281c62aa$var$cachedTextEncoder.encode(arg);\n var ptr = malloc(buf.length, 1) >>> 0;\n $d7336d67281c62aa$var$getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n $d7336d67281c62aa$var$WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n var len = arg.length;\n var ptr1 = malloc(len, 1) >>> 0;\n var mem = $d7336d67281c62aa$var$getUint8ArrayMemory0();\n var offset = 0;\n for(; offset < len; offset++){\n var code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr1 + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) arg = arg.slice(offset);\n ptr1 = realloc(ptr1, len, len = offset + arg.length * 3, 1) >>> 0;\n var view = $d7336d67281c62aa$var$getUint8ArrayMemory0().subarray(ptr1 + offset, ptr1 + len);\n var ret = $d7336d67281c62aa$var$encodeString(arg, view);\n offset += ret.written;\n ptr1 = realloc(ptr1, len, offset, 1) >>> 0;\n }\n $d7336d67281c62aa$var$WASM_VECTOR_LEN = offset;\n return ptr1;\n}\nvar $d7336d67281c62aa$var$cachedDataViewMemory0 = null;\nfunction $d7336d67281c62aa$var$getDataViewMemory0() {\n if ($d7336d67281c62aa$var$cachedDataViewMemory0 === null || $d7336d67281c62aa$var$cachedDataViewMemory0.buffer.detached === true || $d7336d67281c62aa$var$cachedDataViewMemory0.buffer.detached === undefined && $d7336d67281c62aa$var$cachedDataViewMemory0.buffer !== $d7336d67281c62aa$var$wasm.memory.buffer) $d7336d67281c62aa$var$cachedDataViewMemory0 = new DataView($d7336d67281c62aa$var$wasm.memory.buffer);\n return $d7336d67281c62aa$var$cachedDataViewMemory0;\n}\nfunction $d7336d67281c62aa$export$b3571188c770cc5a() {\n $d7336d67281c62aa$var$wasm.start();\n}\nfunction $d7336d67281c62aa$export$fcb6bce1d050ce61(data, difficulty, thread_id, threads) {\n var ptr0 = $d7336d67281c62aa$var$passStringToWasm0(data, $d7336d67281c62aa$var$wasm.__wbindgen_malloc, $d7336d67281c62aa$var$wasm.__wbindgen_realloc);\n var len0 = $d7336d67281c62aa$var$WASM_VECTOR_LEN;\n $d7336d67281c62aa$var$wasm.process_task(ptr0, len0, difficulty, thread_id, threads);\n}\nfunction $d7336d67281c62aa$var$__wbg_load(module, imports) {\n return (/*#__PURE__*/ 0, /*#__PURE__*/ $gi2E2._)(function() {\n var e, bytes, instance;\n return (0, $769Cg.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n if (!(typeof Response === 'function' && module instanceof Response)) return [\n 3,\n 7\n ];\n if (!(typeof WebAssembly.instantiateStreaming === 'function')) return [\n 3,\n 4\n ];\n _state.label = 1;\n case 1:\n _state.trys.push([\n 1,\n 3,\n ,\n 4\n ]);\n return [\n 4,\n WebAssembly.instantiateStreaming(module, imports)\n ];\n case 2:\n return [\n 2,\n _state.sent()\n ];\n case 3:\n e = _state.sent();\n if (module.headers.get('Content-Type') != 'application/wasm') console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n else throw e;\n return [\n 3,\n 4\n ];\n case 4:\n return [\n 4,\n module.arrayBuffer()\n ];\n case 5:\n bytes = _state.sent();\n return [\n 4,\n WebAssembly.instantiate(bytes, imports)\n ];\n case 6:\n return [\n 2,\n _state.sent()\n ];\n case 7:\n return [\n 4,\n WebAssembly.instantiate(module, imports)\n ];\n case 8:\n instance = _state.sent();\n if (instance instanceof WebAssembly.Instance) return [\n 2,\n {\n instance: instance,\n module: module\n }\n ];\n else return [\n 2,\n instance\n ];\n _state.label = 9;\n case 9:\n return [\n 2\n ];\n }\n });\n })();\n}\nfunction $d7336d67281c62aa$var$__wbg_get_imports() {\n var imports = {};\n imports.wbg = {};\n imports.wbg.__wbg_call_672a4d21634d4a24 = function() {\n return $d7336d67281c62aa$var$handleError(function(arg0, arg1) {\n var ret = arg0.call(arg1);\n return ret;\n }, arguments);\n };\n imports.wbg.__wbg_instanceof_DedicatedWorkerGlobalScope_a688e81380e34e02 = function(arg0) {\n var result;\n try {\n result = arg0 instanceof DedicatedWorkerGlobalScope;\n } catch (_) {\n result = false;\n }\n var ret = result;\n return ret;\n };\n imports.wbg.__wbg_new_405e22f390576ce2 = function() {\n var ret = new Object();\n return ret;\n };\n imports.wbg.__wbg_newnoargs_105ed471475aaf50 = function(arg0, arg1) {\n var ret = new Function($d7336d67281c62aa$var$getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_postMessage_83a8d58d3fcb6c13 = function() {\n return $d7336d67281c62aa$var$handleError(function(arg0, arg1) {\n arg0.postMessage(arg1);\n }, arguments);\n };\n imports.wbg.__wbg_set_3f1d0b984ed272ed = function(arg0, arg1, arg2) {\n arg0[arg1] = arg2;\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_88a902d13a557d07 = function() {\n var ret = typeof $parcel$global === 'undefined' ? null : $parcel$global;\n return $d7336d67281c62aa$var$isLikeNone(ret) ? 0 : $d7336d67281c62aa$var$addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0 = function() {\n var ret = typeof globalThis === 'undefined' ? null : globalThis;\n return $d7336d67281c62aa$var$isLikeNone(ret) ? 0 : $d7336d67281c62aa$var$addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_SELF_37c5d418e4bf5819 = function() {\n var ret = typeof self === 'undefined' ? null : self;\n return $d7336d67281c62aa$var$isLikeNone(ret) ? 0 : $d7336d67281c62aa$var$addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_WINDOW_5de37043a91a9c40 = function() {\n var ret = typeof window === 'undefined' ? null : window;\n return $d7336d67281c62aa$var$isLikeNone(ret) ? 0 : $d7336d67281c62aa$var$addToExternrefTable0(ret);\n };\n imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n var ret = $d7336d67281c62aa$var$debugString(arg1);\n var ptr1 = $d7336d67281c62aa$var$passStringToWasm0(ret, $d7336d67281c62aa$var$wasm.__wbindgen_malloc, $d7336d67281c62aa$var$wasm.__wbindgen_realloc);\n var len1 = $d7336d67281c62aa$var$WASM_VECTOR_LEN;\n $d7336d67281c62aa$var$getDataViewMemory0().setInt32(arg0 + 4, len1, true);\n $d7336d67281c62aa$var$getDataViewMemory0().setInt32(arg0 + 0, ptr1, true);\n };\n imports.wbg.__wbindgen_init_externref_table = function() {\n var table = $d7336d67281c62aa$var$wasm.__wbindgen_export_2;\n var offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n };\n imports.wbg.__wbindgen_is_undefined = function(arg0) {\n var ret = arg0 === undefined;\n return ret;\n };\n imports.wbg.__wbindgen_number_new = function(arg0) {\n var ret = arg0;\n return ret;\n };\n imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n var ret = $d7336d67281c62aa$var$getStringFromWasm0(arg0, arg1);\n return ret;\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error($d7336d67281c62aa$var$getStringFromWasm0(arg0, arg1));\n };\n return imports;\n}\nfunction $d7336d67281c62aa$var$__wbg_init_memory(imports, memory) {}\nfunction $d7336d67281c62aa$var$__wbg_finalize_init(instance, module) {\n $d7336d67281c62aa$var$wasm = instance.exports;\n $d7336d67281c62aa$var$__wbg_init.__wbindgen_wasm_module = module;\n $d7336d67281c62aa$var$cachedDataViewMemory0 = null;\n $d7336d67281c62aa$var$cachedUint8ArrayMemory0 = null;\n $d7336d67281c62aa$var$wasm.__wbindgen_start();\n return $d7336d67281c62aa$var$wasm;\n}\nfunction $d7336d67281c62aa$export$2ec80ee76a9348bf(module) {\n if ($d7336d67281c62aa$var$wasm !== undefined) return $d7336d67281c62aa$var$wasm;\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) module = module.module;\n else console.warn('using deprecated parameters for `initSync()`; pass a single object instead');\n }\n var imports = $d7336d67281c62aa$var$__wbg_get_imports();\n $d7336d67281c62aa$var$__wbg_init_memory(imports);\n if (!(module instanceof WebAssembly.Module)) module = new WebAssembly.Module(module);\n var instance = new WebAssembly.Instance(module, imports);\n return $d7336d67281c62aa$var$__wbg_finalize_init(instance, module);\n}\n\nfunction $d7336d67281c62aa$var$__wbg_init(module_or_path) {\n return (/*#__PURE__*/ 0, /*#__PURE__*/ $gi2E2._)(function() {\n var imports, _ref, instance, module;\n return (0, $769Cg.__generator)(this, function(_state) {\n switch(_state.label){\n case 0:\n if ($d7336d67281c62aa$var$wasm !== undefined) return [\n 2,\n $d7336d67281c62aa$var$wasm\n ];\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) module_or_path = module_or_path.module_or_path;\n else console.warn('using deprecated parameters for the initialization function; pass a single object instead');\n }\n if (typeof module_or_path === 'undefined') module_or_path = new URL((parcelRequire(\"hmXoP\")));\n imports = $d7336d67281c62aa$var$__wbg_get_imports();\n if (typeof module_or_path === 'string' || typeof Request === 'function' && module_or_path instanceof Request || typeof URL === 'function' && module_or_path instanceof URL) module_or_path = fetch(module_or_path);\n $d7336d67281c62aa$var$__wbg_init_memory(imports);\n return [\n 4,\n module_or_path\n ];\n case 1:\n return [\n 4,\n $d7336d67281c62aa$var$__wbg_load.apply(void 0, [\n _state.sent(),\n imports\n ])\n ];\n case 2:\n _ref = _state.sent(), instance = _ref.instance, module = _ref.module;\n return [\n 2,\n $d7336d67281c62aa$var$__wbg_finalize_init(instance, module)\n ];\n }\n });\n })();\n}\nvar $d7336d67281c62aa$export$2e2bcd8739ae039 = $d7336d67281c62aa$var$__wbg_init;\n\n});\nparcelRegister(\"hmXoP\", function(module, exports) {\nmodule.exports = $parcel$resolve(\"4RDch\");\n\n});\n\n\n\nvar $9e766d59a66d30f2$exports = {};\n$parcel$extendImportMap({\n \"4RDch\": \"pow_bg.e56bb07e.wasm\"\n});\n\n\nparcelRequire(\"2838M\");\n})();\n//# sourceMappingURL=pow.worker.8c3779b0.js.map\n","import { initSync, process_task } from \"pow-wasm\";\n\naddEventListener('message', async (event) => {\n initSync({ module: event.data.wasmModule });\n process_task(event.data.data, event.data.difficulty, event.data.nonce, event.data.threads);\n});\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\nexport { _async_to_generator as _ };\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","function _type_of(obj) {\n \"@swc/helpers - typeof\";\n\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nexport { _type_of as _ };\n","let wasm;\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_export_2.set(idx, obj);\n return idx;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nconst cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );\n\nif (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };\n\nlet cachedUint8ArrayMemory0 = null;\n\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedDataViewMemory0 = null;\n\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nexport function start() {\n wasm.start();\n}\n\n/**\n * @param {string} data\n * @param {number} difficulty\n * @param {number} thread_id\n * @param {number} threads\n */\nexport function process_task(data, difficulty, thread_id, threads) {\n const ptr0 = passStringToWasm0(data, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.process_task(ptr0, len0, difficulty, thread_id, threads);\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg_call_672a4d21634d4a24 = function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_instanceof_DedicatedWorkerGlobalScope_a688e81380e34e02 = function(arg0) {\n let result;\n try {\n result = arg0 instanceof DedicatedWorkerGlobalScope;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_new_405e22f390576ce2 = function() {\n const ret = new Object();\n return ret;\n };\n imports.wbg.__wbg_newnoargs_105ed471475aaf50 = function(arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_postMessage_83a8d58d3fcb6c13 = function() { return handleError(function (arg0, arg1) {\n arg0.postMessage(arg1);\n }, arguments) };\n imports.wbg.__wbg_set_3f1d0b984ed272ed = function(arg0, arg1, arg2) {\n arg0[arg1] = arg2;\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_88a902d13a557d07 = function() {\n const ret = typeof global === 'undefined' ? null : global;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0 = function() {\n const ret = typeof globalThis === 'undefined' ? null : globalThis;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_SELF_37c5d418e4bf5819 = function() {\n const ret = typeof self === 'undefined' ? null : self;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_WINDOW_5de37043a91a9c40 = function() {\n const ret = typeof window === 'undefined' ? null : window;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_export_2;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n ;\n };\n imports.wbg.__wbindgen_is_undefined = function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n };\n imports.wbg.__wbindgen_number_new = function(arg0) {\n const ret = arg0;\n return ret;\n };\n imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n\n return imports;\n}\n\nfunction __wbg_init_memory(imports, memory) {\n\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n\n __wbg_init_memory(imports);\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new URL('pow_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n __wbg_init_memory(imports);\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","module.exports = parcelRequire.resolve(\"4RDch\");","parcelRequire.extendImportMap({\"4RDch\":\"pow_bg.e56bb07e.wasm\"});"],"names":["$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$bundleURL","$parcel$global","globalThis","self","window","global","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","parcelRegister","$gi2E2","$769Cg","$itvzF","addEventListener","event","_","__generator","_state","initSync","data","wasmModule","process_task","difficulty","nonce","threads","$bdc060f6523371e4$var$asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","$bdc060f6523371e4$export$71511d61b312f219","fn","args","arguments","apply","undefined","$52b08d845193ff78$export$67ebef60e6f28a6","thisArg","body","f","y","t","label","sent","trys","ops","g","create","Iterator","prototype","next","verb","Symbol","iterator","op","TypeError","pop","length","push","SuppressedError","$ae44a88405106244$export$71511d61b312f219","obj","constructor","$d7336d67281c62aa$export$fcb6bce1d050ce61","$d7336d67281c62aa$export$2ec80ee76a9348bf","$d7336d67281c62aa$var$wasm","$eXCMu","$d7336d67281c62aa$var$addToExternrefTable0","idx","__externref_table_alloc","__wbindgen_export_2","$d7336d67281c62aa$var$handleError","__wbindgen_exn_store","$d7336d67281c62aa$var$cachedTextDecoder","TextDecoder","ignoreBOM","fatal","decode","$d7336d67281c62aa$var$cachedUint8ArrayMemory0","$d7336d67281c62aa$var$getUint8ArrayMemory0","byteLength","Uint8Array","memory","buffer","$d7336d67281c62aa$var$getStringFromWasm0","ptr","len","subarray","$d7336d67281c62aa$var$WASM_VECTOR_LEN","$d7336d67281c62aa$var$cachedTextEncoder","TextEncoder","encode","$d7336d67281c62aa$var$encodeString","encodeInto","view","buf","read","written","$d7336d67281c62aa$var$passStringToWasm0","malloc","realloc","ptr1","mem","offset","charCodeAt","slice","ret","$d7336d67281c62aa$var$cachedDataViewMemory0","$d7336d67281c62aa$var$getDataViewMemory0","detached","DataView","thread_id","ptr0","__wbindgen_malloc","__wbindgen_realloc","len0","$d7336d67281c62aa$var$__wbg_load","imports","bytes","instance","Response","WebAssembly","instantiateStreaming","headers","console","warn","arrayBuffer","instantiate","Instance","$d7336d67281c62aa$var$__wbg_get_imports","wbg","__wbg_call_672a4d21634d4a24","arg0","arg1","__wbg_instanceof_DedicatedWorkerGlobalScope_a688e81380e34e02","result","DedicatedWorkerGlobalScope","__wbg_new_405e22f390576ce2","__wbg_newnoargs_105ed471475aaf50","Function","__wbg_postMessage_83a8d58d3fcb6c13","postMessage","__wbg_set_3f1d0b984ed272ed","arg2","__wbg_static_accessor_GLOBAL_88a902d13a557d07","$d7336d67281c62aa$var$isLikeNone","x","__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0","__wbg_static_accessor_SELF_37c5d418e4bf5819","__wbg_static_accessor_WINDOW_5de37043a91a9c40","__wbindgen_debug_string","$d7336d67281c62aa$var$debugString","val","className","type","concat","description","name","Array","isArray","debug","i","builtInMatches","exec","toString","JSON","stringify","message","stack","len1","setInt32","__wbindgen_init_externref_table","table","grow","__wbindgen_is_undefined","__wbindgen_number_new","__wbindgen_string_new","__wbindgen_throw","$d7336d67281c62aa$var$__wbg_finalize_init","$d7336d67281c62aa$var$__wbg_init","__wbindgen_wasm_module","__wbindgen_start","getPrototypeOf","Module","module_or_path","_ref","URL","Request","fetch","$parcel$resolve","url","matches","match","$parcel$distDir","assign"],"version":3,"file":"pow.worker.8c3779b0.js.map"}
\ No newline at end of file diff --git a/vendor/github.com/sjtug/cerberus/web/dist/pow_bg.e56bb07e.wasm b/vendor/github.com/sjtug/cerberus/web/dist/pow_bg.e56bb07e.wasm Binary files differnew file mode 100644 index 0000000..c5db5db --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/dist/pow_bg.e56bb07e.wasm diff --git a/vendor/github.com/sjtug/cerberus/web/embed.go b/vendor/github.com/sjtug/cerberus/web/embed.go new file mode 100644 index 0000000..a9179bd --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/embed.go @@ -0,0 +1,8 @@ +package web + +import ( + "embed" +) + +//go:embed dist +var Content embed.FS diff --git a/vendor/github.com/sjtug/cerberus/web/global.css b/vendor/github.com/sjtug/cerberus/web/global.css new file mode 100644 index 0000000..1af3c9b --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/global.css @@ -0,0 +1,6 @@ +@import "tailwindcss" source("."); +@source not "dist"; + +body { + background-color: #f4e9d5; +}
\ No newline at end of file diff --git a/vendor/github.com/sjtug/cerberus/web/index.templ b/vendor/github.com/sjtug/cerberus/web/index.templ new file mode 100644 index 0000000..c02ef69 --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/index.templ @@ -0,0 +1,147 @@ +package web + +import ( + "context" + + "github.com/caddyserver/caddy/v2/modules/caddyhttp" + "github.com/invopop/ctxi18n/i18n" + "github.com/sjtug/cerberus/core" +) + +type contextKeyType int + +const ( + BaseURLCtxKey contextKeyType = iota + VersionCtxKey + LocaleCtxKey +) + +templ T(key string, args ...any) { + { i18n.T(ctx, key, args...) } +} + +templ UnsafeT(key string, args ...any) { + @templ.Raw(i18n.T(ctx, key, args...)) +} + +func GetBaseURL(ctx context.Context) string { + return ctx.Value(BaseURLCtxKey).(string) +} + +func GetVersion(ctx context.Context) string { + return ctx.Value(VersionCtxKey).(string) +} + +func GetLocale(ctx context.Context) string { + return ctx.Value(LocaleCtxKey).(string) +} + +func GetRequestID(ctx context.Context) string { + return caddyhttp.GetVar(ctx, core.VarReqID).(string) +} + +templ Base(title string, header string) { + <!DOCTYPE html> + <html lang="en"> + <head> + <meta charset="UTF-8"/> + <meta name="viewport" content="width=device-width, initial-scale=1.0"/> + <title>{ title }</title> + <link rel="stylesheet" href={ GetBaseURL(ctx) + "/static/global.css?v=" + GetVersion(ctx) }/> + </head> + <body class="min-h-screen flex flex-col items-center justify-center p-4 bg-[#fff8e7]"> + <div class="text-center text-lg my-auto max-w-2xl w-full px-4"> + <h1 id="title" class="text-4xl font-bold mb-6">{ header }</h1> + { children... } + <p class="text-gray-700 mt-4"> + @UnsafeT("footer.author", i18n.M{ + "cerberus": `<a href="https://github.com/SJTUG/cerberus" class="text-amber-600 hover:text-amber-700">Cerberus</a>`, + "sjtug": `<a href="https://sjtug.org" class="text-amber-600 hover:text-amber-700">SJTUG</a>`}) + </p> + <p class="text-gray-700 text-sm"> + @UnsafeT("footer.upstream", i18n.M{ + "anubis": `<a href="https://github.com/TecharoHQ/anubis" class="text-amber-600 hover:text-amber-700">Anubis</a>`, + "techaro": `<a href="https://techaro.lol" class="text-amber-600 hover:text-amber-700">Techaro</a>`}) + </p> + </div> + <p class="text-gray-700 text-sm pt-2"> + request_id: { GetRequestID(ctx) } + </p> + </body> + </html> +} + +templ Challenge(challenge string, difficulty int, nonce uint32, ts int64, signature string) { + {{ + challengeInput := struct { + Challenge string `json:"challenge"` + Difficulty int `json:"difficulty"` + Nonce uint32 `json:"nonce"` + TS int64 `json:"ts"` + Signature string `json:"signature"` + }{challenge, difficulty, nonce, ts, signature} + + baseURL := GetBaseURL(ctx) + version := GetVersion(ctx) + locale := GetLocale(ctx) + metaInput := struct { + BaseURL string `json:"baseURL"` + Version string `json:"version"` + Locale string `json:"locale"` + }{baseURL, version, locale} + + relPath := func(path string) string { + return baseURL + path + "?v=" + version + } + }} + <img id="mascot" src={ relPath("/static/img/mascot-puzzle.png") } alt="Cute anime mascot character" class="mx-auto p-4 mb-2 max-w-64"/> + <div id="status-container"> + <p id="status" class="text-gray-700 mb-1">status</p> + <p id="metrics" class="text-gray-700 mb-1">metrics</p> + <p id="message" class="text-gray-700 mb-2">message</p> + <!-- Progress Bar (hidden in success state) --> + <div id="progress-container" class="w-48 h-6 bg-white rounded-full border-2 border-[#b79ecf] p-1 mt-2 mb-4 mx-auto"> + <div id="progress-bar" class="h-full w-[60%] bg-[#b79ecf] rounded-full transition-all duration-300"></div> + </div> + </div> + <details class="mb-4"> + <summary class="cursor-pointer text-gray-600 hover:text-gray-800"> + @T("challenge.why_seeing") + </summary> + <div class="mt-2 text-base text-gray-600 space-y-2"> + <p> + @UnsafeT("challenge.why_seeing_body.part_1", i18n.M{ + "cerberus": `<a href="https://github.com/SJTUG/cerberus" class="text-amber-600 hover:text-amber-700">Cerberus</a>`, + }) + </p> + <p> + @UnsafeT("challenge.why_seeing_body.part_2", i18n.M{ + "anubis": `<a href="https://github.com/TecharoHQ/anubis" class="text-amber-600 hover:text-amber-700">Anubis</a>`, + "techaro": `<a href="https://techaro.lol" class="text-amber-600 hover:text-amber-700">Techaro</a>`, + }) + </p> + <p> + @UnsafeT("challenge.why_seeing_body.part_3", i18n.M{ + "jshelter": `<a href="https://jshelter.org/" class="text-amber-600 hover:text-amber-700">JShelter</a>`, + }) + </p> + </div> + </details> + <noscript> + <p> + @T("challenge.must_enable_js") + </p> + </noscript> + <script async defer id="challenge-script" x-meta={ templ.JSONString(metaInput) } x-challenge={ templ.JSONString(challengeInput) } src={ relPath("/static/main.js") }></script> +} + +templ Error(message string, description string, mail string) { + <img id="mascot" src={ GetBaseURL(ctx) + "/static/img/mascot-fail.png?v=" + GetVersion(ctx) } alt="Cute anime mascot character with a sad face" class="mx-auto p-4 mb-2 max-w-64"/> + <p id="message" class="text-gray-700 mb-2">{ message }</p> + <p id="description" class="text-gray-700 mb-2">{ description }</p> + if mail != "" { + <p class="text-gray-700 mb-4"> + @UnsafeT("error.contact_us", i18n.M{"mail": `<a href="mailto:` + mail + `" class="text-amber-600 hover:text-amber-700">` + mail + `</a>`}) + </p> + } +} diff --git a/vendor/github.com/sjtug/cerberus/web/index_templ.go b/vendor/github.com/sjtug/cerberus/web/index_templ.go new file mode 100644 index 0000000..5fe31ec --- /dev/null +++ b/vendor/github.com/sjtug/cerberus/web/index_templ.go @@ -0,0 +1,446 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.3.865 +package web + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +import ( + "context" + + "github.com/caddyserver/caddy/v2/modules/caddyhttp" + "github.com/invopop/ctxi18n/i18n" + "github.com/sjtug/cerberus/core" +) + +type contextKeyType int + +const ( + BaseURLCtxKey contextKeyType = iota + VersionCtxKey + LocaleCtxKey +) + +func T(key string, args ...any) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var1 := templ.GetChildren(ctx) + if templ_7745c5c3_Var1 == nil { + templ_7745c5c3_Var1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + var templ_7745c5c3_Var2 string + templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(i18n.T(ctx, key, args...)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/index.templ`, Line: 20, Col: 28} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func UnsafeT(key string, args ...any) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var3 := templ.GetChildren(ctx) + if templ_7745c5c3_Var3 == nil { + templ_7745c5c3_Var3 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templ.Raw(i18n.T(ctx, key, args...)).Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func GetBaseURL(ctx context.Context) string { + return ctx.Value(BaseURLCtxKey).(string) +} + +func GetVersion(ctx context.Context) string { + return ctx.Value(VersionCtxKey).(string) +} + +func GetLocale(ctx context.Context) string { + return ctx.Value(LocaleCtxKey).(string) +} + +func GetRequestID(ctx context.Context) string { + return caddyhttp.GetVar(ctx, core.VarReqID).(string) +} + +func Base(title string, header string) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var4 := templ.GetChildren(ctx) + if templ_7745c5c3_Var4 == nil { + templ_7745c5c3_Var4 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<!doctype html><html lang=\"en\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var5 string + templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(title) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/index.templ`, Line: 49, Col: 17} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "</title><link rel=\"stylesheet\" href=\"") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var6 string + templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(GetBaseURL(ctx) + "/static/global.css?v=" + GetVersion(ctx)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/index.templ`, Line: 50, Col: 92} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "\"></head><body class=\"min-h-screen flex flex-col items-center justify-center p-4 bg-[#fff8e7]\"><div class=\"text-center text-lg my-auto max-w-2xl w-full px-4\"><h1 id=\"title\" class=\"text-4xl font-bold mb-6\">") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var7 string + templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(header) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/index.templ`, Line: 54, Col: 59} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "</h1>") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templ_7745c5c3_Var4.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<p class=\"text-gray-700 mt-4\">") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = UnsafeT("footer.author", i18n.M{ + "cerberus": `<a href="https://github.com/SJTUG/cerberus" class="text-amber-600 hover:text-amber-700">Cerberus</a>`, + "sjtug": `<a href="https://sjtug.org" class="text-amber-600 hover:text-amber-700">SJTUG</a>`}).Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "</p><p class=\"text-gray-700 text-sm\">") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = UnsafeT("footer.upstream", i18n.M{ + "anubis": `<a href="https://github.com/TecharoHQ/anubis" class="text-amber-600 hover:text-amber-700">Anubis</a>`, + "techaro": `<a href="https://techaro.lol" class="text-amber-600 hover:text-amber-700">Techaro</a>`}).Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "</p></div><p class=\"text-gray-700 text-sm pt-2\">request_id: ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var8 string + templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(GetRequestID(ctx)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/index.templ`, Line: 68, Col: 35} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "</p></body></html>") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func Challenge(challenge string, difficulty int, nonce uint32, ts int64, signature string) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var9 := templ.GetChildren(ctx) + if templ_7745c5c3_Var9 == nil { + templ_7745c5c3_Var9 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + + challengeInput := struct { + Challenge string `json:"challenge"` + Difficulty int `json:"difficulty"` + Nonce uint32 `json:"nonce"` + TS int64 `json:"ts"` + Signature string `json:"signature"` + }{challenge, difficulty, nonce, ts, signature} + + baseURL := GetBaseURL(ctx) + version := GetVersion(ctx) + locale := GetLocale(ctx) + metaInput := struct { + BaseURL string `json:"baseURL"` + Version string `json:"version"` + Locale string `json:"locale"` + }{baseURL, version, locale} + + relPath := func(path string) string { + return baseURL + path + "?v=" + version + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "<img id=\"mascot\" src=\"") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var10 string + templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(relPath("/static/img/mascot-puzzle.png")) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/index.templ`, Line: 97, Col: 64} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "\" alt=\"Cute anime mascot character\" class=\"mx-auto p-4 mb-2 max-w-64\"><div id=\"status-container\"><p id=\"status\" class=\"text-gray-700 mb-1\">status</p><p id=\"metrics\" class=\"text-gray-700 mb-1\">metrics</p><p id=\"message\" class=\"text-gray-700 mb-2\">message</p><!-- Progress Bar (hidden in success state) --><div id=\"progress-container\" class=\"w-48 h-6 bg-white rounded-full border-2 border-[#b79ecf] p-1 mt-2 mb-4 mx-auto\"><div id=\"progress-bar\" class=\"h-full w-[60%] bg-[#b79ecf] rounded-full transition-all duration-300\"></div></div></div><details class=\"mb-4\"><summary class=\"cursor-pointer text-gray-600 hover:text-gray-800\">") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = T("challenge.why_seeing").Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</summary><div class=\"mt-2 text-base text-gray-600 space-y-2\"><p>") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = UnsafeT("challenge.why_seeing_body.part_1", i18n.M{ + "cerberus": `<a href="https://github.com/SJTUG/cerberus" class="text-amber-600 hover:text-amber-700">Cerberus</a>`, + }).Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "</p><p>") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = UnsafeT("challenge.why_seeing_body.part_2", i18n.M{ + "anubis": `<a href="https://github.com/TecharoHQ/anubis" class="text-amber-600 hover:text-amber-700">Anubis</a>`, + "techaro": `<a href="https://techaro.lol" class="text-amber-600 hover:text-amber-700">Techaro</a>`, + }).Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "</p><p>") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = UnsafeT("challenge.why_seeing_body.part_3", i18n.M{ + "jshelter": `<a href="https://jshelter.org/" class="text-amber-600 hover:text-amber-700">JShelter</a>`, + }).Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "</p></div></details><noscript><p>") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = T("challenge.must_enable_js").Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "</p></noscript><script async defer id=\"challenge-script\" x-meta=\"") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var11 string + templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(templ.JSONString(metaInput)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/index.templ`, Line: 135, Col: 79} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\" x-challenge=\"") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var12 string + templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(templ.JSONString(challengeInput)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/index.templ`, Line: 135, Col: 128} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "\" src=\"") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var13 string + templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(relPath("/static/main.js")) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/index.templ`, Line: 135, Col: 163} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "\"></script>") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func Error(message string, description string, mail string) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var14 := templ.GetChildren(ctx) + if templ_7745c5c3_Var14 == nil { + templ_7745c5c3_Var14 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<img id=\"mascot\" src=\"") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var15 string + templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(GetBaseURL(ctx) + "/static/img/mascot-fail.png?v=" + GetVersion(ctx)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/index.templ`, Line: 139, Col: 92} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\" alt=\"Cute anime mascot character with a sad face\" class=\"mx-auto p-4 mb-2 max-w-64\"><p id=\"message\" class=\"text-gray-700 mb-2\">") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var16 string + templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(message) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/index.templ`, Line: 140, Col: 53} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</p><p id=\"description\" class=\"text-gray-700 mb-2\">") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var17 string + templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(description) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/index.templ`, Line: 141, Col: 61} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "</p>") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if mail != "" { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<p class=\"text-gray-700 mb-4\">") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = UnsafeT("error.contact_us", i18n.M{"mail": `<a href="mailto:` + mail + `" class="text-amber-600 hover:text-amber-700">` + mail + `</a>`}).Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</p>") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + return nil + }) +} + +var _ = templruntime.GeneratedTemplate |
